Mensagens
Endpoints de envio de mensagens via Meta Cloud API (Graph API v25.0)
Mensagens
Todos os endpoints de envio de mensagens do WABA Connector. As mensagens sao enviadas pela Meta WhatsApp Cloud API (Graph API v25.0).
Autenticacao
Todos os endpoints requerem o header de autenticacao:
Authorization: Bearer <API_KEY>Resposta padrao
Todas as respostas de sucesso retornam:
{
"success": true,
"wamid": "wamid.HBgNNTU..."
}O campo wamid e o identificador unico da mensagem no WhatsApp (WhatsApp Message ID).
POST /send/text
Envia uma mensagem de texto simples. Suporta resposta a uma mensagem existente via reply_to.
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI (ex: "5511999998888") |
body | string | sim | Texto da mensagem |
reply_to | string | nao | WAMID da mensagem a ser respondida (quote) |
Exemplo
curl -X POST http://localhost:8200/send/text \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"body": "Ola! Como posso ajudar?"
}'Exemplo com reply
curl -X POST http://localhost:8200/send/text \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"body": "Respondendo sua mensagem",
"reply_to": "wamid.HBgNNTU..."
}'POST /send/image
Envia uma imagem. A midia pode ser referenciada por id (media_id previamente enviado via upload) ou por link (URL publica).
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
media | object | sim | {"id": "media_id"} ou {"link": "https://..."} |
caption | string | nao | Legenda da imagem |
filename | string | nao | Nome do arquivo |
Exemplo com link
curl -X POST http://localhost:8200/send/image \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"media": {"link": "https://example.com/foto.jpg"},
"caption": "Confira este documento"
}'Exemplo com media_id
curl -X POST http://localhost:8200/send/image \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"media": {"id": "1234567890"}
}'POST /send/document
Envia um documento (PDF, planilha, etc). O campo filename e obrigatorio.
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
media | object | sim | {"id": "media_id"} ou {"link": "https://..."} |
filename | string | sim | Nome do arquivo com extensao (ex: "contrato.pdf") |
caption | string | nao | Legenda do documento |
Exemplo
curl -X POST http://localhost:8200/send/document \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"media": {"link": "https://example.com/contrato.pdf"},
"filename": "contrato.pdf",
"caption": "Segue o contrato para assinatura"
}'POST /send/audio
Envia um arquivo de audio. Formatos suportados: AAC, AMR, MP3, MP4 audio, OGG (com codec opus).
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
media | object | sim | {"id": "media_id"} ou {"link": "https://..."} |
Exemplo
curl -X POST http://localhost:8200/send/audio \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"media": {"link": "https://example.com/mensagem.ogg"}
}'POST /send/video
Envia um video. Formatos suportados: MP4, 3GPP. Tamanho maximo: 16 MB.
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
media | object | sim | {"id": "media_id"} ou {"link": "https://..."} |
caption | string | nao | Legenda do video |
Exemplo
curl -X POST http://localhost:8200/send/video \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"media": {"link": "https://example.com/video.mp4"},
"caption": "Veja o tutorial"
}'POST /send/sticker
Envia um sticker. Formato suportado: WebP. Tamanho maximo: 100 KB (estatico) ou 500 KB (animado).
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
media | object | sim | {"id": "media_id"} ou {"link": "https://..."} |
Exemplo
curl -X POST http://localhost:8200/send/sticker \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"media": {"link": "https://example.com/sticker.webp"}
}'POST /send/location
Envia uma localizacao no mapa.
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
latitude | float | sim | Latitude (ex: -23.5505) |
longitude | float | sim | Longitude (ex: -46.6333) |
name | string | nao | Nome do local |
address | string | nao | Endereco do local |
Exemplo
curl -X POST http://localhost:8200/send/location \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"latitude": -23.5505,
"longitude": -46.6333,
"name": "MAZAM Escritorio",
"address": "Av. Paulista, 1000 - Sao Paulo, SP"
}'POST /send/contacts
Envia um ou mais cartoes de contato (vCard).
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
contacts | array | sim | Lista de objetos de contato no formato vCard da Meta |
Cada objeto de contato segue o formato da Meta Cloud API:
{
"name": {
"formatted_name": "Joao Silva",
"first_name": "Joao",
"last_name": "Silva"
},
"phones": [
{
"phone": "+5511999998888",
"type": "CELL"
}
],
"emails": [
{
"email": "joao@exemplo.com",
"type": "WORK"
}
]
}Exemplo
curl -X POST http://localhost:8200/send/contacts \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"contacts": [
{
"name": {
"formatted_name": "Suporte MAZAM",
"first_name": "Suporte",
"last_name": "MAZAM"
},
"phones": [
{"phone": "+5511888887777", "type": "WORK"}
]
}
]
}'POST /send/reaction
Envia uma reacao (emoji) a uma mensagem existente. Para remover uma reacao, envie emoji como string vazia.
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
message_id | string | sim | WAMID da mensagem a ser reagida |
emoji | string | sim | Emoji da reacao (ex: "\ud83d\udc4d") ou "" para remover |
Exemplo
curl -X POST http://localhost:8200/send/reaction \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"message_id": "wamid.HBgNNTU...",
"emoji": "\ud83d\udc4d"
}'POST /send/template
Envia uma mensagem de template aprovado pela Meta. Templates sao necessarios para iniciar conversas fora da janela de 24 horas.
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
template_name | string | sim | Nome do template aprovado (ex: "hello_world") |
language | string | nao | Codigo do idioma (padrao: "pt_BR") |
components | array | nao | Componentes com variaveis do template |
Exemplo simples (template sem variaveis)
curl -X POST http://localhost:8200/send/template \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"template_name": "hello_world",
"language": "pt_BR"
}'Exemplo com variaveis
curl -X POST http://localhost:8200/send/template \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"template_name": "confirmacao_proposta",
"language": "pt_BR",
"components": [
{
"type": "body",
"parameters": [
{"type": "text", "text": "Joao"},
{"type": "text", "text": "R$ 5.000,00"},
{"type": "text", "text": "12x de R$ 450,00"}
]
}
]
}'POST /send/interactive
Envia uma mensagem interativa. Suporta tres tipos: buttons (botoes de resposta rapida), list (menu de lista) e cta_url (botao com link).
Request body
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
to | string | sim | Numero do destinatario com DDI |
type | string | sim | Tipo da mensagem: "buttons", "list" ou "cta_url" |
body | string | sim | Texto principal da mensagem |
header | object | nao | Cabecalho (ex: {"type": "text", "text": "Titulo"}) |
footer | string | nao | Texto do rodape |
buttons | array | nao | Lista de botoes (para type="buttons") |
button_text | string | nao | Texto do botao do menu (para type="list", padrao: "Menu") |
sections | array | nao | Secoes do menu (para type="list") |
display_text | string | nao | Texto do botao CTA (para type="cta_url", padrao: "Acessar") |
url | string | nao | URL de destino (para type="cta_url") |
Exemplo: Botoes de resposta rapida
Maximo de 3 botoes. Cada botao tem type: "reply", um id e um title (ate 20 caracteres).
curl -X POST http://localhost:8200/send/interactive \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"type": "buttons",
"body": "Deseja prosseguir com a simulacao de FGTS?",
"header": {"type": "text", "text": "Simulacao FGTS"},
"footer": "MAZAM Credito",
"buttons": [
{"type": "reply", "reply": {"id": "sim", "title": "Sim, prosseguir"}},
{"type": "reply", "reply": {"id": "nao", "title": "Nao, obrigado"}},
{"type": "reply", "reply": {"id": "duvidas", "title": "Tenho duvidas"}}
]
}'Exemplo: Menu de lista
curl -X POST http://localhost:8200/send/interactive \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"type": "list",
"body": "Escolha o produto de seu interesse:",
"button_text": "Ver opcoes",
"sections": [
{
"title": "Produtos",
"rows": [
{"id": "fgts", "title": "Antecipacao FGTS", "description": "Saque-aniversario"},
{"id": "econsignado", "title": "E-Consignado", "description": "Credito consignado CLT"},
{"id": "info", "title": "Mais informacoes", "description": "Falar com atendente"}
]
}
]
}'Exemplo: Botao CTA com URL
curl -X POST http://localhost:8200/send/interactive \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"to": "5511999998888",
"type": "cta_url",
"body": "Acesse o link abaixo para assinar o contrato digitalmente.",
"display_text": "Assinar contrato",
"url": "https://assinatura.mazam.com.br/contrato/abc123"
}'Observacoes importantes
Janela de 24 horas
- Dentro da janela (cliente enviou mensagem nas ultimas 24h): voce pode enviar qualquer tipo de mensagem (texto, midia, interativo) gratuitamente.
- Fora da janela: apenas mensagens de template aprovado (
POST /send/template) podem ser enviadas. Mensagens de template sao cobradas por entrega.
Formato do campo media
O campo media aceita dois formatos:
- Por ID:
{"id": "media_id"}-- use quando ja fez upload viaPOST /media/upload - Por link:
{"link": "https://url-publica.com/arquivo.ext"}-- a URL deve ser acessivel publicamente
Formato do numero to
Sempre use o formato internacional sem simbolos: apenas digitos com DDI. Exemplos:
- Brasil:
"5511999998888"(55 = DDI, 11 = DDD, 9xxxx = numero) - Portugal:
"351912345678"