Pular para conteúdo

Fluxo de Mensagens

Mensagem Recebida (WhatsApp → Agent)

Lead envia mensagem
       |
  Go-Whatsmeow recebe
       |
  Webhook → webhook_whatsapp:3000/events
       |
  Publica na fila "events" (RabbitMQ)
       |
  marie_ai consumer consome
       |
  +----+----+
  |         |
  |    Salva evento no MongoDB
  |         |
  |    Upsert contato e chat
  |         |
  |    Avalia triggers
  |         |
  |    CRM sync (move deal para "on_interaction" se aplicavel)
  |         |
  |    Pausa follow-up/remarketing
  |         |
  |    Enfileira no batch (janela de 35s)
  |         |
  |    [Se mais mensagens chegam em 35s, acumula no batch]
  |         |
  |    Timer expira → junta mensagens → processa com agent (LangChain ReAct)
  |         |
  |    Agent responde
  |         |
  +→ Envia resposta via GOWA API → WhatsApp

Webhook RD Station (Lead → Primeira Mensagem)

Lead converte em formulario
       |
  RD Station envia webhook
       |
  POST /api/webhook/rdstation
       |
  Valida payload + busca RD Event config
       |
  Upsert contato + chat
       |
  Salva custom fields no conversation state
       |
  Processa com agent (usando message + system_prompt do RD Event)
       |
  Envia resposta via GOWA API → WhatsApp
       |
  Atualiza lead no RD Station (custom fields)
       |
  Move deal para stage configurado
       |
  Inicia follow-up (se trigger = "webhook")
       |
  Atribui agent ao chat

CRM Sync (3 Pontos)

Sync A — Consumer (Passivo)

Quando lead responde, move deal de on_new_contact/on_follow_up/on_remarketing para on_interaction.

Sync B — Agent Tools (Ativo)

  • mark_meeting_scheduled → move para on_meeting
  • classify_no_interest → move para on_remarketing
  • schedule_meeting → auto-move para on_meeting

Sync C — Timeout Job (Temporal)

Polling a cada 5 minutos. Move deals sem interacao para on_follow_up apos timeout configurado.

Deal Notes

Notas hardcoded sao adicionadas automaticamente no deal do RD Station em eventos-chave:

Evento Nota
Reuniao agendada [Marie AI] Reuniao agendada: "{titulo}" em {data} com {responsavel}
Reuniao cancelada [Marie AI] Reuniao cancelada: "{titulo}" que estava agendada para {data}
Reuniao atualizada [Marie AI] Reuniao atualizada: "{titulo}" \| novo horario: {data}
Task agendada [Marie AI] Task agendada: "{descricao}" para {data}
Task cancelada [Marie AI] Task cancelada (ID: {id})
Transicao de stage [Marie AI] {motivo}

Batching de Mensagens

Quando um lead envia multiplas mensagens em sequencia, o sistema agrupa em um batch antes de processar com o agent:

  1. Primeira mensagem inicia um timer de 35 segundos
  2. Cada nova mensagem do mesmo chat reinicia o timer e e adicionada ao batch
  3. Quando o timer expira (35s sem nova mensagem), todas as mensagens sao concatenadas e processadas como uma so
  4. Todas as acoes imediatas (save, upsert, triggers, CRM sync, pause follow-up) continuam sendo executadas por mensagem individual

Isso evita que o agent responda multiplas vezes quando o lead divide uma ideia em varias mensagens.

Normalizacao de Numero Brasileiro (9° Digito)

Alguns numeros brasileiros estao registrados no WhatsApp com 8 digitos (sem o 9° digito). O sistema trata isso automaticamente:

  1. Tenta enviar com o numero original (13 digitos: 55 + DDD + 9XXXXXXXX)
  2. Se receber erro no LID found, remove o 9° digito e reenvia (55 + DDD + XXXXXXXX)
  3. No envio de mensagens split, o numero corrigido e reutilizado para todas as partes