Enviar Mensagem
Envie mensagens programaticamente via WhatsApp.Para gerenciar contatos (criar, atualizar, etiquetar) ou gerenciar conversas (atribuir, mudar status, adicionar notas) sem enviar mensagem, prefira os endpoints dedicados:
- 📇 API de Contatos — criar, atualizar, gerenciar tags
- 💬 API de Conversas — atribuir operador, mudar status, notas internas
assignTo e portfolio neste endpoint continuam funcionando para retrocompatibilidade.Parâmetros do Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
instanceId | string | ✅ | ID da instância WhatsApp no Brainchat |
phone | string | ✅ | Número do destinatário (formato: 5511999999999) |
messageType | string | Depende | Tipo: text, image, audio, document, option_list. Obrigatório apenas se enviar mensagem |
message | string | Depende | Texto da mensagem ou legenda da mídia |
mediaUrl | string | Depende | URL pública HTTPS do arquivo de mídia |
mediaFilename | string | ❌ | Nome do arquivo para documentos (ex: relatorio.pdf) |
optionList | object | Depende | Objeto com título, botão e opções — obrigatório para messageType: "option_list" |
cardId | string | ❌ | Identificador customizado para rastreamento |
delayMessage | number | ❌ | Delay em segundos antes do envio |
delayTyping | number | ❌ | Tempo em ms de simulação de digitação antes do envio |
assignTo | string | ❌ | E-mail ou UUID do operador para atribuir a conversa |
portfolio | boolean | ❌ | Se true, adiciona o contato à carteira do operador com prioridade absoluta |
queued | boolean | ❌ | Se true, a mensagem entra na fila inteligente em vez de envio imediato |
intervalSeconds | number | ❌ | Intervalo em segundos entre mensagens na fila (padrão: 30s, min: 10s, max: 3600s) |
sentBy | string | ❌ | Origem da mensagem: ai_agent, api, scheduled, automation, operator, ou qualquer string. Se diferente de ai_agent, pausa o agente de IA por 30min |
Exemplos
- Texto
- Mídia
- Lista de Opções
- Fila Inteligente
- Atribuição sem Mensagem
- Atribuição com Mensagem
- Controle do Agente
Todos os parâmetros podem ser combinados livremente em uma única chamada. Por exemplo, é possível enviar uma mensagem com fila inteligente (
queued), atribuição (assignTo + portfolio) e controle do agente (sentBy) ao mesmo tempo.cURL Completo
Comportamentos Automáticos
Fila Inteligente (queued)
Fila Inteligente (queued)
Quando
queued: true, o sistema usa enfileiramento atômico com advisory locks para calcular o próximo horário de envio:- Verifica o último envio para aquela instância
- Calcula
próximo_envio = MAX(agora, último_envio + intervalo) - Agenda a mensagem com o horário calculado
- Um worker (QStash + pg_cron) processa a fila automaticamente
intervalSeconds) garante que mensagens não sejam enviadas em rajada, evitando banimentos do WhatsApp.Janela de horário: Por padrão, mensagens são enviadas entre 08:00 e 20:00 no fuso da instância. Mensagens agendadas fora desse horário são postergadas.Pausa do Agente de IA
Pausa do Agente de IA
Se a instância possui um agente de IA ativo, mensagens enviadas via API com
sentBy diferente de ai_agent pausam automaticamente o agente por 30 minutos para aquele contato específico.Isso evita que o agente responda sobre uma mensagem enviada manualmente por um operador ou automação. A cada nova mensagem humana, o timer de pausa é renovado.Para enviar mensagens via API sem pausar o agente (ex: respostas automáticas do próprio agente), use sentBy: "ai_agent".Qualquer string diferente de ai_agent pausa o agente — os valores api, operator, automation, scheduled são apenas convenções para facilitar a rastreabilidade.Notificação ao Operador
Notificação ao Operador
Quando um contato é atribuído via
assignTo, o operador recebe automaticamente um e-mail contendo:- Nome do contato (ou número, se sem nome)
- Telefone do contato
- Link direto para abrir a conversa no chat (
/c/chat/{telefoneInstância}/{telefoneContato})
Auto-criação de Contato
Auto-criação de Contato
Se o número informado em
phone não existir na base de contatos da instância, o sistema cria automaticamente um novo contato com os dados disponíveis antes de enviar a mensagem.Informações Importantes
Formato do Telefone
Sempre com código do país:
5511999999999. Use o endpoint Sanitizar Número para normalizar.Tipos de Mídia
JPG, PNG, MP3, WAV, MP4, PDF — URLs devem ser públicas e HTTPS.
Iniciar Conversa com Agente de IA
Este é um endpoint diferente do
send-message. Use-o para acionar o agente de IA proativamente — ele envia a primeira mensagem como se fosse o agente e cria a conversa automaticamente.Parâmetros do Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
instanceId | string | ✅ | ID da instância (UUID ou embed_key) |
phone | string | ✅ | Número do destinatário (formato: 5511999999999) |
messageText | string | ✅ | Texto da primeira mensagem enviada como o agente |
agentId | string | ❌ | UUID do agente (obrigatório se a instância tiver múltiplos agentes) |
initiateConversation | boolean | ✅ | Deve ser true para modo proativo |
externalContext | object | ❌ | Dados externos injetados na conversa — ficam disponíveis como variáveis em collected_data para o agente referenciar dinamicamente |
queued | boolean | ❌ | Se true, a mensagem entra na fila inteligente |
intervalSeconds | number | ❌ | Intervalo em segundos entre mensagens na fila |
sentBy | string | ❌ | Origem da mensagem (padrão: api) |
Exemplo
Como funciona:
- A mensagem é enviada como se fosse o agente (não como operador humano)
- A conversa é criada automaticamente no sistema com o agente vinculado
- O agente só processa IA quando o contato responder — a primeira mensagem é enviada diretamente
externalContextinjeta variáveis externas que são armazenadas emcollected_data— o agente pode referenciar essas variáveis durante toda a conversa (ex:nome_cliente,valor_pendente,id_pedido)- Ideal para integrações com CRMs (Pipefy, HubSpot, etc.) onde o agente precisa de contexto externo para conduzir a conversa
- Se o contato não existir, ele é criado automaticamente
cURL
Endpoints Auxiliares
GET — Histórico de Mensagens
Recupere o histórico de mensagens para contexto de IA ou auditoria.| Parâmetro | Obrigatório | Descrição |
|---|---|---|
phone | ✅ | Número do telefone |
start | ✅ | Data inicial (YYYY-MM-DD) |
end | ✅ | Data final (YYYY-MM-DD) |
instanceId | ✅ | ID da instância |
limit | ❌ | Máximo de mensagens (padrão: 100) |
format | ❌ | conversation ou raw |

