AgentV8 — Disparos
Status: Ativo | ID: bVLqRhZ4sRmaqI8E | Nodes: 98 | Última atualização: 18/03/2026
O que este workflow faz?
O AgentV8 - Disparos é o motor de comunicação multicanal da Fluity. Ele opera em dois modos distintos e complementares:
Modo 1 — Disparo via API: Recebe uma chamada externa, valida a autenticação, monta a mensagem a partir de um template com variáveis e envia ao contato via WhatsApp.
Modo 2 — Relay de Operador: Recebe mensagens enviadas por atendentes humanos no painel e as entrega ao cliente final via WhatsApp, Telegram ou Facebook Messenger, registrando tudo e atualizando o status do chat.
Canais suportados
| Canal | Texto | Imagem | Documento | Vídeo | CSAT |
|---|---|---|---|---|---|
| WhatsApp (Evolution API) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Telegram | ✅ | ✅ | ✅ | ✅ | — |
| Facebook Messenger | ✅ | ✅ | — | ✅ | — |
Modo 1 — Disparo via API
Fluxo completo
POST /webhook/{id}
{ auth_token, channel_id, phone, message_id, variables }
│
▼
┌─────────────────────────────────┐
│ AUTENTICAÇÃO │
│ Valida Auth → busca token no │
│ Supabase (api_disparos_auth) │
│ Valida janela de 2 minutos │
└────────────────┬────────────────┘
│ token inválido → 401
▼
┌─────────────────────────────────┐
│ BUSCA DE DADOS │
│ Instância → Contato → Chat │
│ (cria contato se não existir) │
└────────────────┬────────────────┘
│ não encontrado → erro
▼
┌─────────────────────────────────┐
│ MONTAGEM DA MENSAGEM │
│ Busca template (message_id) │
│ Substitui {{variáveis}} │
│ do payload no conteúdo │
└────────────────┬────────────────┘
│ variável faltando → erro
▼
┌─────────────────────────────────┐
│ ENVIO │
│ Salva no Supabase │
│ Envia via Evolution API │
│ (delay de 4,2 segundos) │
└────────────────┬────────────────┘
▼
200 OK (sucesso)Sistema de autenticação
O disparo via API usa um sistema de token com janela de tempo de 2 minutos:
- O token é gerado e registrado na tabela
api_disparos_auth_log - O workflow busca o token recebido nessa tabela
- Valida se foi criado há menos de 2 minutos
- Tokens expirados retornam
401 Unauthorized
Motor de templates com variáveis
As mensagens são templates cadastrados no Supabase com suporte a variáveis dinâmicas:
Template: "Olá, {{nome}}! Sua consulta está agendada para {{data}} às {{horario}}."
Payload: { "variables": { "nome": "Maria", "data": "20/03", "horario": "14h" } }
Resultado: "Olá, Maria! Sua consulta está agendada para 20/03 às 14h."Se alguma variável declarada no template não for enviada no payload, o workflow retorna erro listando quais estão faltando. O envio não ocorre com variáveis incompletas.
O campo variables aceita três formatos:
- Objeto:
{ "nome": "Maria" } - Array:
[{ "key": "nome", "value": "Maria" }] - String JSON de qualquer um dos formatos acima
Modo 2 — Relay de Operador
Quando um atendente humano envia uma mensagem pelo painel, o workflow a repassa ao cliente final e atualiza o chat para "Atendimento Humano", pausando a IA.
Webhooks por canal
| Webhook | Canal de entrega |
|---|---|
sender_wpp | WhatsApp via Evolution API |
sender_telegram | Telegram via Bot API |
Sender_facebook | Facebook Messenger via Graph API |
sender | WhatsApp genérico (por instância) |
Fluxo por canal
Todos os 4 webhooks seguem a mesma lógica:
POST do painel de atendimento
│
▼
Switch: tipo de evento?
├── operator_message_to_client
│ │
│ ▼
│ Busca instância → Atualiza chat
│ (ia=pausada, status=Atendimento Humano)
│ │
│ ▼
│ Switch: tipo de mídia?
│ ├── text → Salva + Envia texto
│ ├── image → Salva + Envia imagem
│ ├── document → Salva + Envia documento
│ └── video → Download → Converte → Salva + Envia vídeo
│
└── csat_survey
│
▼
Aguarda 2 minutos
│
▼
Envia pesquisa de satisfaçãoAo receber qualquer mensagem de operador, o workflow automaticamente pausa a IA naquele chat (atendimento_ia = pause) e marca o status como "Atendimento Humano". O agente de IA não responderá mais nesse chat até ser reativado.
Envio de vídeo (WhatsApp)
O vídeo tem um tratamento especial no canal WhatsApp:
media_url (URL do vídeo)
│
▼
HTTP Request (download do arquivo)
│
▼
Extract from File (converte para base64)
│
▼
Evolution API (envia como base64)Integrações e APIs
| Serviço | Para que serve |
|---|---|
| Evolution API | Envio de texto, imagem, documento e vídeo via WhatsApp |
| Telegram Bot API | Envio de texto, foto, documento e vídeo via Telegram |
| Meta Graph API v19.0 | Envio de mensagens via Facebook Messenger |
| Supabase | Banco principal: auth, instâncias, contatos, chats e mensagens |
Endpoints HTTP diretos
| Node | Método | URL |
|---|---|---|
| Send Facebook (texto) | POST | graph.facebook.com/v19.0/me/messages |
| Send IMG_Facebook | POST | graph.facebook.com/v19.0/me/messages |
| Send video_Facebook | POST | graph.facebook.com/v19.0/me/messages |
| HTTP Request (download vídeo) | GET | URL dinâmica do campo media_url |
Tabelas do Supabase
| Tabela | Operações | Para que serve |
|---|---|---|
api_disparos_auth_log | Leitura | Validar tokens de autenticação da API |
api_disparos_messages | Leitura | Buscar templates de mensagem |
instances | Leitura | Dados da instância: canal, org_id, access_token |
contacts | Leitura / Escrita | Buscar ou criar contatos pelo telefone |
chats_Instagram | Escrita | Criar chats (status Disparo API) ou atualizar para Atendimento Humano |
chat_messages_instagram | Escrita | Registrar todas as mensagens enviadas (todos os tipos e canais) |
Lógica de decisão
Validações em sequência (Modo API)
| Verificação | Falha → |
|---|---|
| Token válido (< 2 min)? | 401 — autenticação inválida |
| Instância existe? | Erro — canal não encontrado |
| Mensagem (template) existe? | Erro — template não encontrado |
| Todas as variáveis presentes? | Erro — lista as variáveis faltando |
Tipos de evento (Relay de Operador)
| Evento recebido | Ação |
|---|---|
operator_message_to_client | Entrega a mensagem imediatamente ao contato |
csat_survey | Aguarda 2 minutos e envia pesquisa de satisfação |
Tipos de mídia suportados por canal
| Tipo | Telegram | ||
|---|---|---|---|
text | ✅ | ✅ | ✅ |
image | ✅ | ✅ | ✅ |
document | ✅ | ✅ | — |
video | ✅ (download + base64) | ✅ | ✅ |