Enviar mensagens
Todo envio é um POST com o corpo da Cloud API da Meta. A Synergy confere a chave e o número, e repassa o corpo à Meta sem alterar; a resposta da Meta (de sucesso ou de erro) volta como ela mandou. Quem já integra com a Meta só troca o host e o token.
O endpoint#
{version}é a versão da Graph API (por exemplov25.0), repassada como veio.{phone_number_id}é o id do número, que aparece no cartão "Como conectar" de Configurações → API e webhooks. Um número que não é da organização da chave responde 404 (código 100).- O corpo tem até 64 KB. Acima disso a resposta é 400 (código 100).
- A mensagem aparece na conversa do cliente no app, enviada pela automação.
POST https://api.synergyconnect.com.br/{version}/{phone_number_id}/messagesAutenticação#
Header Authorization: Bearer <chave>, com uma chave de escopo messages que alcance o número (Autenticação). O plano precisa ter a feature api.
Headers opcionais da Synergy:
| Header | Para quê |
|---|---|
Idempotency-Key | Uma chave sua para UMA requisição (por exemplo o id do pedido, até 200 caracteres). Repetir a requisição com a mesma chave devolve o mesmo messages[].id e a Meta recebe a mensagem uma vez só. Enquanto o primeiro envio está em andamento, a repetição recebe 409 (código 1390002); reusar a chave para outro destinatário é 422 (código 1390003) |
X-Synergy-Replies | Para onde vai a resposta do cliente: queue (fila dos atendentes) ou automation (continua com a integração). Sem o header vale o modo da chave |
O formato da Meta#
Todo corpo tem messaging_product: "whatsapp" e to (o telefone do cliente, com DDI, só dígitos). O type diz o tipo da mensagem, e o objeto de mesmo nome traz o conteúdo ("type": "image" → image). Sem type, a Meta entende text. recipient_type é individual (padrão) ou group.
Uma resposta 200 quer dizer que a Meta aceitou a mensagem. A entrega em si é avisada depois, nos status do webhook (sent, delivered, read ou failed): veja Receber mensagens e status. O messages[0].id (o wamid) é a chave para casar o envio com o status.
Resposta 200:
Fora da janela de 24 h do cliente só um modelo (template) é entregue: veja Janela de atendimento de 24 horas e Modelos de mensagem (templates). Os exemplos abaixo valem dentro da janela. Estar na janela não torna a mensagem gratuita: a Meta cobra por mensagem enviada (veja Cobrança).
{
"messaging_product": "whatsapp",
"contacts": [
{
"input": "5511999999999",
"wa_id": "5511999999999"
}
],
"messages": [
{
"id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABEYEjdGQjI0QzE4RTlBMDVENzQxAA==",
"message_status": "accepted"
}
]
}Texto#
Até 4096 caracteres. Aceita a formatação do WhatsApp (*negrito*, _itálico_) e emojis. Com preview_url: true, o primeiro link do texto (que começa com http:// ou https://) mostra a prévia.
Resposta 200: a mesma de cima, com o id da mensagem.
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())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())Áudio#
AAC, AMR, MP3, M4A ou OGG (só codec OPUS, mono), até 16 MB. Não aceita legenda. Com voice: true chega como mensagem de voz, que é OGG/OPUS.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Vídeo#
MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum), até 16 MB. Aceita caption.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Documento#
TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Na Meta vai até 100 MB; pelo upload da Synergy, até 16 MB (acima disso, envie por link). filename é o nome que o cliente vê (com a extensão) e caption a legenda.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Figurinha (sticker)#
WEBP de 512 × 512 px: estática até 100 KB, animada até 500 KB. Não aceita legenda.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Localização#
latitude e longitude em graus decimais (texto ou número) são obrigatórios; name e address são opcionais.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Contatos#
De 1 a 5 cartões. Cada um exige name.formatted_name; phones, emails, urls, addresses, org e birthday são opcionais. Com wa_id no telefone, o cartão mostra o botão de conversar.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Reação#
reaction.message_id é o wamid da mensagem que recebe o emoji (do cliente ou da empresa). Um emoji vazio ("") remove a reação. A reação não aceita context.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Responder a uma mensagem#
context.message_id é o wamid da mensagem respondida: a nova aparece citando a anterior. Vale para os tipos acima, menos reação. Para responder a uma mensagem recebida, use o messages[].id do webhook.
Resposta 200: a mesma de cima, com o id da mensagem.
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())Marcar como lida#
Marca uma mensagem recebida como lida (os dois tiques azuis para o cliente). Não tem to nem type, e não vira uma mensagem na conversa. Vai direto à Meta: não passa pela Idempotency-Key, mas conta no limite de taxa do número.
Resposta 200:
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=="
}'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=="
}),
});
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==",
},
)
print(res.status_code, res.json()){
"success": true
}Digitando…#
O indicador de digitação é a mesma chamada, com typing_indicator. Ele só existe junto da confirmação de leitura: a conversa mostra "digitando…" até a próxima mensagem da empresa, por no máximo 25 s. Use enquanto o seu sistema prepara a resposta.
Resposta 200:
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()){
"success": true
}Erros#
O erro da Meta volta com o status e o corpo dela (por exemplo 400 com o código 131047, fora da janela de 24 h). Os erros da Synergy e o que fazer com cada um estão em Erros; os limites, em Limites de taxa. Um envio aceito (200) ainda pode falhar depois: o status failed do webhook traz o motivo em errors.
Os campos de cada tipo e todos os exemplos estão na referência da API (sendMessage). Mensagens com botões, lista e Flow estão em Mensagens interativas; modelos, em Modelos de mensagem (templates).
Ficou com dúvida? Escreva para suporte@synergyconnect.com.br.