CallBack
1. Objetivo do Callback na Porto Seguro
No fluxo de contratação do Seguro Aluguel Fiança da Porto. Após o nosso sistema iniciar uma proposta, a Porto Seguro precisa de um meio para nos notificar sobre o resultado (aprovado, pendente ou recusado).
O objetivo do callback (webhook) é exatamente este: fornecer um mecanismo para que a Porto Seguro envie uma notificação automática (um evento) para o nosso sistema assim que o processo de análise for concluído. Isso permite que nosso sistema dê continuidade ao fluxo de emissão da proposta de forma automatizada, sem a necessidade de consultas manuais .
2. Passos Necessários Lado Porto Seguro(Futuramente)
Para que a Porto Seguro possa nos enviar notificações, é preciso registrar nosso endpoint de callback em seu sistema. Isso é feito através da API de Cadastro do Webhook deles.
- Obter Credenciais: É necessário ter um
Client IDeClient Secretválidos para o ambiente desejado (Homologação ou Produção), obtidos através do Portal do Desenvolvedor da Porto. - Registrar o Webhook: Realizar uma chamada
POSTpara a API de Cadastro de Webhook da Porto:- Endpoint:
https://weebhook-parceiros.riscos-financeiros[AMBIENTE].com/envio/v1/inclusaoCadastro - Payload: No corpo da requisição, devemos enviar um JSON contendo, entre outras coisas:
nomeParceiro: Um identificador para a nossa integração (ex:Review.HML.INT).clientId: Nosso Client ID.apiCallback: Um objeto que descreve nosso endpoint. É aqui que informamos a URL do nosso sistema que receberá a notificação.- URL:
https://[URL_DO_NOSSO_SISTEMA]/callback/{dsTenantId}/porto
- URL:
- Endpoint:
Esse ponto não precisamos nos preocupar por enquanto, só com a parte de recebimento dos updates de proposta
Fluxo proposto:
-
Usuário acessa a página de integrações (ex.: http://localhost:3000/admin/integracao).
-
Na tabela de integrações, cada item tem um botão "Cadastrar Callback" e um campo booleano is_callback_active para indicar se o callback está ativo.
-
Ao clicar no botão, o sistema chama uma função interna ex; RegisterCallback que:
-Gera ou token Basic fixo(pedido no endpoint de cadastro da porto), armazenado na collection Token(ja existente) com tokenType registerCallback.
-
Monta o payload da requisição com os detalhes dos nossos endpoints (auth e callback), incluindo o token Basic no campo tokenApi.
-
Faz uma chamada POST para a API de Cadastro de Webhook da Porto (https://weebhook-parceiros.riscos-financeiros\[AMBIENTE\].com/envio/v1/inclusaoCadastro).
-
Se a resposta for sucesso (status 200), atualiza o campo is_callback_active da integration para true no banco de dados.
-
O token Basic é usado pela Porto para autenticar chamadas ao nosso endpoint de auth (/callback/auth), que responde com um JWT válido.
3. Arquitetura da Funcionalidade Implementada (Nosso Sistema)
1 - Fluxo Resumido
- Seguradora → POST
/callback/:dsTenantId/:insuranceCompany - Handler identifica seguradora, lê payload bruto.
- Seleciona o parser da seguradora.
- Parser valida e traduz payload externo → model.Callback.
- Handler injeta DsTenantID (da url) no objeto.
- Chama o metodo para processar o callback, criado em proposalFacade:
ProcessProposalCallback(). - Façade:
- Valida integridade (tenant, proposta, estado).
- Atualiza proposta / histórico / eventos.
- Aplica regras (finalização, remoção de fila, notificações).
- Resposta HTTP 200 em caso de sucesso (ou código de erro contextualizado)
2 - Handler
- Validar parâmetros da requisição.
- Ler payload.
- Resolver parser pelo identificador da seguradora com um if(ou switch para ficar menos verboso).
- Executar Parse().
- Popular DsTenantID no objeto.
- Encaminhar para a facade, proposalFacade -> ProcessProposalCallback()
- Tratar e converter erros em seus status HTTP.
3 - Parsers
Vão ser criados em rest/handlers/callback/parsers separando em arquivos diferentes para cada seguradora.
porto_parser.gotokio_parser.gotoo_parser.go
- Recebe o payload da seguradora
- Instancia o objeto de /model/callback.go
- Mapping dos status possiveis que a seguradora pode enviar, apontando para os nossos.
- Função Parse(), que traduz os campos do payload, preenchendo os campos do nosso objeto.
- Retorna para o handler.
4 - Facade
- Metodo em proposalFacade, que recebe nosso objeto interno preenchido.
- Valida alguns campos essenciais
- Localiza a proposta, utilizando dsTenantId como indice + o proposalID
- Valida as transições de status. compara o antigo com o atual
- Atualiza a proposta
- Atualiza o historico de integração
- Verifica se deve ser removida da fila
- Dispara email