POST /send-conversation-message

Envia texto e/ou imagem (ou outro tipo de mídia) dentro de uma conversa de WhatsApp já existente. Diferente de `POST /send-message`, a mensagem enviada aqui é gravada na linha do tempo da conversa: aparece no inbox do atendimento e entra no histórico que o agente de IA usa como contexto na próxima resposta.

Use este endpoint quando o resultado de um processo assíncrono (uma automação no n8n, um workflow de geração de imagem, um sistema externo qualquer) precisa ser entregue de volta numa conversa que já estava em andamento.

Campo Valor
URL https://api.wevi.chat/functions/v1/send-conversation-message
Método POST
Auth Authorization: Bearer wevi_... (API key)
Content-Type application/json
Rate limit 60 req/min por API key
Plano necessário Pro ou Ultra

Body

Campo Tipo Obrigatório Descrição
conversation_id string (uuid) condicional ID da conversa. É o mesmo conversation_id que a Wevi envia automaticamente (dentro de _wevi.conversation_id) quando um agente dispara uma ação customizada pro seu sistema — use-o de volta aqui pra responder na mesma conversa.
connection_id string (uuid) condicional Alternativa a conversation_id: ID da conexão WhatsApp. Use junto com to quando seu sistema só sabe o telefone do contato.
to string condicional Telefone do contato (com ou sem +55). Obrigatório se usar connection_id em vez de conversation_id.
text string condicional Texto da mensagem. Se enviado junto com media, vira a legenda (exceto em áudio).
media objeto condicional Mídia a enviar. Veja campos abaixo.
media.url string (URL) condicional URL pública do arquivo. Use media.url OU media.base64, não precisa dos dois.
media.base64 string condicional Conteúdo do arquivo em base64 (com ou sem o prefixo data:image/png;base64,...). Não precisa hospedar o arquivo em lugar nenhum, o Wevichat sobe automaticamente. Útil quando seu sistema (ex: um workflow no n8n) já tem os bytes do arquivo em mãos e não tem onde hospedar.
media.type string sim, se media image, audio, video ou document.
media.mime_type string sim, se media Ex: image/png, application/pdf.
media.name string não Nome do arquivo (usado em document).
idempotency_key string não Evita duplicação em retries.

É preciso informar conversation_id OU (connection_id + to). É preciso informar text e/ou media. Dentro de media, é preciso informar url OU base64.

Exemplos

Respondendo numa conversa já existente, com o conversation_id recebido de volta na ação customizada:

curl -X POST https://api.wevi.chat/functions/v1/send-conversation-message \
  -H "Authorization: Bearer wevi_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": "conversa-uuid",
    "text": "Prontinho! Aqui está sua imagem.",
    "media": {
      "url": "https://exemplo.com/resultado.png",
      "type": "image",
      "mime_type": "image/png"
    }
  }'

Sem conversation_id, só com telefone:

curl -X POST https://api.wevi.chat/functions/v1/send-conversation-message \
  -H "Authorization: Bearer wevi_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "connection_id": "conn-uuid",
    "to": "+5511999999999",
    "text": "Sua imagem ficou pronta!"
  }'

Enviando a imagem em base64, sem hospedar em lugar nenhum (ex: n8n com o resultado ainda em memória, como Binary Data):

{
  "conversation_id": "conversa-uuid",
  "text": "Prontinho! Aqui está sua imagem.",
  "media": {
    "base64": "iVBORw0KGgoAAAANSUhEUgAA...",
    "type": "image",
    "mime_type": "image/png"
  }
}

No n8n, se o resultado vier como binary data de um nó anterior, use uma expressão tipo {{ $binary.data.data }} (ou o node Extract From File / Move Binary Data configurado pra base64) pra pegar a string e colocar em media.base64.

Resposta

Sucesso (200)

{
  "id": "mensagem-uuid",
  "wamid": "wamid.HBgN...",
  "status": "sent"
}

Erros HTTP

Status error
400 conversation_id or (connection_id and to) is required, text or media is required, erros de validação de media
401 Invalid API key
402 plan_limit_exceeded
404 Conversation not found, Connection not found, Not a WhatsApp conversation
429 Too many requests
500 WhatsApp API error (a mensagem não é gravada na conversa se o envio falhar), Failed to upload media (erro ao subir o media.base64 pro storage)

Como funciona o fluxo de processos demorados (n8n e afins)

Um caso comum: um agente do WhatsApp dispara uma ação customizada (webhook) pra um workflow no n8n que demora minutos pra terminar (ex: gerar uma imagem com IA). O n8n deve responder rápido (200) pra ação customizada assim que o workflow começa, sem esperar terminar, e continuar processando em background. Quando o resultado ficar pronto, o próprio n8n chama send-conversation-message usando o conversation_id que recebeu no payload original (dentro de _wevi.conversation_id), entregando o resultado na mesma conversa.

Quando usar

  • Entregar o resultado de um processo assíncrono (geração de imagem, processamento de arquivo, integração demorada) de volta numa conversa que já estava em andamento.
  • Continuar um atendimento a partir de um sistema externo, mantendo o histórico e o contexto da IA íntegros.

Pra um envio avulso que não precisa aparecer na timeline da conversa (ex: campanha, notificação isolada), use `/send-message` ou `/send-template`.