Skip to main content

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:Os parâmetros assignTo e portfolio neste endpoint continuam funcionando para retrocompatibilidade.

Parâmetros do Body

Exemplos

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

Quando queued: true, o sistema usa enfileiramento atômico com advisory locks para calcular o próximo horário de envio:
  1. Verifica o último envio para aquela instância
  2. Calcula próximo_envio = MAX(agora, último_envio + intervalo)
  3. Agenda a mensagem com o horário calculado
  4. Um worker (QStash + pg_cron) processa a fila automaticamente
Limites de velocidade: O intervalo configurável (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.
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.
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})
O e-mail é enviado de forma assíncrona (fire-and-forget) e não bloqueia o envio da mensagem.
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

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
  • externalContext injeta variáveis externas que são armazenadas em collected_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âmetros (query string):

POST — Sanitizar Número

Endpoint público (sem token) que remove formatação de telefones.
Resposta: