POST /newsletters para criar canais programaticamente e associe payloads JSON dinâmicos no n8n ou Make para automatizar a postagem cruzada sem taxas por mensagem.Por que a API oficial da Meta (WABA) falha para os canais do WhatsApp
| Recurso / Capacidade | Meta WABA Oficial (Cloud API) | Gateway de API de canais da Whapi.Cloud |
|---|---|---|
| Canais do WhatsApp (Newsletters) | Não compatível (0% de funcionalidade) | Acesso completo via API REST |
| Modelo de preços de mensagens | Taxas de conversação variáveis da Meta + taxas adicionais do BSP | Assinatura mensal fixa (mensagens ilimitados) |
| Onboarding e verificação | Verificação complexa de Facebook Business (dias/semanas) | Escaneamento instantâneo de código QR (menos de 2 minutos) |
| Modelos de mensagens e HSM | Aprovação prévia obrigatória para todas as transmissões | Nenhum modelo é necessário; envie qualquer conteúdo livremente |
| Canais interativos (Quizzes/Perguntas) | Não compatível | Enquetes nativas, quizzes e cartões de perguntas e respostas programáticos |
Como conectar seu WhatsApp e começar a usar a API
- 1) Vá para o painel de controle da Whapi.Cloud e localize seu canal padrão.
- 2) Abra o WhatsApp em seu dispositivo móvel.
- 3) Vá em Configurações -> Aparelhos conectados -> Conectar um aparelho.
- 4) Escaneie o código QR exibido na tela.
Como automatizar canais do WhatsApp via API REST
POST para o endpoint /newsletters. Isso é ideal para plataformas, SaaS ou redes multicanais que precisam provisionar ambientes de transmissão separados para diferentes criadores ou filiais de forma automática.name (nome) do canal e uma descrição opcional description. Você também pode carregar uma imagem de perfil no parâmetro newsletter_pic. A API retorna um newsletter_id exclusivo no formato 120363..._example@newsletter, que você usará para todas as transmissões futuras.curl --request POST \
--url https://gate.whapi.cloud/newsletters \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN' \
--header 'content-type: application/json' \
--data '
{
"name": "Developer Channel",
"description": "Tech newsletters & API updates"
}
'
<?php
// composer require guzzlehttp/guzzle
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/newsletters', [
'body' => '{"name":"Developer Channel","description":"Tech newsletters & API updates"}',
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
# python -m pip install requests
import requests
url = "https://gate.whapi.cloud/newsletters"
payload = {
"name": "Developer Channel",
"description": "Tech newsletters & API updates"
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
// POST https://gate.whapi.cloud/newsletters
// Programmatic creation of a brand new broadcast channel on WhatsApp
const createNewsletter = async (channelName, channelDescription) => {
// if you omit the 'name' parameter, gate.whapi.cloud returns a 400 schema validation error
const response = await fetch('https://gate.whapi.cloud/newsletters', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: channelName,
description: channelDescription,
newsletter_pic: "https://whapi.cloud/assets/img/whapi/logo-text.svg"
})
});
if (!response.ok) {
throw new Error(`API Error: ${response.status} ${await response.text()}`);
}
const data = await response.json();
console.log(`Channel Created Successfully. NewsletterID: ${data.id}`);
return data.id; // Returns format: newsletter_id_example@newsletter
};
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"Developer Channel\",\"description\":\"Tech newsletters & API updates\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/newsletters")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
// dotnet add package RestSharp
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/newsletters");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
request.AddJsonBody("{\"name\":\"Developer Channel\",\"description\":\"Tech newsletters & API updates\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
Como enviar postagens para canais do WhatsApp via API
GET /newsletters para recuperar uma lista de todos os canais vinculados à sua conta.120363171744447809@newsletter. Uma vez que você tenha esse identificador exclusivo, enviar uma mensagem é tão simples quanto iniciar uma solicitação POST.POST /messages/text, passando o JID do canal no parâmetro to e o texto sem formatação no parâmetro body. Isso permite transmitir anúncios, links ou alertas de forma programática para toda a sua base de assinantes instantaneamente.curl --request POST \
--url https://gate.whapi.cloud/messages/text \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN' \
--header 'content-type: application/json' \
--data '
{
"to": "120363171744447809@newsletter",
"body": "Hello subscribers, this is an automated update!"
}
'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/messages/text', [
'body' => '{"to":"120363171744447809@newsletter","body":"Hello subscribers, this is an automated update!"}',
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/messages/text"
payload = {
"to": "120363171744447809@newsletter",
"body": "Hello subscribers, this is an automated update!"
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
// POST https://gate.whapi.cloud/messages/text
// Send a text message post to a public WhatsApp Channel
const sendPostToChannel = async (newsletterId, postContent) => {
// Pass your channel ID in the "to" parameter (format: 120363...@newsletter)
const response = await fetch('https://gate.whapi.cloud/messages/text', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: newsletterId,
body: postContent
})
});
if (!response.ok) {
throw new Error(`Failed to send post: ${response.status} ${await response.text()}`);
}
const data = await response.json();
console.log(`Post sent successfully! Message ID: ${data.message.id}`);
return data.message.id;
};
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"120363171744447809@newsletter\",\"body\":\"Hello subscribers, this is an automated update!\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/messages/text")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/messages/text");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
request.AddJsonBody("{\"to\":\"120363171744447809@newsletter\",\"body\":\"Hello subscribers, this is an automated update!\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
Como inscrever sua sessão ou bot em um canal do WhatsApp
POST /newsletters/{NewsletterID}/subscription foi projetado para inscrever seu próprio número do WhatsApp conectado em qualquer canal de destino. Isso é extremamente útil para criar scrapers, analisadores ou rastreadores de conteúdo que precisam seguir automaticamente canais de notícias, feeds de concorrentes ou tópicos de anúncios.newsletter_id completo (incluindo o sufixo @newsletter) no caminho da URL. Uma vez inscrita, sua sessão de bot receberá todas as mensagens e mídias recém-publicadas em tempo real via webhooks.curl --request POST \
--url https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/subscription \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/subscription', [
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/subscription"
headers = {
"accept": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, headers=headers)
print(response.text)
// POST https://gate.whapi.cloud/newsletters/{NewsletterID}/subscription
// Subscribes your connected WhatsApp session to a specific target channel
const autoSubscribeSession = async (newsletterId) => {
// if you pass a malformed newsletterId (e.g. missing '@newsletter'), the API will fail to match the channel
const response = await fetch(`https://gate.whapi.cloud/newsletters/${newsletterId}/subscription`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
}
});
if (!response.ok) {
throw new Error(`Subscription Failed: ${response.status}`);
}
console.log(`Successfully subscribed connection to channel: ${newsletterId}`);
};
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(null, new byte[0]);
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/subscription")
.post(body)
.addHeader("accept", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/subscription");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
Como recuperar e analisar mensagens de canais do WhatsApp
GET /newsletters/{NewsletterID}/messages permite que seu sistema consulte transmissões históricas e extraia textos, links ou mídias de forma programática.count, before ou after para sincronizar o conteúdo de forma incremental. Isso permite que você execute tarefas cron de scraping em segundo plano (por exemplo, por hora ou por dia) para analisar e salvar atualizações de canais diretamente em seu CRM, CMS ou banco de dados (como PostgreSQL ou MongoDB) sem gerar carga desnecessária na API.curl --request GET \
--url 'https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages?count=50' \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages?count=50', [
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages"
params = {"count": "50"}
headers = {
"accept": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, params=params, headers=headers)
print(response.text)
// GET https://gate.whapi.cloud/newsletters/{NewsletterID}/messages
// Pulls channel historical feed data with pagination
const syncChannelHistory = async (newsletterId, limitCount = 50) => {
const url = `https://gate.whapi.cloud/newsletters/${newsletterId}/messages?count=${limitCount}`;
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`
}
});
if (!response.ok) {
throw new Error(`Failed to fetch history: ${response.status}`);
}
const { messages } = await response.json();
// We recommend enforcing database upserts using the message.id as unique constraint to avoid duplicates
messages.forEach(msg => {
console.log(`[${msg.timestamp}] Message ID: ${msg.id} - Content: ${msg.body || 'Media Post'}`);
});
return messages;
};
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages?count=50")
.get()
.addHeader("accept", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages?count=50");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
Como enviar cartões de convite de canais via API
invite_code ao chamar GET /newsletters ou GET /newsletters/{NewsletterID}. O código retornado é uma string alfanumérica (por exemplo, TESTCODE12345).POST /newsletters/link/{NewsletterInviteCode}. Este método permite enviar um cartão de convite personalizável para qualquer contato privado, com estilos de visualização de alta qualidade e texto CTA personalizado para maximizar a taxa de conversão.curl --request POST \
--url https://gate.whapi.cloud/newsletters/link/TESTCODE12345 \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN' \
--header 'content-type: application/json' \
--data '
{
"to": "4915155985667",
"body": "Follow this link to join our automated developer newsletter on WhatsApp: %URL%",
"title": "Join Developer Updates",
"preview_type": "style2"
}
'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/newsletters/link/TESTCODE12345', [
'body' => '{"to":"4915155985667","body":"Follow this link to join our automated developer newsletter on WhatsApp: %URL%","title":"Join Developer Updates","preview_type":"style2"}',
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/newsletters/link/TESTCODE12345"
payload = {
"to": "4915155985667",
"body": "Follow this link to join our automated developer newsletter on WhatsApp: %URL%",
"title": "Join Developer Updates",
"preview_type": "style2"
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
// POST https://gate.whapi.cloud/newsletters/link/{NewsletterInviteCode}
// Distribute a newsletter invite card programmatically with a customized visual preview
const distributeInviteCard = async (inviteCode, recipientPhone) => {
const response = await fetch(`https://gate.whapi.cloud/newsletters/link/${inviteCode}`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: recipientPhone,
body: "Follow this link to join our automated developer newsletter on WhatsApp: %URL%",
title: "Join Developer Updates",
preview_type: "style2" // Applies clean, flat infographic preview style to invitation card
})
});
if (!response.ok) {
throw new Error(`Failed to send invite card: ${response.status}`);
}
console.log(`Invite card successfully dispatched to ${recipientPhone}`);
};
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"4915155985667\",\"body\":\"Follow this link to join our automated developer newsletter on WhatsApp: %URL%\",\"title\":\"Join Developer Updates\",\"preview_type\":\"style2\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/newsletters/link/TESTCODE12345")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/newsletters/link/TESTCODE12345");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
request.AddJsonBody("{\"to\":\"4915155985667\",\"body\":\"Follow this link to join our automated developer newsletter on WhatsApp: %URL%\",\"title\":\"Join Developer Updates\",\"preview_type\":\"style2\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
Segurança e proteção: Designar programaticamente administradores secundários
curl --request POST \
--url https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/invite/4915155985667 \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN' \
--header 'content-type: application/json' \
--data '
{
"message": "You are invited to become a channel administrator."
}
'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/invite/4915155985667', [
'body' => '{"message":"You are invited to become a channel administrator."}',
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/invite/4915155985667"
payload = {
"message": "You are invited to become a channel administrator."
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
// Node.js Implementation of the Dynamic Invitation Pipeline
const adminOnboardingPipeline = async (newsletterId, contactId) => {
try {
// Step 1: Send an administrator invitation to the contact
// POST /newsletters/{NewsletterID}/invite/{ContactID}
const inviteResponse = await fetch(`https://gate.whapi.cloud/newsletters/${newsletterId}/invite/${contactId}`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
message: "You have been invited to manage our automated broadcast feed. Click accept."
})
});
if (!inviteResponse.ok) {
throw new Error(`Admin Invitation Failed: ${inviteResponse.status}`);
}
console.log(`Step 1 Complete: Admin invite dispatched to ${contactId}`);
// Step 2: Auto-confirm and accept the admin request
// PUT /newsletters/{NewsletterID}/admins/{ContactID}
// Note: In real production systems, you should trigger this second call in your webhook handler
// once you receive the user's acceptance notification from WhatsApp.
const acceptResponse = await fetch(`https://gate.whapi.cloud/newsletters/${newsletterId}/admins/${contactId}`, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
}
});
if (!acceptResponse.ok) {
throw new Error(`Admin Activation Failed: ${acceptResponse.status}`);
}
console.log(`Step 2 Complete: Administrative access fully activated for ${contactId}`);
} catch (error) {
console.error(`Dynamic Invitation Pipeline broke: ${error.message}`);
}
};
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"message\":\"You are invited to become a channel administrator.\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/invite/4915155985667")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/invite/4915155985667");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
request.AddJsonBody("{\"message\":\"You are invited to become a channel administrator.\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
Rotular automaticamente parcerias pagas para conformidade publicitária
POST /newsletters/{NewsletterID}/messages/{MessageID}/paid_partnership. Isso força o WhatsApp a exibir um selo de divulgação em conformidade acima do corpo da postagem no feed do assinante.curl --request POST \
--url https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages/MESSAGE_ID_12345/paid_partnership \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages/MESSAGE_ID_12345/paid_partnership', [
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages/MESSAGE_ID_12345/paid_partnership"
headers = {
"accept": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, headers=headers)
print(response.text)
// POST https://gate.whapi.cloud/newsletters/{NewsletterID}/messages/{MessageID}/paid_partnership
// Programmatically applies paid partnership label for legal ad compliance
const applyComplianceTag = async (newsletterId, messageId) => {
const response = await fetch(`https://gate.whapi.cloud/newsletters/${newsletterId}/messages/${messageId}/paid_partnership`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
}
});
if (!response.ok) {
throw new Error(`Compliance tag assignment failed: ${response.status}`);
}
console.log(`Paid partnership badge successfully stamped on message: ${messageId}`);
};
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(null, new byte[0]);
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages/MESSAGE_ID_12345/paid_partnership")
.post(body)
.addHeader("accept", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/newsletters/120363171744447809@newsletter/messages/MESSAGE_ID_12345/paid_partnership");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
Aumentar o engajamento com enquetes e testes nativos
/messages/quiz e /messages/question.curl --request POST \
--url https://gate.whapi.cloud/messages/quiz \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN' \
--header 'content-type: application/json' \
--data '
{
"to": "120363171744447809@newsletter",
"title": "Does the official Meta WABA support WhatsApp Channels programmatically?",
"options": ["Yes, fully supported", "Only via BSP partners", "No, it completely lacks support"],
"correct_option_index": 2
}
'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://gate.whapi.cloud/messages/quiz', [
'body' => '{"to":"120363171744447809@newsletter","title":"Does the official Meta WABA support WhatsApp Channels programmatically?","options":["Yes, fully supported","Only via BSP partners","No, it completely lacks support"],"correct_option_index":2}',
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
'content-type' => 'application/json',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/messages/quiz"
payload = {
"to": "120363171744447809@newsletter",
"title": "Does the official Meta WABA support WhatsApp Channels programmatically?",
"options": ["Yes, fully supported", "Only via BSP partners", "No, it completely lacks support"],
"correct_option_index": 2
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
// Node.js implementation for native interactive Channel Quizzes and Questions
const sendInteractivePolls = async (newsletterId) => {
// 1. Send Question message to Channel
// POST https://gate.whapi.cloud/messages/question
const questionResponse = await fetch('https://gate.whapi.cloud/messages/question', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: newsletterId,
body: "What is your primary bottleneck when integrating the official WhatsApp Business API?"
})
});
if (questionResponse.ok) {
console.log("Interactive Q&A card published to channel.");
}
// 2. Send Quiz message with a validated correct answer to Channel
// POST https://gate.whapi.cloud/messages/quiz
const quizResponse = await fetch('https://gate.whapi.cloud/messages/quiz', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: newsletterId,
title: "Does the official Meta WABA support WhatsApp Channels programmatically?",
options: ["Yes, fully supported", "Only via BSP partners", "No, it completely lacks support"],
correct_option_index: 2 // Option 3 is marked correct
})
});
if (quizResponse.ok) {
console.log("Interactive trivia Quiz published to channel.");
}
};
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"120363171744447809@newsletter\",\"title\":\"Does the official Meta WABA support WhatsApp Channels programmatically?\",\"options\":[\"Yes, fully supported\",\"Only via BSP partners\",\"No, it completely lacks support\"],\"correct_option_index\":2}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/messages/quiz")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/messages/quiz");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
request.AddJsonBody("{\"to\":\"120363171744447809@newsletter\",\"title\":\"Does the official Meta WABA support WhatsApp Channels programmatically?\",\"options\":[\"Yes, fully supported\",\"Only via BSP partners\",\"No, it completely lacks support\"],\"correct_option_index\":2}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
O que significa @lid nos metadados de canais do WhatsApp?
1524746986546@lid. Este é o formato JID nativo do WhatsApp para IDs de contatos mascarados. Para CRM e análise, você pode tentar resolver esses identificadores.GET /contacts/ids/{ContactLID}, você pode consultar a Whapi.Cloud para resolver o LID anônimo em um número de telefone padrão, desde que sua conta vinculada tenha permissão ou histórico de interação anterior com esse destinatário.curl --request GET \
--url https://gate.whapi.cloud/contacts/ids/1524746986546@lid \
--header 'accept: application/json' \
--header 'authorization: Bearer YOUR_API_TOKEN'
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://gate.whapi.cloud/contacts/ids/1524746986546@lid', [
'headers' => [
'accept' => 'application/json',
'authorization' => 'Bearer YOUR_API_TOKEN',
],
]);
echo $response->getBody();
import requests
url = "https://gate.whapi.cloud/contacts/ids/1524746986546@lid"
headers = {
"accept": "application/json",
"authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.text)
// GET https://gate.whapi.cloud/contacts/ids/{contactLid}
// Query standard phone numbers and identities using the anonymized JID lid
const resolveContactLid = async (contactLid) => {
const response = await fetch(`https://gate.whapi.cloud/contacts/ids/${contactLid}`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.WHAPI_TOKEN}`
}
});
if (!response.ok) {
throw new Error(`Failed to resolve LID: ${response.status}`);
}
const { phone } = await response.json();
console.log(`Successfully mapped LID ${contactLid} to Phone: ${phone}`);
return phone; // Returns standard phone number without the '+' sign
};
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/contacts/ids/1524746986546@lid")
.get()
.addHeader("accept", "application/json")
.addHeader("authorization", "Bearer YOUR_API_TOKEN")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/contacts/ids/1524746986546@lid");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer YOUR_API_TOKEN");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
Implantação e infraestrutura para bots de canais do WhatsApp
Integração de canais sem código: Make, n8n e Zapier
- Configuração do Make.com: Adicione um módulo "HTTP - Make a Request" como sua ação. Configure a URL para
https://gate.whapi.cloud/messages/text. Selecione o método:POST. Nos Headers, adicioneAuthorization:Bearer YOUR_WHAPI_TOKEN. Defina o tipo de corpo comoRaw, Content-Type comoJSON (application/json). Sob Request Content, escreva:{"to": "1203632001928471@newsletter", "body": " - Read more: "}, mapeando variáveis dinâmicas. - Mapeamento de fluxo de trabalho do n8n: Se você estiver configurando uma integração do WhatsApp no n8n, crie um nó "HTTP Request". Configure la URL como
https://gate.whapi.cloud/messages/text. Selecione o método:POST. Ative "Send Headers" e adicioneAuthorizationcom o valorBearer YOUR_WHAPI_TOKEN. Defina o tipo de corpo do conteúdo comoJSON. No editor de parâmetros JSON, mapee o corpo bruto como{ "to": "1203632001928471@newsletter", "body": "=" }. - Disparadores de webhooks do Zapier: Crie um Zap com a ação "Webhooks by Zapier" -> "Custom Request". Defina o método como
POST. Defina a URL comohttps://gate.whapi.cloud/messages/text. Em Data, forneça o payload JSON mapeando:{"to": "1203632001928471@newsletter", "body": "{telegram_message_text}"}. No painel Headers, definaAuthorizationcomoBearer YOUR_WHAPI_TOKENeContent-Typecomoapplication/json.
👉 Guia passo a passo sobre como usar a integração Whapi.Cloud com o Make.com
👉 Guia passo a passo sobre como integrar a Whapi.Cloud com o n8n