Enviar uma mensagem
Envia uma mensagem pelo número, no contrato da Cloud API da Meta: o corpo vai para a Meta sem alteração, e a resposta (de sucesso ou de erro) volta como a Meta mandou. Uma integração feita para a Meta só troca o host e o token.
Tipos: texto (com prévia de link), imagem, áudio (e mensagem de voz), vídeo, documento, figurinha — por id de upload ou por link —, localização, cartões de contato, reação, interativas (botões, lista, produto, lista de produtos, catálogo, flow, pedido de permissão para ligar) e modelos aprovados (template, com variáveis no cabeçalho, no corpo e nos botões). context.message_id responde a uma mensagem. O mesmo caminho marca uma mensagem recebida como lida e mostra "digitando…". Cada tipo tem um exemplo no corpo da requisição e um trecho de código.
Mídia: Áudio: AAC, AMR, MP3, M4A ou OGG (só codec OPUS, mono). Até 16 MB. Uma mensagem de voz (voice: true) é OGG/OPUS. Documento: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie por link. Imagem: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB. Figurinha: WEBP de 512 × 512 px: estática até 100 KB, animada até 500 KB. Vídeo: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.
Janela de 24 h: fora dela (desde a última mensagem do cliente) só um modelo aprovado é entregue; o resto a Meta recusa (código 131047, repassado).
A mensagem aparece na conversa do cliente na plataforma. A conversa fica com a automação (status automated); para onde vai a resposta do cliente depende do modo da chave — notify: vai para a fila dos atendentes; bot: continua com a integração — ou do header X-Synergy-Replies. Sem o Inbox no plano, a conversa fica sempre com a integração.
Uma chave bot não envia para uma conversa que está com um atendente ou na fila depois de passar por pessoas (409, código 1390001) até ela ser devolvida para a automação.
Idempotência: com o header Idempotency-Key, repetir a mesma requisição responde com o mesmo messages[].id e a mensagem chega à Meta uma vez só. A chave vale por chave de API e por número. Enquanto o primeiro envio está em andamento a repetição recebe 409 (código 1390002); se ele falhou, ou ficou preso por mais de 30 s, a repetição envia de novo. Reusar a chave para outro destinatário é recusado (422, código 1390003).
Não há retentativa do nosso lado: o erro da Meta volta na hora.
Corpo de até 64 KB. Enviar um flow com endpoint da Synergy exige um flow_token emitido por POST /v1/numbers/{phone_number_id}/flows/{flow_id}/token.
Instagram: com o ig-user-id de uma conta do Instagram conectada no lugar do phone_number_id, a mesma rota envia uma mensagem direta ou a resposta privada a um comentário. O corpo é o do Instagram (InstagramSendRequest, estrito, lido pela Synergy) e a resposta, InstagramSendResponse: 200 { recipient_id, message_id } ou, para recipient.comment_id, 202 { queued: true, comment_id }. Exige os recursos api e instagram no plano. A pessoa precisa já ter uma conversa com a conta, e a janela de 24 h é conferida pela Synergy antes de chamar a Meta (400, código 10, subcódigo 2534022); a API nunca usa a etiqueta Human Agent. Chaves de assistente não enviam pelo Instagram (403, código 200). Os erros do Instagram seguem o formato da Graph API; os guias instagram e customer-service-window têm os exemplos.
Requer#
- Escopo da chave
- Enviar mensagens
messagesComo os escopos funcionam - Recurso do plano
- API e webhooks
apiVer os planos que incluem - Formato
- O da API de WhatsApp Cloud da Meta, na requisição e na resposta.
Parâmetros#
No caminho#
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| version | string | obrigatório | A versão da Graph API da Meta que a chamada usa (vN.N): repassada à Meta como veio. |
| phone_number_id | string | obrigatório | O phone_number_id do número na Meta (o mesmo da Cloud API). Precisa ser um número ativo da organização da chave. |
Cabeçalhos#
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | obrigatório | Sua chave de API, no formato Bearer <chave>. Veja Autenticação. |
| Idempotency-Key | string | opcional | Uma chave escolhida pela integração para UMA requisição (por exemplo o id do pedido). Repetir a requisição com a mesma chave não envia duas vezes. |
| X-Synergy-Replies | string | opcional | Para onde vai a resposta do cliente a esta mensagem: queue = fila dos atendentes, automation = continua com a integração. Sem o header vale o modo da chave (notify → queue, bot → automation). Valores: queue, automation. |
Corpo#
Tipo de conteúdo: application/json.
O corpo de envio da Cloud API da Meta, repassado sem alteração na versão da Graph API do caminho: uma mensagem (OutgoingMessage, pelo type) ou uma confirmação de leitura (ReadReceiptRequest). O contrato é o da Meta e é ela que valida o conteúdo; a Synergy só confere o que está em x-synergy-notes. Campos que este documento não lista vão junto.
Texto#
TextMessage
Texto. Só vai dentro da janela de 24 h desde a última mensagem do cliente; fora dela, use um modelo (template).
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"text"opcional
textobjectobrigatório
- bodystringobrigatórioO texto: até 4096 caracteres. Aceita a formatação do WhatsApp (
*negrito*,_itálico_…) e emojis. - preview_urlbooleanopcional
truemostra a prévia do primeiro link do texto (o link precisa começar comhttp://ouhttps://).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pedido-42-saiu' \
-d '{"messaging_product":"whatsapp","to":"5511999999999","type":"text","text":{"body":"Seu pedido saiu para entrega."}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': 'pedido-42-saiu',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "text",
"text": {
"body": "Seu pedido saiu para entrega."
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
"Idempotency-Key": "pedido-42-saiu",
},
json={
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "text",
"text": {
"body": "Seu pedido saiu para entrega.",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "text",
"text": {
"body": "Seu pedido saiu para entrega."
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"text","text":{"body":"Acompanhe a entrega em https://www.example.com/pedidos/42","preview_url":true}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "text",
"text": {
"body": "Acompanhe a entrega em https://www.example.com/pedidos/42",
"preview_url": true
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "text",
"text": {
"body": "Acompanhe a entrega em https://www.example.com/pedidos/42",
"preview_url": True,
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "text",
"text": {
"body": "Acompanhe a entrega em https://www.example.com/pedidos/42",
"preview_url": true
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","context":{"message_id":"wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA=="},"type":"text","text":{"body":"Sim, temos em azul e em verde."}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"context": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA=="
},
"type": "text",
"text": {
"body": "Sim, temos em azul e em verde."
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"context": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
},
"type": "text",
"text": {
"body": "Sim, temos em azul e em verde.",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"context": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA=="
},
"type": "text",
"text": {
"body": "Sim, temos em azul e em verde."
}
}Imagem#
ImageMessage
Imagem, com legenda opcional.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"image"obrigatório
imageobjectobrigatório
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - captionstringopcionalLegenda, até 1024 caracteres.
- linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"image","image":{"link":"https://arquivos.example.com/produtos/tenis-azul.jpg","caption":"Tênis azul, tamanhos 38 a 44"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "image",
"image": {
"link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
"caption": "Tênis azul, tamanhos 38 a 44"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "image",
"image": {
"link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
"caption": "Tênis azul, tamanhos 38 a 44",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "image",
"image": {
"link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
"caption": "Tênis azul, tamanhos 38 a 44"
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"image","image":{"id":"1166846181421424","caption":"Seu comprovante"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "image",
"image": {
"id": "1166846181421424",
"caption": "Seu comprovante"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "image",
"image": {
"id": "1166846181421424",
"caption": "Seu comprovante",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "image",
"image": {
"id": "1166846181421424",
"caption": "Seu comprovante"
}
}Áudio#
AudioMessage
Áudio. Não aceita legenda.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"audio"obrigatório
audioobjectobrigatório
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: AAC, AMR, MP3, M4A ou OGG (só codec OPUS, mono). Até 16 MB. Uma mensagem de voz (voice: true) é OGG/OPUS.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - voicebooleanopcional
true: chega como mensagem de voz (OGG/OPUS), como as gravadas no aplicativo. - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"audio","audio":{"id":"1166846181421424","voice":true}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "audio",
"audio": {
"id": "1166846181421424",
"voice": true
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "audio",
"audio": {
"id": "1166846181421424",
"voice": True,
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "audio",
"audio": {
"id": "1166846181421424",
"voice": true
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"audio","audio":{"link":"https://arquivos.example.com/audios/boas-vindas.mp3"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "audio",
"audio": {
"link": "https://arquivos.example.com/audios/boas-vindas.mp3"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "audio",
"audio": {
"link": "https://arquivos.example.com/audios/boas-vindas.mp3",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "audio",
"audio": {
"link": "https://arquivos.example.com/audios/boas-vindas.mp3"
}
}Vídeo#
VideoMessage
Vídeo, com legenda opcional.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"video"obrigatório
videoobjectobrigatório
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - captionstringopcionalLegenda, até 1024 caracteres.
- linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"video","video":{"link":"https://arquivos.example.com/videos/como-usar.mp4","caption":"Veja como usar"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "video",
"video": {
"link": "https://arquivos.example.com/videos/como-usar.mp4",
"caption": "Veja como usar"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "video",
"video": {
"link": "https://arquivos.example.com/videos/como-usar.mp4",
"caption": "Veja como usar",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "video",
"video": {
"link": "https://arquivos.example.com/videos/como-usar.mp4",
"caption": "Veja como usar"
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"video","video":{"id":"1166846181421424"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "video",
"video": {
"id": "1166846181421424"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "video",
"video": {
"id": "1166846181421424",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "video",
"video": {
"id": "1166846181421424"
}
}Documento#
DocumentMessage
Documento, com legenda e nome de arquivo opcionais.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"document"obrigatório
documentobjectobrigatório
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie porlink.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - captionstringopcionalLegenda, até 1024 caracteres.
- filenamestringopcionalO nome do arquivo que o cliente vê (com a extensão, por exemplo
boleto.pdf). - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"document","document":{"link":"https://arquivos.example.com/boletos/42.pdf","filename":"boleto-pedido-42.pdf","caption":"Seu boleto vence dia 10"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "document",
"document": {
"link": "https://arquivos.example.com/boletos/42.pdf",
"filename": "boleto-pedido-42.pdf",
"caption": "Seu boleto vence dia 10"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "document",
"document": {
"link": "https://arquivos.example.com/boletos/42.pdf",
"filename": "boleto-pedido-42.pdf",
"caption": "Seu boleto vence dia 10",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "document",
"document": {
"link": "https://arquivos.example.com/boletos/42.pdf",
"filename": "boleto-pedido-42.pdf",
"caption": "Seu boleto vence dia 10"
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"document","document":{"id":"1166846181421424","filename":"contrato.pdf"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "document",
"document": {
"id": "1166846181421424",
"filename": "contrato.pdf"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "document",
"document": {
"id": "1166846181421424",
"filename": "contrato.pdf",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "document",
"document": {
"id": "1166846181421424",
"filename": "contrato.pdf"
}
}Figurinha#
StickerMessage
Figurinha. Não aceita legenda.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"sticker"obrigatório
stickerobjectobrigatório
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: WEBP de 512 × 512 px: estática até 100 KB, animada até 500 KB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"sticker","sticker":{"id":"1166846181421424"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "sticker",
"sticker": {
"id": "1166846181421424"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "sticker",
"sticker": {
"id": "1166846181421424",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "sticker",
"sticker": {
"id": "1166846181421424"
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"sticker","sticker":{"link":"https://arquivos.example.com/figurinhas/obrigado.webp"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "sticker",
"sticker": {
"link": "https://arquivos.example.com/figurinhas/obrigado.webp"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "sticker",
"sticker": {
"link": "https://arquivos.example.com/figurinhas/obrigado.webp",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "sticker",
"sticker": {
"link": "https://arquivos.example.com/figurinhas/obrigado.webp"
}
}Localização#
LocationMessage
Um ponto no mapa.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"location"obrigatório
locationobjectobrigatório
- latitudestring | numberobrigatórioLatitude em graus decimais.
- longitudestring | numberobrigatórioLongitude em graus decimais.
- namestringopcionalO nome do lugar.
- addressstringopcionalO endereço.
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"location","location":{"latitude":"-23.561414","longitude":"-46.655881","name":"Loja Paulista","address":"Av. Paulista, 1000 - São Paulo, SP"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "location",
"location": {
"latitude": "-23.561414",
"longitude": "-46.655881",
"name": "Loja Paulista",
"address": "Av. Paulista, 1000 - São Paulo, SP"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "location",
"location": {
"latitude": "-23.561414",
"longitude": "-46.655881",
"name": "Loja Paulista",
"address": "Av. Paulista, 1000 - São Paulo, SP",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "location",
"location": {
"latitude": "-23.561414",
"longitude": "-46.655881",
"name": "Loja Paulista",
"address": "Av. Paulista, 1000 - São Paulo, SP"
}
}Contatos#
ContactsMessage
Até 5 cartões de contato.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"contacts"obrigatório
contactsobject[]obrigatório
nameobjectopcional
- formatted_namestringobrigatórioO nome completo, como aparece no cartão.
- first_namestringopcionalNome.
- last_namestringopcionalSobrenome.
- middle_namestringopcionalNome do meio.
- prefixstringopcionalPrefixo (por exemplo
Dr.). - suffixstringopcionalSufixo.
phonesobject[]opcional
- phonestringobrigatórioO telefone, como deve aparecer.
- typestringopcionalTipo. Valores:
HOME,WORK. - wa_idstringopcionalO WhatsApp do contato: com ele, o cartão mostra o botão de conversar.
emailsobject[]opcional
- emailstringobrigatórioE-mail.
- typestringopcionalValores:
HOME,WORK.
urlsobject[]opcional
- urlstringobrigatórioSite.
- typestringopcionalValores:
HOME,WORK.
addressesobject[]opcional
- streetstringopcionalRua e número.
- citystringopcionalCidade.
- statestringopcionalEstado (sigla).
- zipstringopcionalCEP.
- countrystringopcionalPaís.
- country_codestringopcionalCódigo ISO do país, duas letras.
- typestringopcionalValores:
HOME,WORK.
orgobjectopcional
- companystringopcionalEmpresa.
- departmentstringopcionalDepartamento.
- titlestringopcionalCargo.
- birthdaystringopcionalAniversário,
AAAA-MM-DD.
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"contacts","contacts":[{"name":{"formatted_name":"Maria Souza","first_name":"Maria","last_name":"Souza"},"phones":[{"phone":"+55 11 98888-7777","type":"WORK","wa_id":"5511988887777"}],"emails":[{"email":"maria@example.com","type":"WORK"}],"org":{"company":"Loja Exemplo","title":"Atendimento"}}]}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "contacts",
"contacts": [
{
"name": {
"formatted_name": "Maria Souza",
"first_name": "Maria",
"last_name": "Souza"
},
"phones": [
{
"phone": "+55 11 98888-7777",
"type": "WORK",
"wa_id": "5511988887777"
}
],
"emails": [
{
"email": "maria@example.com",
"type": "WORK"
}
],
"org": {
"company": "Loja Exemplo",
"title": "Atendimento"
}
}
]
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "contacts",
"contacts": [
{
"name": {
"formatted_name": "Maria Souza",
"first_name": "Maria",
"last_name": "Souza",
},
"phones": [
{
"phone": "+55 11 98888-7777",
"type": "WORK",
"wa_id": "5511988887777",
},
],
"emails": [
{
"email": "maria@example.com",
"type": "WORK",
},
],
"org": {
"company": "Loja Exemplo",
"title": "Atendimento",
},
},
],
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "contacts",
"contacts": [
{
"name": {
"formatted_name": "Maria Souza",
"first_name": "Maria",
"last_name": "Souza"
},
"phones": [
{
"phone": "+55 11 98888-7777",
"type": "WORK",
"wa_id": "5511988887777"
}
],
"emails": [
{
"email": "maria@example.com",
"type": "WORK"
}
],
"org": {
"company": "Loja Exemplo",
"title": "Atendimento"
}
}
]
}Reação#
ReactionMessage
Uma reação a uma mensagem da conversa. emoji vazio ("") remove a reação.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. - type"reaction"obrigatório
reactionobjectobrigatório
- message_idstringobrigatórioO
wamidda mensagem que recebe a reação. - emojistringobrigatórioUm emoji, ou
""para remover a reação.
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"reaction","reaction":{"message_id":"wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==","emoji":"👍"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "reaction",
"reaction": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
"emoji": "👍"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "reaction",
"reaction": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
"emoji": "👍",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "reaction",
"reaction": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
"emoji": "👍"
}
}Mensagem interativa#
InteractiveMessage
Mensagem interativa: botões, lista, produtos, catálogo, flow ou pedido de permissão de chamada. Só dentro da janela de 24 h.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"interactive"obrigatório
interactiveobjectobrigatório
O conteúdo da mensagem interativa, pelointeractive.type.- type"button"opcional
headerobjectopcional
Cabeçalho opcional: texto ou mídia (imagem, vídeo, documento).- type"text"opcional
- textstringopcionalAté 60 caracteres. Emojis, sem markdown.
imageobjectopcional
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
videoobjectopcional
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
documentobjectopcional
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie porlink.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - filenamestringopcionalO nome do arquivo.
- linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
bodyobjectopcional
O texto da mensagem. Emojis e markdown.- textstringobrigatórioAté 1024 caracteres.
footerobjectopcional
Rodapé, opcional. Emojis, markdown e links.- textstringobrigatórioAté 60 caracteres.
actionobjectopcional
buttonsobject[]obrigatório
- type"reply"obrigatório
replyobjectobrigatório
- idstringobrigatórioO id do botão, que volta no webhook: até 256 caracteres, único, sem espaços nas pontas.
- titlestringobrigatórioO texto do botão: até 20 caracteres, único. Emojis, sem markdown.
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"button","header":{"type":"text","text":"Pedido 42"},"body":{"text":"Podemos confirmar a entrega para amanhã?"},"footer":{"text":"Loja Exemplo"},"action":{"buttons":[{"type":"reply","reply":{"id":"confirm","title":"Confirmar"}},{"type":"reply","reply":{"id":"reschedule","title":"Remarcar"}}]}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "text",
"text": "Pedido 42"
},
"body": {
"text": "Podemos confirmar a entrega para amanhã?"
},
"footer": {
"text": "Loja Exemplo"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "confirm",
"title": "Confirmar"
}
},
{
"type": "reply",
"reply": {
"id": "reschedule",
"title": "Remarcar"
}
}
]
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "text",
"text": "Pedido 42",
},
"body": {
"text": "Podemos confirmar a entrega para amanhã?",
},
"footer": {
"text": "Loja Exemplo",
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "confirm",
"title": "Confirmar",
},
},
{
"type": "reply",
"reply": {
"id": "reschedule",
"title": "Remarcar",
},
},
],
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "text",
"text": "Pedido 42"
},
"body": {
"text": "Podemos confirmar a entrega para amanhã?"
},
"footer": {
"text": "Loja Exemplo"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "confirm",
"title": "Confirmar"
}
},
{
"type": "reply",
"reply": {
"id": "reschedule",
"title": "Remarcar"
}
}
]
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"button","header":{"type":"image","image":{"link":"https://arquivos.example.com/produtos/tenis-azul.jpg"}},"body":{"text":"Gostou deste modelo?"},"action":{"buttons":[{"type":"reply","reply":{"id":"want","title":"Quero"}},{"type":"reply","reply":{"id":"other","title":"Ver outro"}}]}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "image",
"image": {
"link": "https://arquivos.example.com/produtos/tenis-azul.jpg"
}
},
"body": {
"text": "Gostou deste modelo?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "want",
"title": "Quero"
}
},
{
"type": "reply",
"reply": {
"id": "other",
"title": "Ver outro"
}
}
]
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "image",
"image": {
"link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
},
},
"body": {
"text": "Gostou deste modelo?",
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "want",
"title": "Quero",
},
},
{
"type": "reply",
"reply": {
"id": "other",
"title": "Ver outro",
},
},
],
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"header": {
"type": "image",
"image": {
"link": "https://arquivos.example.com/produtos/tenis-azul.jpg"
}
},
"body": {
"text": "Gostou deste modelo?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "want",
"title": "Quero"
}
},
{
"type": "reply",
"reply": {
"id": "other",
"title": "Ver outro"
}
}
]
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"list","header":{"type":"text","text":"Frete"},"body":{"text":"Escolha como quer receber."},"footer":{"text":"Prazos em dias úteis"},"action":{"button":"Ver opções","sections":[{"title":"Entrega","rows":[{"id":"express","title":"Expressa","description":"1 a 2 dias"},{"id":"standard","title":"Normal","description":"3 a 5 dias"}]},{"title":"Retirada","rows":[{"id":"pickup","title":"Retirar na loja","description":"Hoje, a partir das 14 h"}]}]}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "list",
"header": {
"type": "text",
"text": "Frete"
},
"body": {
"text": "Escolha como quer receber."
},
"footer": {
"text": "Prazos em dias úteis"
},
"action": {
"button": "Ver opções",
"sections": [
{
"title": "Entrega",
"rows": [
{
"id": "express",
"title": "Expressa",
"description": "1 a 2 dias"
},
{
"id": "standard",
"title": "Normal",
"description": "3 a 5 dias"
}
]
},
{
"title": "Retirada",
"rows": [
{
"id": "pickup",
"title": "Retirar na loja",
"description": "Hoje, a partir das 14 h"
}
]
}
]
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "list",
"header": {
"type": "text",
"text": "Frete",
},
"body": {
"text": "Escolha como quer receber.",
},
"footer": {
"text": "Prazos em dias úteis",
},
"action": {
"button": "Ver opções",
"sections": [
{
"title": "Entrega",
"rows": [
{
"id": "express",
"title": "Expressa",
"description": "1 a 2 dias",
},
{
"id": "standard",
"title": "Normal",
"description": "3 a 5 dias",
},
],
},
{
"title": "Retirada",
"rows": [
{
"id": "pickup",
"title": "Retirar na loja",
"description": "Hoje, a partir das 14 h",
},
],
},
],
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "list",
"header": {
"type": "text",
"text": "Frete"
},
"body": {
"text": "Escolha como quer receber."
},
"footer": {
"text": "Prazos em dias úteis"
},
"action": {
"button": "Ver opções",
"sections": [
{
"title": "Entrega",
"rows": [
{
"id": "express",
"title": "Expressa",
"description": "1 a 2 dias"
},
{
"id": "standard",
"title": "Normal",
"description": "3 a 5 dias"
}
]
},
{
"title": "Retirada",
"rows": [
{
"id": "pickup",
"title": "Retirar na loja",
"description": "Hoje, a partir das 14 h"
}
]
}
]
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"product","body":{"text":"O modelo que você pediu."},"action":{"catalog_id":"367025965434465","product_retailer_id":"tenis-azul-42"}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "product",
"body": {
"text": "O modelo que você pediu."
},
"action": {
"catalog_id": "367025965434465",
"product_retailer_id": "tenis-azul-42"
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "product",
"body": {
"text": "O modelo que você pediu.",
},
"action": {
"catalog_id": "367025965434465",
"product_retailer_id": "tenis-azul-42",
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "product",
"body": {
"text": "O modelo que você pediu."
},
"action": {
"catalog_id": "367025965434465",
"product_retailer_id": "tenis-azul-42"
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"product_list","header":{"type":"text","text":"Novidades"},"body":{"text":"Separamos estes para você."},"action":{"catalog_id":"367025965434465","sections":[{"title":"Tênis","product_items":[{"product_retailer_id":"tenis-azul-42"},{"product_retailer_id":"tenis-verde-41"}]},{"title":"Meias","product_items":[{"product_retailer_id":"meia-kit-3"}]}]}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "product_list",
"header": {
"type": "text",
"text": "Novidades"
},
"body": {
"text": "Separamos estes para você."
},
"action": {
"catalog_id": "367025965434465",
"sections": [
{
"title": "Tênis",
"product_items": [
{
"product_retailer_id": "tenis-azul-42"
},
{
"product_retailer_id": "tenis-verde-41"
}
]
},
{
"title": "Meias",
"product_items": [
{
"product_retailer_id": "meia-kit-3"
}
]
}
]
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "product_list",
"header": {
"type": "text",
"text": "Novidades",
},
"body": {
"text": "Separamos estes para você.",
},
"action": {
"catalog_id": "367025965434465",
"sections": [
{
"title": "Tênis",
"product_items": [
{
"product_retailer_id": "tenis-azul-42",
},
{
"product_retailer_id": "tenis-verde-41",
},
],
},
{
"title": "Meias",
"product_items": [
{
"product_retailer_id": "meia-kit-3",
},
],
},
],
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "product_list",
"header": {
"type": "text",
"text": "Novidades"
},
"body": {
"text": "Separamos estes para você."
},
"action": {
"catalog_id": "367025965434465",
"sections": [
{
"title": "Tênis",
"product_items": [
{
"product_retailer_id": "tenis-azul-42"
},
{
"product_retailer_id": "tenis-verde-41"
}
]
},
{
"title": "Meias",
"product_items": [
{
"product_retailer_id": "meia-kit-3"
}
]
}
]
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"catalog_message","body":{"text":"Veja nosso catálogo e faça o pedido por aqui."},"footer":{"text":"Entregamos em toda a cidade"},"action":{"name":"catalog_message","parameters":{"thumbnail_product_retailer_id":"tenis-azul-42"}}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "catalog_message",
"body": {
"text": "Veja nosso catálogo e faça o pedido por aqui."
},
"footer": {
"text": "Entregamos em toda a cidade"
},
"action": {
"name": "catalog_message",
"parameters": {
"thumbnail_product_retailer_id": "tenis-azul-42"
}
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "catalog_message",
"body": {
"text": "Veja nosso catálogo e faça o pedido por aqui.",
},
"footer": {
"text": "Entregamos em toda a cidade",
},
"action": {
"name": "catalog_message",
"parameters": {
"thumbnail_product_retailer_id": "tenis-azul-42",
},
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "catalog_message",
"body": {
"text": "Veja nosso catálogo e faça o pedido por aqui."
},
"footer": {
"text": "Entregamos em toda a cidade"
},
"action": {
"name": "catalog_message",
"parameters": {
"thumbnail_product_retailer_id": "tenis-azul-42"
}
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"flow","header":{"type":"text","text":"Cadastro"},"body":{"text":"Complete seu cadastro em 1 minuto."},"footer":{"text":"Leva menos de 1 minuto"},"action":{"name":"flow","parameters":{"flow_message_version":"3","flow_id":"9876543210","flow_cta":"Abrir cadastro","flow_token":"cadastro-pedido-42","flow_action":"navigate","flow_action_payload":{"screen":"SIGN_UP","data":{"order_id":"42"}}}}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "flow",
"header": {
"type": "text",
"text": "Cadastro"
},
"body": {
"text": "Complete seu cadastro em 1 minuto."
},
"footer": {
"text": "Leva menos de 1 minuto"
},
"action": {
"name": "flow",
"parameters": {
"flow_message_version": "3",
"flow_id": "9876543210",
"flow_cta": "Abrir cadastro",
"flow_token": "cadastro-pedido-42",
"flow_action": "navigate",
"flow_action_payload": {
"screen": "SIGN_UP",
"data": {
"order_id": "42"
}
}
}
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "flow",
"header": {
"type": "text",
"text": "Cadastro",
},
"body": {
"text": "Complete seu cadastro em 1 minuto.",
},
"footer": {
"text": "Leva menos de 1 minuto",
},
"action": {
"name": "flow",
"parameters": {
"flow_message_version": "3",
"flow_id": "9876543210",
"flow_cta": "Abrir cadastro",
"flow_token": "cadastro-pedido-42",
"flow_action": "navigate",
"flow_action_payload": {
"screen": "SIGN_UP",
"data": {
"order_id": "42",
},
},
},
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "flow",
"header": {
"type": "text",
"text": "Cadastro"
},
"body": {
"text": "Complete seu cadastro em 1 minuto."
},
"footer": {
"text": "Leva menos de 1 minuto"
},
"action": {
"name": "flow",
"parameters": {
"flow_message_version": "3",
"flow_id": "9876543210",
"flow_cta": "Abrir cadastro",
"flow_token": "cadastro-pedido-42",
"flow_action": "navigate",
"flow_action_payload": {
"screen": "SIGN_UP",
"data": {
"order_id": "42"
}
}
}
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"call_permission_request","body":{"text":"Podemos ligar para você pelo WhatsApp para resolver o seu pedido?"},"action":{"name":"call_permission_request"}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "call_permission_request",
"body": {
"text": "Podemos ligar para você pelo WhatsApp para resolver o seu pedido?"
},
"action": {
"name": "call_permission_request"
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "call_permission_request",
"body": {
"text": "Podemos ligar para você pelo WhatsApp para resolver o seu pedido?",
},
"action": {
"name": "call_permission_request",
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "call_permission_request",
"body": {
"text": "Podemos ligar para você pelo WhatsApp para resolver o seu pedido?"
},
"action": {
"name": "call_permission_request"
}
}
}Modelo (template)#
TemplateMessage
Um modelo de mensagem aprovado: o único tipo que vai fora da janela de 24 h. components traz os valores das variáveis do modelo.
- messaging_product"whatsapp"opcionalSempre
whatsapp. - recipient_typestringopcional
individual(padrão) ougroup. Valores:individual,group. - tostringobrigatórioO telefone do destinatário com DDI (por exemplo
5511999999999), ou o id do grupo quandorecipient_typeégroup. contextobjectopcional
Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale emreaction(ela já aponta a mensagem emreaction.message_id).- message_idstringobrigatórioO
wamidda mensagem respondida (recebida ou enviada).
- type"template"obrigatório
templateobjectobrigatório
- namestringobrigatórioO nome do modelo aprovado.
languageobjectobrigatório
O idioma do modelo, como foi aprovado.- codestringobrigatórioO código do idioma e da região (por exemplo
pt_BR,en_US). - policy"deterministic"opcionalOpcional; o único valor é
deterministic.
componentsobject[]opcional
Só quando o modelo tem variáveis ou botões com valor: um item por componente (header,body, umbuttonpor botão).- type"header"opcional
parametersobject[]opcional
- type"text"opcional
- parameter_namestringopcionalSó em modelos com parâmetros nomeados (
{{first_name}}): o nome do parâmetro. Sem ele, a ordem vale ({{1}},{{2}}…). - textstringopcionalO valor.
imageobjectopcional
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
videoobjectopcional
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
documentobjectopcional
Porid(o quePOST /{version}/{phone_number_id}/mediadevolveu) ou porlink(uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda oid: umlinkfora do ar faz o envio falhar depois de aceito. Formatos: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie porlink.- idstringopcionalO id da mídia, de
POST /{version}/{phone_number_id}/media. - filenamestringopcionalO nome do arquivo que o cliente vê.
- linkstringopcionalA URL pública do arquivo (HTTP ou HTTPS).
locationobjectopcional
- latitudestring | numberobrigatórioLatitude em graus decimais.
- longitudestring | numberobrigatórioLongitude em graus decimais.
- namestringopcionalO nome do lugar.
- addressstringopcionalO endereço.
- sub_type"quick_reply"opcional
- indexstring | integeropcionalA posição do botão no modelo, a partir de 0 (a Meta aceita
"0"ou0).
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"boas_vindas","language":{"code":"pt_BR","policy":"deterministic"}}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "boas_vindas",
"language": {
"code": "pt_BR",
"policy": "deterministic"
}
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "boas_vindas",
"language": {
"code": "pt_BR",
"policy": "deterministic",
},
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "boas_vindas",
"language": {
"code": "pt_BR",
"policy": "deterministic"
}
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"pedido_confirmado","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"Maria"},{"type":"currency","currency":{"fallback_value":"R$ 100,99","code":"BRL","amount_1000":100990}},{"type":"date_time","date_time":{"fallback_value":"10 de janeiro de 2026"}}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_confirmado",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "currency",
"currency": {
"fallback_value": "R$ 100,99",
"code": "BRL",
"amount_1000": 100990
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "10 de janeiro de 2026"
}
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_confirmado",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria",
},
{
"type": "currency",
"currency": {
"fallback_value": "R$ 100,99",
"code": "BRL",
"amount_1000": 100990,
},
},
{
"type": "date_time",
"date_time": {
"fallback_value": "10 de janeiro de 2026",
},
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_confirmado",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "currency",
"currency": {
"fallback_value": "R$ 100,99",
"code": "BRL",
"amount_1000": 100990
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "10 de janeiro de 2026"
}
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"pedido_saiu","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","parameter_name":"first_name","text":"Maria"},{"type":"text","parameter_name":"order_number","text":"42"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_saiu",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"parameter_name": "first_name",
"text": "Maria"
},
{
"type": "text",
"parameter_name": "order_number",
"text": "42"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_saiu",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"parameter_name": "first_name",
"text": "Maria",
},
{
"type": "text",
"parameter_name": "order_number",
"text": "42",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_saiu",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"parameter_name": "first_name",
"text": "Maria"
},
{
"type": "text",
"parameter_name": "order_number",
"text": "42"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"promocao_sazonal","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"text","text":"Black Friday"}]},{"type":"body","parameters":[{"type":"text","text":"30 de novembro"},{"type":"text","text":"BF25"},{"type":"text","text":"25%"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "promocao_sazonal",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "text",
"text": "Black Friday"
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "30 de novembro"
},
{
"type": "text",
"text": "BF25"
},
{
"type": "text",
"text": "25%"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "promocao_sazonal",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "text",
"text": "Black Friday",
},
],
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "30 de novembro",
},
{
"type": "text",
"text": "BF25",
},
{
"type": "text",
"text": "25%",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "promocao_sazonal",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "text",
"text": "Black Friday"
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "30 de novembro"
},
{
"type": "text",
"text": "BF25"
},
{
"type": "text",
"text": "25%"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"pedido_enviado","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"image","image":{"link":"https://arquivos.example.com/pedidos/42.jpg"}}]},{"type":"body","parameters":[{"type":"text","text":"Maria"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_enviado",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "https://arquivos.example.com/pedidos/42.jpg"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_enviado",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "https://arquivos.example.com/pedidos/42.jpg",
},
},
],
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "pedido_enviado",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "https://arquivos.example.com/pedidos/42.jpg"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"lancamento","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"video","video":{"id":"1166846181421424"}}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "lancamento",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "video",
"video": {
"id": "1166846181421424"
}
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "lancamento",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "video",
"video": {
"id": "1166846181421424",
},
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "lancamento",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "video",
"video": {
"id": "1166846181421424"
}
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"boleto_disponivel","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"document","document":{"link":"https://arquivos.example.com/boletos/42.pdf","filename":"boleto-pedido-42.pdf"}}]},{"type":"body","parameters":[{"type":"text","text":"10/01/2026"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "boleto_disponivel",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "document",
"document": {
"link": "https://arquivos.example.com/boletos/42.pdf",
"filename": "boleto-pedido-42.pdf"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "10/01/2026"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "boleto_disponivel",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "document",
"document": {
"link": "https://arquivos.example.com/boletos/42.pdf",
"filename": "boleto-pedido-42.pdf",
},
},
],
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "10/01/2026",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "boleto_disponivel",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "document",
"document": {
"link": "https://arquivos.example.com/boletos/42.pdf",
"filename": "boleto-pedido-42.pdf"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "10/01/2026"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"entrega_a_caminho","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"location","location":{"latitude":"-23.561414","longitude":"-46.655881","name":"Loja Paulista","address":"Av. Paulista, 1000 - São Paulo, SP"}}]},{"type":"body","parameters":[{"type":"text","text":"Maria"},{"type":"text","text":"42"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "entrega_a_caminho",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "-23.561414",
"longitude": "-46.655881",
"name": "Loja Paulista",
"address": "Av. Paulista, 1000 - São Paulo, SP"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "text",
"text": "42"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "entrega_a_caminho",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "-23.561414",
"longitude": "-46.655881",
"name": "Loja Paulista",
"address": "Av. Paulista, 1000 - São Paulo, SP",
},
},
],
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria",
},
{
"type": "text",
"text": "42",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "entrega_a_caminho",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "location",
"location": {
"latitude": "-23.561414",
"longitude": "-46.655881",
"name": "Loja Paulista",
"address": "Av. Paulista, 1000 - São Paulo, SP"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "text",
"text": "42"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"confirmar_entrega","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"42"}]},{"type":"button","sub_type":"quick_reply","index":"0","parameters":[{"type":"payload","payload":"CONFIRM_42"}]},{"type":"button","sub_type":"quick_reply","index":"1","parameters":[{"type":"payload","payload":"RESCHEDULE_42"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "confirmar_entrega",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "42"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "CONFIRM_42"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "1",
"parameters": [
{
"type": "payload",
"payload": "RESCHEDULE_42"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "confirmar_entrega",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "42",
},
],
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "CONFIRM_42",
},
],
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "1",
"parameters": [
{
"type": "payload",
"payload": "RESCHEDULE_42",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "confirmar_entrega",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "42"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "CONFIRM_42"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "1",
"parameters": [
{
"type": "payload",
"payload": "RESCHEDULE_42"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"rastrear_pedido","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"42"}]},{"type":"button","sub_type":"url","index":"0","parameters":[{"type":"text","text":"pedido-42"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "rastrear_pedido",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "42"
}
]
},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [
{
"type": "text",
"text": "pedido-42"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "rastrear_pedido",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "42",
},
],
},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [
{
"type": "text",
"text": "pedido-42",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "rastrear_pedido",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "42"
}
]
},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [
{
"type": "text",
"text": "pedido-42"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"cupom_desconto","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"25%"}]},{"type":"button","sub_type":"copy_code","index":"0","parameters":[{"type":"coupon_code","coupon_code":"BF25"}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "cupom_desconto",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "25%"
}
]
},
{
"type": "button",
"sub_type": "copy_code",
"index": "0",
"parameters": [
{
"type": "coupon_code",
"coupon_code": "BF25"
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "cupom_desconto",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "25%",
},
],
},
{
"type": "button",
"sub_type": "copy_code",
"index": "0",
"parameters": [
{
"type": "coupon_code",
"coupon_code": "BF25",
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "cupom_desconto",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "25%"
}
]
},
{
"type": "button",
"sub_type": "copy_code",
"index": "0",
"parameters": [
{
"type": "coupon_code",
"coupon_code": "BF25"
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"cadastro_rapido","language":{"code":"pt_BR"},"components":[{"type":"button","sub_type":"flow","index":"0","parameters":[{"type":"action","action":{"flow_token":"cadastro-pedido-42","flow_action_data":{"order_id":"42"}}}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "cadastro_rapido",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "button",
"sub_type": "flow",
"index": "0",
"parameters": [
{
"type": "action",
"action": {
"flow_token": "cadastro-pedido-42",
"flow_action_data": {
"order_id": "42"
}
}
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "cadastro_rapido",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "button",
"sub_type": "flow",
"index": "0",
"parameters": [
{
"type": "action",
"action": {
"flow_token": "cadastro-pedido-42",
"flow_action_data": {
"order_id": "42",
},
},
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "cadastro_rapido",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "button",
"sub_type": "flow",
"index": "0",
"parameters": [
{
"type": "action",
"action": {
"flow_token": "cadastro-pedido-42",
"flow_action_data": {
"order_id": "42"
}
}
}
]
}
]
}
}curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"conheca_o_catalogo","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"Maria"}]},{"type":"button","sub_type":"catalog","index":0,"parameters":[{"type":"action","action":{"thumbnail_product_retailer_id":"tenis-azul-42"}}]}]}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "conheca_o_catalogo",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
}
]
},
{
"type": "button",
"sub_type": "catalog",
"index": 0,
"parameters": [
{
"type": "action",
"action": {
"thumbnail_product_retailer_id": "tenis-azul-42"
}
}
]
}
]
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "conheca_o_catalogo",
"language": {
"code": "pt_BR",
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria",
},
],
},
{
"type": "button",
"sub_type": "catalog",
"index": 0,
"parameters": [
{
"type": "action",
"action": {
"thumbnail_product_retailer_id": "tenis-azul-42",
},
},
],
},
],
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "5511999999999",
"type": "template",
"template": {
"name": "conheca_o_catalogo",
"language": {
"code": "pt_BR"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
}
]
},
{
"type": "button",
"sub_type": "catalog",
"index": 0,
"parameters": [
{
"type": "action",
"action": {
"thumbnail_product_retailer_id": "tenis-azul-42"
}
}
]
}
]
}
}Confirmação de leitura#
ReadReceiptRequest
Marca como lida uma mensagem RECEBIDA (os dois tiques azuis para o cliente) e, com typing_indicator, mostra "digitando…" na conversa até a próxima mensagem da empresa, por no máximo 25 s. Não tem to nem type.
- messaging_product"whatsapp"opcional
- status"read"obrigatório
- message_idstringobrigatórioO
wamidda mensagem recebida. typing_indicatorobjectopcional
Opcional: o indicador de digitação, que só existe junto da confirmação de leitura.- type"text"obrigatório
curl
curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
-H "Authorization: Bearer $SYNERGY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"messaging_product":"whatsapp","status":"read","message_id":"wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==","typing_indicator":{"type":"text"}}'JavaScript
const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messaging_product": "whatsapp",
"status": "read",
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
"typing_indicator": {
"type": "text"
}
}),
});
console.log(res.status, await res.json());Python
import os
import requests
res = requests.post(
"https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
headers={
"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
},
json={
"messaging_product": "whatsapp",
"status": "read",
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
"typing_indicator": {
"type": "text",
},
},
)
print(res.status_code, res.json())Corpo (JSON)
{
"messaging_product": "whatsapp",
"status": "read",
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
"typing_indicator": {
"type": "text"
}
}Respostas#
| Status | Código | Quando acontece |
|---|---|---|
| 200 | — | Mensagem aceita |
| 200 | — | Repetição de uma Idempotency-Key já aceita: o mesmo id, respondido pela Synergy |
| 200 | — | Confirmação de leitura aceita |
| 400 | 100 | Falta to |
| 400 | 100 | O corpo não é JSON |
| 400 | 100 | O JSON não é um objeto |
| 400 | 100 | Corpo acima de 64 KB |
| 400 | 1390009 | Flow com endpoint da Synergy sem um flow_token válido para este número, flow e destinatário |
| 401 | 190 | Sem Authorization: Bearer, chave malformada ou forjada, chave revogada, ou chave sem acesso a este número |
| 403 | 200 | A chave não tem o escopo messages |
| 403 | 1390004 | O plano da organização não inclui a API |
| 403 | 1390005 | Conta em modo leitura ou suspensa por falta de pagamento |
| 403 | 1390007 | Envio de flow sem WhatsApp Flows no plano |
| 403 | 1390014 | O número foi congelado pela plataforma |
| 403 | 1390013 | Chave de assistente "só responder": o destinatário não escreveu para o número nos últimos 30 dias |
| 404 | 100 | O phone_number_id não é um número ativo desta organização (ou não tem de 5 a 20 dígitos) |
| 409 | 1390001 | Chave bot: a conversa está com um atendente |
| 409 | 1390002 | Um envio com esta Idempotency-Key ainda está em andamento |
| 409 | 1390008 | O flow usa o endpoint de outro provedor |
| 422 | 1390003 | A chave já foi usada para outro destinatário |
| 429 | 130429 | Mais de 2000 requisições em 10 s com esta chave neste número (Retry-After: 10) |
| 429 | 130429 | O número acabou de recusar por vazão, ou está sobrecarregado: o 429 se repete por 200 ms (Retry-After: 1) |
| 429 | 130429 | Mais de 64 mensagens automatizadas por segundo no número (Retry-After em segundos, mínimo 1) |
| 429 | 1390006 | Volume do ciclo esgotado (Retry-After: 60); details traz o link da recarga |
| 429 | 1390010 | Limite de envios de flow do plano no ciclo (sem Retry-After) |
| 429 | 1390012 | Chave de assistente: o teto de envios dela (por hora ou por dia) ou o teto somado das conexões de assistente neste número acabou (Retry-After = segundos até a janela abrir) |
| 503 | 2 | Serviço temporariamente indisponível |
| Outros | 131047 | Erro da Meta, como ela mandou |
Os erros no formato da Meta trazem o código em error.code. Ver todos os erros.
Corpo da resposta 200#
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| messaging_product | "whatsapp" | opcional | |
| contacts | object[] | opcional | |
| contacts[].input | string | opcional | O to do envio, como foi mandado. |
| contacts[].wa_id | string | opcional | O id do cliente no WhatsApp. |
| messages | object[] | obrigatório | |
| messages[].id | string | obrigatório | O wamid da mensagem: o mesmo que chega nos status do webhook. |
| messages[].message_status | string | opcional | accepted: aceita e em processamento; held_for_quality_assessment: retida para avaliação de qualidade; paused: entrega pausada. Aceita não é entregue: acompanhe pelos status do webhook. Valores: accepted, held_for_quality_assessment, paused. |
Limites de taxa#
- Borda: 2000 requisições a cada 10 s por chave × número (API_EDGE_LIMIT).
- Número: 64 mensagens automatizadas por segundo por número (rajada de 64), dentro do total de 80/s que o número divide com os atendentes; no máximo 200 envios em andamento.
- Volume: passado o limite do ciclo do plano, os envios automatizados param (código 1390006,
Retry-After: 60) até uma recarga, um upgrade ou o próximo ciclo.
Notas#
{version}é a versão da Graph API da Meta que a integração usa (por exemplov25.0): a chamada é repassada à Meta nessa versão. O código aceita qualquervN.Nno formato; não confere se a Meta ainda atende a versão.- Os schemas do corpo são o contrato da Meta (do OpenAPI v25 dela e das notas de modelos), não uma validação da Synergy: além de ser JSON de objeto, o código só exige
to(fora da confirmação de leitura). Um corpo fora destes schemas vai para a Meta do mesmo jeito, e o erro, se houver, é o dela. - O OpenAPI v25 da Meta não descreve as interativas
cta_url(botão de link),location_request_message(pedir a localização),order_detailseorder_status(pagamentos): elas não estão nos schemas daqui, mas o corpo é repassado como vier, então também funcionam se a Meta as aceitar no número. - A confirmação de leitura (
status: "read") e o indicador de digitação vão direto para a Meta: não viram mensagem na conversa, não passam pelaIdempotency-Keynem pela regra da chavebot, mas contam no limite de taxa do número e param com o volume do ciclo esgotado, como um envio. - Um envio para um grupo (
recipient_type: "group") que a Synergy ainda não conhece vai para a Meta mesmo assim, sem aparecer na plataforma. - Enviar um flow (mensagem
interactivedo tipoflow, ou um template com botão de flow) também exige a featurewaFlows(403, código 1390007). - O código usa só os 200 primeiros caracteres de
Idempotency-Key. Não há prazo de expiração no código: a chave vale enquanto a mensagem existir no histórico do número. - Um corpo acima de 64 KB responde 400 (código 100), não 413.
- Um valor de
X-Synergy-Repliesdiferente dequeueeautomationé ignorado (vale o modo da chave). - O
Content-Typeda requisição não é conferido: o corpo é lido como texto e interpretado como JSON. - O
{phone_number_id}pode ser oig-user-idde uma conta do Instagram: um id que a rota ainda não conhece é tentado como conta do Instagram uma vez (30 tentativas por minuto por chave, devolvidas quando o id é seu). Sem tentativa disponível, um número de WhatsApp válido envia normalmente, e um id desconhecido recebe 429 comRetry-After: 1, nunca um 404 que talvez fosse falso.
200
{
"messaging_product": "whatsapp",
"contacts": [
{
"input": "5511999999999",
"wa_id": "5511999999999"
}
],
"messages": [
{
"id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABEYEjdGQjI0QzE4RTlBMDVENzQxAA==",
"message_status": "accepted"
}
]
}Há 3 casos com este status; veja a tabela de respostas.
400
{
"error": {
"message": "(#100) Invalid parameter.",
"type": "OAuthException",
"code": 100,
"error_data": {
"messaging_product": "whatsapp",
"details": "The parameter \"to\" is required."
},
"fbtrace_id": "syn-3f9a1c0b"
}
}Há 5 casos com este status; veja a tabela de respostas.
401
{
"error": {
"message": "(#190) Invalid OAuth access token.",
"type": "OAuthException",
"code": 190,
"fbtrace_id": "syn-3f9a1c0b"
}
}403
{
"error": {
"message": "(#200) Permissions error: this key does not have access to this resource.",
"type": "OAuthException",
"code": 200,
"fbtrace_id": "syn-3f9a1c0b"
}
}Há 6 casos com este status; veja a tabela de respostas.
404
{
"error": {
"message": "(#100) Unsupported request: object does not exist or this key cannot reach it.",
"type": "OAuthException",
"code": 100,
"fbtrace_id": "syn-3f9a1c0b"
}
}409
{
"error": {
"message": "(#1390001) This conversation is being handled by an agent. Bot keys cannot send to it until it is returned to the automation.",
"type": "OAuthException",
"code": 1390001,
"fbtrace_id": "syn-3f9a1c0b"
}
}Há 3 casos com este status; veja a tabela de respostas.
422
{
"error": {
"message": "(#1390003) This Idempotency-Key was already used for a message to another recipient.",
"type": "OAuthException",
"code": 1390003,
"fbtrace_id": "syn-3f9a1c0b"
}
}429
{
"error": {
"message": "(#130429) Rate limit hit: the number's message throughput has been reached.",
"type": "OAuthException",
"code": 130429,
"fbtrace_id": "syn-3f9a1c0b"
}
}Há 6 casos com este status; veja a tabela de respostas.
503
{
"error": {
"message": "(#2) Service temporarily unavailable.",
"type": "OAuthException",
"code": 2,
"fbtrace_id": "syn-3f9a1c0b"
}
}Ficou com dúvida? Escreva para suporte@synergyconnect.com.br.