API аккаунтов WhatsApp
Подключение номера WhatsApp (API)
Начните подключение номера WhatsApp к вашему рабочему пространству прямо из своего приложения. WbizTool открывает новую сессию WhatsApp и отправляет на ваш URL webhook QR-код или, при login_method=phone, 8-символьный код. Покажите его владельцу телефона, он сканирует QR-код или вводит код в WhatsApp — и номер готов к отправке сообщений. При подключении по QR-коду номер не нужно знать заранее: WbizTool получит его из WhatsApp после сканирования и отправит на ваш webhook.
Привязываете свой номер вручную? Следуйте руководству Подключение номера WhatsApp.
https://wbiztool.com/api/v1/whatsapp/connect/Тело запроса: JSON или поля формы
POST /api/v1/whatsapp-client/create/ — полностью идентичный псевдоним: он выполняет тот же код и возвращает те же ответы. Оба пути продолжают работать.
Как проходит подключение#
Вызов API только начинает подключение. QR-код или код для телефона приходит позже — на ваш URL webhook.
Вызовите API подключения
Передайте ваш
webhook_url, а приlogin_method=phone— ещё иwhatsapp_number. Чтобы переподключить номер, добавленный ранее, передайте также егоwhatsapp_client_id. В ответе вы получитеwhatsapp_client_id. Сохраните его.Получите QR-код или код для телефона
При
login_method=qr(по умолчанию) ваш webhook получаетstatus=qr_generatedс изображением QR-кода вqr_image. Пока WbizTool ждёт сканирования, QR-код отправляется повторно каждые несколько секунд, поэтому всегда показывайте последний. На сканирование у человека есть около двух минут.При
login_method=phoneваш webhook получаетstatus=pairing_codeс 8-символьным кодом вpairing_code, напримерK5EWPGY5. Он отправляется один раз и действует около трёх минут.Покажите изображение или код владельцу телефона. Если их не использовали вовремя или WhatsApp попросит перезагрузить код, вы получите
not_connected; вызовите API снова, чтобы получить новый.Привяжите телефон
На телефоне откройте WhatsApp → Связанные устройства → Привязка устройства. Отсканируйте QR-код или нажмите Привязать по номеру телефона и введите 8-символьный код.
Получите результат
Ваш webhook получает
status=connectedс привязанным номером вwhatsapp_number, когда номер привязан, илиstatus=not_connected, если код не отсканировали вовремя или подключение не удалось. Событиеconnectedможет прийти на несколько секунд раньше, чем Статус подключения вернётConnected. Сначала ответьте на webhook, а затем опрашивайте «Статус подключения» каждые несколько секунд в течение минуты. Не проверяйте его один раз прямо из обработчика webhook.
Быстрый пример#
curl -X POST https://wbiztool.com/api/v1/whatsapp/connect/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/whatsapp/connect/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
},
timeout=30,
)
result = response.json() # read the body even when the HTTP code is 400 or 403
if result.get("status") == 1:
print("Waiting for QR code, whatsapp_client_id", result["whatsapp_client_id"])
else:
print("Failed:", result.get("message"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/whatsapp/connect/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
webhook_url: "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400 or 403
if (result.status === 1) {
console.log("Waiting for QR code, whatsapp_client_id", result.whatsapp_client_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'webhook_url' => 'https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET',
];
$ch = curl_init('https://wbiztool.com/api/v1/whatsapp/connect/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Waiting for QR code, whatsapp_client_id ' . $result['whatsapp_client_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}Замените 12345 и YOUR_API_KEY своими значениями. Где их найти, описано в разделе Аутентификация. Чтобы вместо QR-кода получить код для телефона, добавьте "login_method": "phone" и "whatsapp_number": "919876543210".
Параметры запроса#
client_idintegerобязательноВаш API Client ID из раздела Настройки → API ключи.
api_keystringобязательноВаш API-ключ с той же страницы. Номер добавляется в рабочее пространство, в котором создан этот ключ.
whatsapp_numberstringТолько при login_method=phoneПри
login_method=phone— полный международный номер, на который отправляется код, потому что WhatsApp отправляет его именно на этот номер: сначала код страны, без0в начале, например919876543210.+, пробелы и дефисы удаляются автоматически.При
login_method=qrон игнорируется, и его можно не передавать. WbizTool сохраняет номер, который WhatsApp сообщает после сканирования, и передаёт его в webhookconnected.login_methodstringнеобязательноqr(по умолчанию), чтобы получить QR-код, илиphone, чтобы получить 8-символьный код, который владелец вводит в WhatsApp в разделе Привязать по номеру телефона. Полезно, когда телефон не может отсканировать QR-код, например если это единственное устройство.whatsapp_client_idintegerнеобязательноЧтобы переподключить номер, который есть в вашем рабочем пространстве, но не подключён, передайте его
whatsapp_client_id. ID сохраняется, поэтому другие ваши вызовы API продолжают работать. Не передавайте его, чтобы добавить новый номер.Строка получает тот номер, который будет привязан. Если QR-код отсканирует другой телефон или вы передадите другой
whatsapp_numberприlogin_method=phone, этотwhatsapp_client_idс этого момента отправляет сообщения с нового номера, включая уже стоящие в очереди.webhook_urlstringОбязателен для получения QR-кодаВаш URL (
httpилиhttps), на который приходят QR-код и обновления подключения, до 250 символов (более длинные URL приводят к ошибке HTTP500). API примет запрос и без него, но тогда вам ничего не будет отправлено и получить QR-код через API будет невозможно. См. раздел События webhook.
Использование официальных клиентов#
Python-клиент вызывает /api/v1/whatsapp-client/create/ за вас. Он запрашивает whatsapp_number; при подключении по QR-коду это значение игнорируется.
from wbiztool_client import WbizToolClient
client = WbizToolClient(api_key="YOUR_API_KEY", client_id=12345)
result = client.create_whatsapp_client(
whatsapp_number="919876543210",
webhook_url="https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
)
print(result)Python-клиент выбрасывает requests.exceptions.HTTPError, когда API возвращает HTTP 400 или 403, поэтому оберните вызов в try/except.
Ответ#
Когда запрос на подключение создан, API возвращает HTTP 200:
{
"message": "Whatsapp Client Created",
"whatsapp_client_id": 678,
"login_method": "qr",
"status": 1
}
| Поле | Тип | Описание |
|---|---|---|
status | integer | 1, если запрос на подключение создан, 0, если нет. |
message | string | Whatsapp Client Created при успехе, иначе текст ошибки. |
whatsapp_client_id | integer | ID номера WhatsApp. Используйте его как whatsapp_client в других вызовах API. Присутствует только при успехе. |
login_method | string | qr или phone — способ, использованный для этой попытки. Присутствует только при успехе. |
"status": 1 означает, что запрос создан, а не что номер подключён. Повторные вызовы API не создают лишних номеров:
- При подключении по QR-коду без
whatsapp_client_idвы получаете тот жеwhatsapp_client_id, пока не будет отсканирован один из его QR-кодов. - При
login_method=phoneдля номера, который был добавлен ранее, но не подключён, возвращается его существующийwhatsapp_client_id. - С
whatsapp_client_idэтот номер переподключается.
Пока не отсканирован первый QR-код, у номера ещё нет номера телефона: Список подключённых номеров и Статус подключения возвращают для него пустой номер.
Ошибки#
| Сообщение | HTTP | Как исправить |
|---|---|---|
login_method must be 'qr' or 'phone' | 400 | Передайте qr, phone или не передавайте параметр вовсе. |
For login_method phone, whatsapp_number must be the full international number with country code and no leading 0, e.g. 919876543210 | 400 | Передайте номер с кодом страны, например 919876543210, а не 09876543210 или 9876543210. |
Auth Error | 200 | Передайте и client_id, и api_key. Также возвращается при некорректном теле JSON. |
Invalid Client Id | 403 | Передайте client_id целым числом, например 12345. |
Auth Error: invalid api key | 400 | Проверьте, что ключ существует, не удалён и принадлежит этому client_id. |
Higher Subscription Required | 200 | Ваш тариф не включает этот API. Повысьте тариф. |
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit | 200 | У вас уже подключено максимальное число номеров, разрешённое тарифом. Отключите один из номеров или повысьте тариф. |
Already Connected With Given Number | 200 | При login_method=phone этот номер уже подключён в этом рабочем пространстве. С whatsapp_client_id этот номер уже подключён. Ничего делать не нужно. Если вы уже достигли лимита номеров по тарифу, вместо этого вы получите WhatsApp Account Limit Reached. |
Invalid WhatsApp client | 400 | whatsapp_client_id не существует, был удалён или относится к другому рабочему пространству. Не передавайте его, чтобы добавить новый номер. |
Запрос, который не является POST, возвращает пустой объект {} с HTTP 200.
События webhook#
На каждом шаге WbizTool отправляет POST на ваш webhook_url. Тело запроса передаётся в виде полей формы (application/x-www-form-urlencoded), а не JSON.
QR-код готов (отправляется повторно каждые несколько секунд, пока ожидается сканирование, часто с тем же изображением):
status=qr_generated&whatsapp_client_id=678&qr_image=...
Код для телефона готов (при login_method=phone, отправляется один раз):
status=pairing_code&whatsapp_client_id=678&pairing_code=K5EWPGY5
Номер подключён, с номером, под которым выполнен вход, в том виде, как его сообщает WhatsApp:
status=connected&whatsapp_client_id=678&whatsapp_number=919876543210
Подключение не удалось, например, потому что QR-код не отсканировали или код для телефона не ввели вовремя:
status=not_connected&whatsapp_client_id=678
| Поле | Значения |
|---|---|
status | qr_generated, pairing_code, connected или not_connected |
whatsapp_client_id | whatsapp_client_id, возвращённый API. |
whatsapp_number | Только при connected. Привязанный номер с кодом страны, например 919876543210. По нему можно узнать, какой номер был отсканирован. Пустой в редких случаях, когда WhatsApp его не сообщил. |
pairing_code | Только вместе с pairing_code. 8-символьный код для ввода в WhatsApp. Показывайте его как есть; пробел или дефис между половинами допустимы. |
qr_image | Только вместе с qr_generated. data: URL с изображением PNG в base64 (data:image/png;base64,…). Используйте его как источник изображения как есть; каждое событие несёт самый свежий код. До октября 2026 года это могла быть и https-ссылка на изображение; такие ссылки больше не работают, поэтому, если ваш код их обрабатывает, больше ничего менять не нужно. |
Ваш URL должен быть публично доступен и отвечать в течение нескольких секунд. WbizTool ждёт вашего ответа до 10 секунд; если ваш сервер отвечает медленно или недоступен, это событие теряется, но попытка подключения продолжается. Принимается любой код статуса HTTP. Неудачные доставки не повторяются, а если номер позже отключится, ничего отправлено не будет. Чтобы следить за номером после подключения, опрашивайте Статус подключения.
Опрос вместо webhook#
Если ваш сервер не может принимать webhook, webhook всё равно нужен для получения QR-кода, но для получения результата полагаться на него не обязательно. После сканирования QR-кода вызывайте Статус подключения с whatsapp_client_id каждые несколько секунд, пока он не вернёт Connected. Список аккаунтов показывает то же самое для всех ваших номеров.
Советы#
- Обрабатывайте повторные события: сделайте обработчик безопасным для повторного выполнения на случай, если событие будет доставлено дважды.
- Показывайте самый новый QR-код: заменяйте изображение при каждом новом событии
qr_generated, добавляя кhttpsURL параметр для обхода кеша. Старые коды перестают работать. - Сканируйте примерно в течение двух минут: после этого вы получите
not_connected. Вызовите API снова, чтобы получить новый код. - Проверяйте номер после сканирования QR-кода:
whatsapp_numberв событииconnected— это номер, который был привязан на самом деле, и он может отличаться от ожидаемого. - Введите код для телефона примерно в течение трёх минут: каждая попытка даёт один код. Если он истёк, вы получите
not_connected; вызовите API снова. - Нет QR-кода или кода для телефона через 10 минут? Запрос истёк. Вызовите API снова.
- Подключение из панели управления проще, если вы привязываете собственный номер. Откройте настройки WhatsApp и отсканируйте код там.
