Skip to main content

Enviar Mensagem

Envie mensagens programaticamente via WhatsApp.
POST https://wapi.stegia.com.br/functions/v1/send-message

Parâmetros do Body

CampoTipoObrigatórioDescrição
instanceIdstringID da instância WhatsApp no Brainchat
phonestringNúmero do destinatário (formato: 5511999999999)
messageTypestringTipo: text, image, audio, document, option_list
messagestringDependeTexto da mensagem ou legenda da mídia
mediaUrlstringDependeURL pública HTTPS do arquivo de mídia
mediaFilenamestringNome do arquivo para documentos (ex: relatorio.pdf)
cardIdstringIdentificador customizado para rastreamento
delayMessagenumberDelay em segundos antes do envio
delayTypingnumberTempo em ms de simulação de digitação antes do envio
assignTostringE-mail ou UUID do operador para atribuir a conversa
portfoliobooleanSe true, adiciona o contato à carteira do operador com prioridade absoluta
queuedbooleanSe true, a mensagem entra na fila inteligente em vez de envio imediato
intervalSecondsnumberIntervalo em segundos entre mensagens na fila (padrão: 30s, min: 10s, max: 3600s)
sentBystringOrigem da mensagem: ai_agent, api, scheduled, automation, operator, ou qualquer string. Se diferente de ai_agent, pausa o agente de IA por 30min

Exemplos

{
  "instanceId": "SUA_INSTANCIA",
  "phone": "5511999999999",
  "messageType": "text",
  "message": "Olá! Como posso ajudar?"
}

cURL Completo

curl -X POST "https://wapi.stegia.com.br/functions/v1/send-message" \
  -H "Content-Type: application/json" \
  -H "X-Client-Token: SEU_TOKEN_AQUI" \
  -d '{
    "instanceId": "SUA_INSTANCIA",
    "phone": "5511999999999",
    "messageType": "text",
    "message": "Olá! Esta é uma mensagem via API."
  }'

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.
POST https://wapi.stegia.com.br/functions/v1/process-ai-agent

Parâmetros do Body

CampoTipoObrigatórioDescrição
instanceIdstringID da instância (UUID ou embed_key)
phonestringNúmero do destinatário (formato: 5511999999999)
messageTextstringTexto da primeira mensagem enviada como o agente
agentIdstringUUID do agente (necessário se a instância tiver múltiplos agentes)
initiateConversationbooleanDeve ser true para modo proativo
externalContextobjectDados externos injetados na conversa como variáveis que o agente pode usar
queuedbooleanSe true, a mensagem entra na fila inteligente
intervalSecondsnumberIntervalo em segundos entre mensagens na fila
sentBystringOrigem da mensagem (padrão: api)

Exemplo

{
  "instanceId": "emb_5434740aa6ed1856",
  "phone": "5511999999999",
  "messageType": "text",
  "messageText": "Olá! Somos da empresa X e gostaríamos de falar sobre seu cadastro.",
  "agentId": "c365ac34-4704-41cb-adbe-52f72221c79a",
  "initiateConversation": true,
  "queued": true,
  "intervalSeconds": 30,
  "sentBy": "api",
  "externalContext": {
    "nome_cliente": "João Silva",
    "valor_pendente": "R$1.500,00",
    "id_pedido": "12345"
  }
}
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 o agente pode referenciar durante toda a conversa (ex: nome do cliente, valor da dívida, ID do 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

curl -X POST "https://wapi.stegia.com.br/functions/v1/process-ai-agent" \
  -H "Content-Type: application/json" \
  -H "X-Client-Token: SEU_TOKEN_AQUI" \
  -d '{
    "instanceId": "emb_5434740aa6ed1856",
    "phone": "5511999999999",
    "messageType": "text",
    "messageText": "Olá! Gostaríamos de falar sobre seu cadastro.",
    "agentId": "SEU_AGENT_ID",
    "initiateConversation": true,
    "sentBy": "api"
  }'

Endpoints Auxiliares

GET — Histórico de Mensagens

Recupere o histórico de mensagens para contexto de IA ou auditoria.
GET https://wapi.stegia.com.br/functions/v1/messages-context
Parâmetros (query string):
ParâmetroObrigatórioDescrição
phoneNúmero do telefone
startData inicial (YYYY-MM-DD)
endData final (YYYY-MM-DD)
instanceIdID da instância
limitMáximo de mensagens (padrão: 100)
formatconversation ou raw
curl -X GET "https://wapi.stegia.com.br/functions/v1/messages-context?phone=5511999999999&start=2024-01-01&end=2024-12-31&instanceId=SUA_INSTANCIA" \
  -H "X-Client-Token: SEU_TOKEN_AQUI"

POST — Sanitizar Número

Endpoint público (sem token) que remove formatação de telefones.
POST https://wapi.stegia.com.br/functions/v1/sanitize-phone-number
curl -X POST "https://wapi.stegia.com.br/functions/v1/sanitize-phone-number" \
  -H "Content-Type: application/json" \
  -d '{"phone": "(11) 99999-9999"}'
Resposta:
{
  "success": true,
  "original": "(11) 99999-9999",
  "sanitized": "11999999999"
}