Projeto 04
Chatbot
Um chatbot de atendimento que conduz fluxos de conversa roteirizados em vários canais e abre o ticket de suporte certo no final.
- Status
- Em produção
- Papel
- Desenvolvedor único do backend, do painel de gestão e da ferramenta de QA.
- Código
- Código privado
- Webhook do chat
- Motor de fluxo
- Mensagens do bot
- Ticket no helpdesk
Problema
Os bots nativos da plataforma de chat eram difíceis de alterar e quase impossíveis de testar, e uma prova de conceito anterior tinha virado uma longa cadeia de if/elif que ninguém queria mexer.
Solução
Um serviço em TypeScript que recebe os webhooks do chat e conduz cada conversa por um grafo de fluxo declarativo. O motor é uma função pura: recebe o grafo, o estado atual e a resposta do cliente e devolve o novo estado e uma lista de ações, sem nenhum I/O. Um executor separado envia as mensagens, abre tickets categorizados no helpdesk e encerra as conversas. Um único processo atende vários fluxos sobre o mesmo motor.
Destaques de engenharia
- Quase 11 mil conversas atendidas nos primeiros 16 dias em produção.
- Fluxos de conversa como dados: menus e respostas rápidas definidos como nós de um grafo e validados na inicialização, para que um fluxo quebrado nunca entre no ar.
- O estado de cada conversa fica no PostgreSQL, em uma linha travada com SELECT ... FOR UPDATE, para que as mensagens do mesmo cliente sejam tratadas em ordem.
- A entrada de webhooks verifica assinatura ou token, valida o payload com Zod, responde 200 na hora e descarta eventos duplicados pelo id da requisição.
- Chamadas externas fazem retentativa em 429, 5xx e erros de rede, respeitam o Retry-After e têm timeout por tentativa.
- Testes de golden file comparam cada mensagem do bot com os documentos de especificação nos dois sentidos. A suíte tem perto de mil casos de teste.
- A analítica registra o caminho de cada conversa sem guardar nada do que o cliente digitou.