POST /newsletters для создания каналов и POST /messages/text для быстрой публикации постов. Настройте динамические JSON-тела в n8n или Make для автоматического кросс-постинга без платы за каждое сообщение.Почему официальный API Meta* (WABA) не подходит для каналов WhatsApp
| Возможность / Функция | Официальный Meta* WABA (Cloud API) | Шлюз API каналов Whapi.Cloud |
|---|---|---|
| Каналы WhatsApp (Рассылки) | Не поддерживается (0% функций) | Полный доступ через REST API |
| Модель тарификации сообщений | Переменная плата Meta* за сообщение + наценка провайдера | Фиксированная месячная подписка (безлимитные сообщения) |
| Подключение и верификация | Сложная верификация компании в Facebook (дни или недели) | Мгновенное сканирование QR-кода (меньше 2 минут) |
| Шаблоны сообщений и HSM | Обязательное согласование шаблонов для всех рассылок | Шаблоны не требуются; свободная отправка любого контента |
| Интерактивные каналы (Викторины/Опросы) | Не поддерживается | Нативные программные опросы, викторины и карточки вопросов |
Как подключить ваш WhatsApp и начать использовать API
- 1) Перейдите в панель управления Whapi.Cloud и найдите ваш канал по умолчанию.
- 2) Откройте WhatsApp на вашем мобильном телефоне.
- 3) Перейдите в Настройки -> Связанные устройства -> Привязка устройства.
- 4) Отсканируйте QR-код, отображаемый на экране.
Как автоматизировать каналы WhatsApp через REST API
POST на эндпоинт /newsletters. Это идеальное решение для платформ, SaaS или многоканальных сетей, которым необходимо автоматически создавать отдельные вещательные среды для разных авторов или филиалов.name (название) канала и необязательное описание description. Вы также можете загрузить изображение профиля в параметре newsletter_pic. API возвращает уникальный идентификатор канала newsletter_id в формате 120363..._example@newsletter, который вы будете использовать во всех будущих рассылках.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);
Как отправлять посты в каналы WhatsApp через API
GET /newsletters для получения списка всех каналов, привязанных к вашему аккаунту.120363171744447809@newsletter. Как только у вас будет этот уникальный идентификатор, отправка сообщения сводится к простому запросу POST.POST /messages/text, передавая JID канала в параметре to и текст сообщения в параметре body. Это позволяет мгновенно отправлять объявления, ссылки или оповещения вашей аудитории программным путем.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);
Как подписать вашу сессию или бота на канал WhatsApp
POST /newsletters/{NewsletterID}/subscription предназначен для подписки вашего собственного подключенного номера WhatsApp на любой целевой канал. Это крайне полезно для создания парсеров, сборщиков контента или трекеров активности, которым необходимо автоматически отслеживать новостные каналы, ленты конкурентов или ветки объявлений.newsletter_id (включая суффикс @newsletter) в пути URL-адреса. После подписки ваша сессия бота начнет получать все новые опубликованные сообщения и медиафайлы в режиме реального времени через вебхуки.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);
Как получать и парсить сообщения из каналов WhatsApp
GET /newsletters/{NewsletterID}/messages позволяет вашей системе опрашивать историю вещания и программно извлекать текст, ссылки или медиаресурсы.count, before или after, для инкрементной синхронизации контента. Это позволяет запускать фоновые cron-задачи парсинга (например, ежечасно или ежедневно) для сохранения обновлений канала напрямую в вашу CRM, CMS или базу данных (например, PostgreSQL или MongoDB) без создания избыточной нагрузки на 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);
Как отправлять карточки приглашения в канал через API
invite_code при вызове методов GET /newsletters или GET /newsletters/{NewsletterID}. Возвращаемый код представляет собой буквенно-цифровой идентификатор (например, TESTCODE12345).POST /newsletters/link/{NewsletterInviteCode}. Этот метод позволяет отправить карточку приглашения любому личному контакту с красивым превью и кастомным текстом призыва к действию (CTA) для максимальной конверсии.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);
Безопасность: Программное назначение резервных администраторов
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);
Автоматическая пометка спонсорского контента для соблюдения правил рекламы
POST /newsletters/{NewsletterID}/messages/{MessageID}/paid_partnership. Это заставит WhatsApp отображать спонсорскую плашку над текстом поста в ленте подписчика.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);
Повышение вовлеченности с помощью нативных опросов и викторин
/messages/quiz и /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);
Что означает @lid в метаданных каналов WhatsApp?
1524746986546@lid. Это нативный формат WhatsApp для маскированных ID. Для сопоставления в CRM вы можете попытаться их расшифровать.GET /contacts/ids/{ContactLID}, вы можете запросить у Whapi.Cloud разрешение анонимизированного LID в стандартный номер телефона, если у вашего подключенного аккаунта есть права доступа или история взаимодействия с этим получателем.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);
Развертывание и инфраструктура для ботов каналов WhatsApp
Low-Code/No-Code интеграция каналов: Make, n8n и Zapier
- Настройка Make.com: Добавьте модуль "HTTP - Make a Request" в качестве вашего действия. Установите URL в значение
https://gate.whapi.cloud/messages/text. Выберите метод:POST. В заголовках добавьтеAuthorization:Bearer YOUR_WHAPI_TOKEN. Установите тип тела в значениеRaw, Content-Type вJSON (application/json). В поле содержимого запроса напишите JSON, сопоставляя динамические переменные:{"to": "1203632001928471@newsletter", "body": " - Read more: "}. - Настройка n8n: При создании интеграции WhatsApp в n8n используйте узел "HTTP Request". Настройте URL как
https://gate.whapi.cloud/messages/text. Выберите метод:POST. Включите отправку заголовков ("Send Headers") и добавьте заголовокAuthorizationсо значениемBearer YOUR_WHAPI_TOKEN. Установите тип тела в значениеJSON. В редакторе параметров JSON укажите тело запроса:{ "to": "1203632001928471@newsletter", "body": "=" }. - Триггеры вебхуков Zapier: Создайте Zap с действием "Webhooks by Zapier" -> "Custom Request". Выберите метод
POST. Установите URL в значениеhttps://gate.whapi.cloud/messages/text. В поле Data укажите JSON:{"to": "1203632001928471@newsletter", "body": "{telegram_message_text}"}. В панели заголовков укажитеAuthorizationкакBearer YOUR_WHAPI_TOKENиContent-Typeкакapplication/json.
👉 Пошаговое руководство по использованию интеграции Whapi.Cloud с Make.com
👉 Пошаговое руководство по интеграции Whapi.Cloud с n8n