Todos os projetos

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
Fluxo simplificado
  1. Webhook do chat
  2. Motor de fluxo
  3. Mensagens do bot
  4. Ticket no helpdesk

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.

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.

  • 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.