API Botão Quick Reply
🧩 A API de botões Quick Reply permite o envio de mensagens interativas com 2 botões, oferecendo aos clientes a possibilidade de escolher entre opções definidas previamente pelo remetente. A escolha do usuário é enviada como uma mensagem de texto.
API: Baileys
Verifique aqui os Pré-Requisitos para utilizar Botões
Endpoint
https://{BACKEND_URL}/api/messages/sendBTN2
Método
POST
Autenticação
Bearer {seutokenaqui}
Payload
{
"number": "554498108792",
"customData": {
"body": "Escolha uma opção",
"name": "quick_reply",
"params": "{\"display_text\":\"Opção A\",\"id\":\"id_botao_A\",\"disabled\":false}",
"nameb": "quick_reply",
"paramsb": "{\"display_text\":\"Opção B\",\"id\":\"id_botao_B\",\"disabled\":false}"
}
}
➡️ “number”: telefone do destinatário no formato ddi ddd numero (somente números) ➡️ “body”: texto antes do botões ➡️ “name”: quick_reply ➡️ “params”: – display_text: texto do botão A – id: ID para o botão A – disabled: false ➡️ “nameb”: quick_reply ➡️ “paramsb”: – display_text: texto do botão B – id: ID para o botão B – disabled: false Abaixo estão os campos editáveis deste endpoint. Preencha o formulário, copie o código gerado e utilize-o no local apropriado para a sua integração.
URL do backend (menu API) Apagar URL [x] Token da conexão (menu Conexões) Apagar Token [x] Número de telefone do destinatário no formato internacional (ex: 5511999999999) O número deve conter entre 10 e 15 dígitos e estar no formato internacional. Texto da mensagem a ser enviada (ex: Olá, escolha uma opção:) Texto exibido no botão A (ex: Opção 1) ID do botão A (ex: botao1) Texto exibido no botão B (ex: Opção 2) ID do botão B (ex: botao2) API Utilize o código em requisições HTTPS com ferramentas como cURL ou bibliotecas de integração.
Os trechos entre {...} devem ser ajustados manualmente ou preenchidos através dos formulários disponíveis acima.
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://{BACKEND_URL}/api/messages/sendBTN2',
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": "{number}",
"customData": {
"body": "{mensagem}",
"name": "quick_reply",
"params": "{\\"display_text\\":\\"{texto_botao_A}\\",\\"id\\":\\"{id_botao_A}\\",\\"disabled\\":false}",
"nameb": "quick_reply",
"paramsb": "{\\"display_text\\":\\"{texto_botao_B}\\",\\"id\\":\\"{id_botao_B}\\",\\"disabled\\":false}"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer {seutokenaqui}'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
FLOWBUILDER Insira o código em um bloco de “Http Request / Code” do tipo MENU.
Os trechos delimitados por {{...}} são placeholders no formato Mustaches e não precisam ser alterados. Eles serão automaticamente substituídos pelos valores correspondentes no momento da execução.
Os trechos entre {...} devem ser ajustados manualmente ou preenchidos através dos formulários disponíveis acima.
let data = JSON.stringify({
"number": "{{number}}",
"customData": {
"body": "{mensagem}",
"name": "quick_reply",
"params": "{"display_text":"{texto_botao_A}","id":"{id_botao_A}","disabled":false}",
"nameb": "quick_reply",
"paramsb": "{"display_text":"{texto_botao_B}","id":"{id_botao_B}","disabled":false}"
}
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://{{backendURL}}/api/messages/sendBTN2',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{connection_token}}'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
N8N Copie o código e cole em qualquer ponto do seu fluxo no N8N para adicionar o nó.
Os trechos entre {...} devem ser ajustados manualmente ou preenchidos através dos formulários disponíveis acima.
{
"meta": {
"instanceId": "9587d195c3fa7d1dba9131bb83058d7e6c57a07d7ef73b55d61bcf7eaf540fb8"
},
"nodes": [
{
"parameters": {
"method": "POST",
"url": "=https://{BACKEND_URL}/api/messages/sendBTN2",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={seutokenaqui}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={n "number": "{number}",n "customData": {n "body": "{mensagem}",n "name": "quick_reply",n "params": "{\"display_text\":\"{texto_botao_A}\",\"id\":\"{id_botao_A}\",\"disabled\":false}",n "nameb": "quick_reply",n "paramsb": "{\"display_text\":\"{texto_botao_B}\",\"id\":\"{id_botao_B}\",\"disabled\":false}"n }n}",
"options": {}
},
"id": "e31bc15d-1a3b-4b2f-9970-060ffbb69513",
"name": "Botão Quick Reply",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
580,
340
]
}
],
"connections": {},
"pinData": {}
}
API Utilize o código em requisições HTTPS com ferramentas como cURL ou bibliotecas de integração.
Os trechos entre {...} devem ser ajustados manualmente ou preenchidos através dos formulários disponíveis acima.
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://{BACKEND_URL}/api/messages/sendBTN2',
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": "{number}",
"customData": {
"body": "{mensagem}",
"name": "quick_reply",
"params": "{\\"display_text\\":\\"{texto_botao_A}\\",\\"id\\":\\"{id_botao_A}\\",\\"disabled\\":false}",
"nameb": "quick_reply",
"paramsb": "{\\"display_text\\":\\"{texto_botao_B}\\",\\"id\\":\\"{id_botao_B}\\",\\"disabled\\":false}"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer {seutokenaqui}'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
FLOWBUILDER Insira o código em um bloco de "Http Request / Code" do tipo MENU.
Os trechos delimitados por {{...}} são placeholders no formato Mustaches e não precisam ser alterados. Eles serão automaticamente substituídos pelos valores correspondentes no momento da execução.
Os trechos entre {...} devem ser ajustados manualmente ou preenchidos através dos formulários disponíveis acima.
let data = JSON.stringify({
"number": "{{number}}",
"customData": {
"body": "{mensagem}",
"name": "quick_reply",
"params": "{"display_text":"{texto_botao_A}","id":"{id_botao_A}","disabled":false}",
"nameb": "quick_reply",
"paramsb": "{"display_text":"{texto_botao_B}","id":"{id_botao_B}","disabled":false}"
}
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://{{backendURL}}/api/messages/sendBTN2',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{connection_token}}'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
N8N Copie o código e cole em qualquer ponto do seu fluxo no N8N para adicionar o nó.
Os trechos entre {...} devem ser ajustados manualmente ou preenchidos através dos formulários disponíveis acima.
{
"meta": {
"instanceId": "9587d195c3fa7d1dba9131bb83058d7e6c57a07d7ef73b55d61bcf7eaf540fb8"
},
"nodes": [
{
"parameters": {
"method": "POST",
"url": "=https://{BACKEND_URL}/api/messages/sendBTN2",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={seutokenaqui}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={n "number": "{number}",n "customData": {n "body": "{mensagem}",n "name": "quick_reply",n "params": "{\"display_text\":\"{texto_botao_A}\",\"id\":\"{id_botao_A}\",\"disabled\":false}",n "nameb": "quick_reply",n "paramsb": "{\"display_text\":\"{texto_botao_B}\",\"id\":\"{id_botao_B}\",\"disabled\":false}"n }n}",
"options": {}
},
"id": "e31bc15d-1a3b-4b2f-9970-060ffbb69513",
"name": "Botão Quick Reply",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
580,
340
]
}
],
"connections": {},
"pinData": {}
}
Retorno de API (Payload de Resposta)
Exemplo de retorno do envio de botão quick reply:
{
"mensagem": "Mensagem enviada SEM TICKET",
"ticket": null
}