Pular para o conteúdo

Enviar mensagens

Envie mensagens pelos três canais com um único endpoint. A chamada é assíncrona: o broker valida, aceita com 202 e entrega à Meta em background.

POST /v1/messages
Authorization: Bearer lidmo_sk_...
Content-Type: application/json
Campo Tipo Obrigatório Descrição
channel string sim whatsapp | instagram | messenger
to string sim destinatário (telefone E.164 no WhatsApp; PSID/IGSID nos demais)
type string sim text | image | video | audio | document | sticker | template | interactive
text objeto — quando type: text
media objeto — quando type é um tipo de mídia
template objeto — quando type: template
interactive objeto — quando type: interactive

Resposta 202 Accepted:

{ "status": "accepted", "channel": "whatsapp", "to": "5511999999999" }

O resultado final da entrega (enviado/entregue/lido/falhou) chega como um evento message.status no seu webhook.

{
"channel": "whatsapp",
"to": "5511999999999",
"type": "text",
"text": { "body": "Olá! Seu pedido saiu para entrega.", "preview_url": false }
}

media.kind repete o tipo; forneça link (URL pública) ou id (mídia já enviada à Meta). caption e filename são opcionais.

{
"channel": "whatsapp",
"to": "5511999999999",
"type": "image",
"media": { "kind": "image", "link": "https://seu-cdn.com/comprovante.png", "caption": "Comprovante" }
}

Mensagens iniciadas pela empresa fora da janela de 24h usam templates aprovados. Informe name, language e os components com seus parameters.

{
"channel": "whatsapp",
"to": "5511999999999",
"type": "template",
"template": {
"name": "confirmacao_pedido",
"language": "pt_BR",
"components": [
{ "type": "body", "parameters": [ { "type": "text", "text": "A-1234" } ] }
]
}
}
{
"channel": "whatsapp",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"body": "Confirma o agendamento?",
"buttons": [
{ "id": "yes", "title": "Sim" },
{ "id": "no", "title": "Não" }
]
}
}

Para lista, use "type": "list", button_text (rótulo do CTA) e sections com rows (id, title, description).

Respostas livres (texto/mídia/interativa) só podem ser enviadas dentro de 24h após a última mensagem do contato. Fora disso, use um template. A resposta de erro da Meta, quando ocorre, chega no evento message.status.