API Oficial Mensagem Template
🧩 Envia uma mensagem template pela API oficial, estando previamente aprovada.
API: Oficial
Verifique aqui os Pré-Requisitos para utilizar APIs
Endpoint
https://{BACKEND_URL}/api/messages/sendMetaCustom
Método
POST
Autenticação
Bearer {seutokenaqui}
Payload
{
"number": "",
"name": "vars_001",
"language": "pt_BR",
"openTicket": 1,
"queueId": 100,
"template": [
{
"type": "header",
"parameters": [
{
"type": "text",
"text": "Texto cabeçalho"
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "text",
"text": "Festa do Peão"
},
{
"type": "text",
"text": "15/01/2028"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "Contato"
}
]
}
]
}
➡️ “number“: telefone do destinatário no formato ddi ddd numero (somente números). ➡️ “name“: nome do template idêntico ao aprovado na Meta. ➡️ “language“: idioma idêntico ao aprovado na Meta. ➡️ “openTicket”: 0 Não abre ticket
1 Ticket ⚠️ Atenção:– se “openTicket”= 0 (o ticket será encerrado).
– Se “openTicket”= 1 e “queueId”=0 status do ticket permanece como estava.
– Se “openTicket”= 1 e “queueId”=n status do ticket muda para “Aguardando”. ➡️ “queueId”: ID da fila desejada ( Só funciona quando "openTicket": "1" ).
➡️ “template“:
– type: header, body ou button
(adicione os types conforme seu template aprovado na Meta) ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡TYPE header– parameters:— > type: dentro do header pode ser text, image, video, document ou location 💬 exemplo texto“type”: “header”,
“parameters”: [
{ “type”: “text”, “text”: “Meu cabeçalho” }] 📸 exemplo imagem“type”: “header”,
“parameters”: [
{ “type”: “image”, “image”: { “link”: “https://…” } }] 🎵 exemplo áudio// a Meta não tem suporte a Áudio no cabeçalho 🎥 exemplo vídeo“type”: “header”,
“parameters”: [
{ “type”: “video”, “video”: { “link”: “https://…” } }] 📄 exemplo documento“type”: “header”,
“parameters”: [
{ “type”: “document”, “document”: { “link”: “https://…” “filename”: “livro.pdf” } }] 📍exemplo localização“type”: “header”,
“parameters”: [
{ “type”: “location”, “location”: { “latitude”: -22.950762, “longitude”: -43.2135083, “name”: “Cristo Redentor”, “address”: “texto do endereço” } }] 🚨 Adicione o parâmetro exato de seu template cadastrado na Meta, lembrando que ela só permite 1 header por template. ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡TYPE body– parameters:— > type: dentro do body pode ser text 💬 exemplo texto “type”: “text”, “text”: “O valor da sua variável aqui” 🚨 Adicione mais parâmetros de texto conforme cadastrado no seu template da META, e seguindo exatamente a ordem das variáveis. ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡TYPE button– sub_type: dentro do button pode ser quick_reply, url, copy_code ou flow – index: número que representa a ordem do botão. Deve começar pelo 0 (zero), próximo botão ser 1, próximo ser 2… O importante aqui é que o número deve ser exatamente a ordem que foi cadastrada no template. – parameters:— > type: dentro do button pode ser payload, text, coupon_code ou action exemplo para quick_reply “type”: “payload”,
“payload”: “Texto invisível de retorno para o webhook”
exemplo para url dinâmica “type”: “text”,
“text”: “pagina-de-vendas” // Text é a Parte dinâmica da URL: site.com/
exemplo para copy_code “type”: “coupon_code”,
“coupon_code”: “texto a ser copiado aqui”
exemplo para flow “type”: “action”,
“action”: { “flow_token”: “id_da_sessao”, “flow_action_data”: { “chave”: “valor” } } 🚨 Botões que não contem variável, como o botão URL Estático e o Botão Ligação (Call) não precisam ser colocados no payload. Coloque apenas os botões que possuem variáveis, e lembre-se de colocar o index dele na ordem correta conforme o template cadastrado na Meta. 🚨 Botões Quick Reply só podem ser usados juntos com outros quick reply. Não podem ser utilizados com URL, Copy Code ou outros. API Utilize o código em requisições HTTPS com ferramentas como cURL ou bibliotecas de integração.
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://{BACKEND_URL}/api/messages/sendMetaCustom',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"number": "",
"name": "vars_001",
"language": "pt_BR",
"openTicket": 1,
"queueId": 100,
"template": [
{
"type": "header",
"parameters": [
{
type": "text",
"text": "Texto cabeçalho"
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "text",
"text": "Festa do Peão"
},
{
"type": "text",
"text": "15/01/2028"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "Contato"
}
]
}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer {seutokenaqui}' //Token cadastrado na conexão
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;