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
  |         |
  |    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}