Перейти к содержимому
WbizTool

API сообщений

API отправки на несколько номеров

Отправляйте одно и то же сообщение WhatsApp на несколько номеров телефонов и в группы одним запросом. Подходит для небольших рассылок: новостей, предложений и объявлений.

POSThttps://wbiztool.com/api/v1/send_msg/multi/

Тело запроса: JSON или поля формы

WbizTool создаёт отдельное сообщение для каждого получателя и возвращает msg_id для каждого из них, чтобы вы могли проверить их статус по отдельности.

Быстрый пример#

curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "country_code": "91",
    "phone": "9876543210,9812345670,Sales Team Mumbai",
    "msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
  }'

Замените 12345, YOUR_API_KEY и 678 своими значениями. Где их найти, описано в разделе Аутентификация.

Параметры запроса#

Аутентификация

client_idintegerобязательно

Ваш API Client ID из раздела Настройки → API ключи.

api_keystringобязательно

Ваш API-ключ с той же страницы.

whatsapp_clientintegerобязательно

ID номера WhatsApp или аккаунта Telegram, с которого отправляются сообщения, со страницы настроек WhatsApp. В отличие от API отправки сообщений, этот endpoint никогда не выбирает номер за вас.

Получатели и сообщение

phonestringобязательно

Номера телефонов и названия групп в одной строке через запятую, например 9876543210,9812345670,Sales Team Mumbai. Не передавайте JSON-массив. См. раздел Как разбираются получатели.

country_codestringнеобязательно

Телефонный код страны без +, например 91. Он добавляется перед каждым номером телефона, если номер ещё не начинается с него и не написан с + или 00. В JSON подходят и строка ("91"), и число (91).

msg_typeintegerнеобязательно

0 — текст (по умолчанию), 1 — изображение, 2 — файл или документ.

msgstringОбязателен, если msg_type равен 0

Текст сообщения. Для изображений и файлов это подпись, она может быть пустой. Форматирование WhatsApp работает: *bold*, _italic_, ~strikethrough~. В качестве псевдонима принимается message.

Изображения и файлы

img_urlstringОбязателен, если msg_type равен 1

Публичный URL изображения (http или https).

file_urlstringОбязателен, если msg_type равен 2

Публичный URL (http или https), по которому файл можно скачать напрямую.

file_namestringнеобязательно

Имя файла, которое увидят получатели, например price-list.pdf. Отправляется в нижнем регистре, символы вроде & : ? * $ ; заменяются на _, а длина обрезается до 150 символов. Если параметр не передан, имя берётся из URL.

Параметры доставки

webhookstringнеобязательно

URL, на который приходит POST для каждого сообщения, когда оно отправлено, не удалось его отправить, оно отменено или срок его действия истёк. Содержимое запроса такое же, как в API отправки сообщений.

Изображение по URLcURL
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 1,
    "country_code": "91",
    "phone": "9876543210,9812345670",
    "img_url": "https://example.com/offers/diwali-sale.jpg",
    "msg": "Our Diwali sale starts tomorrow."
  }'

Как разбираются получатели#

WbizTool разбивает phone по запятым, удаляет пробелы вокруг каждого элемента, а затем определяет, чем является каждый элемент:

  • Номера телефонов можно писать так, как они у вас есть: +91 98765 43210, 98765-43210, (987) 654-3210, 0091 98765 43210 и +44 (0)20 7946 0018 подходят, как и значения из таблиц, например 919876543210.0 и 9.19876543210E+11.
  • country_code добавляется, если номер ещё не начинается с него и не написан с + или 00: +44 20 7946 0018 с country_code 91 остаётся 442079460018. Поэтому в одном списке можно смешивать страны: пишите номера других стран с +.
  • Местный номер с ведущим 0 тоже работает: 09876543210 с country_code 91 уходит на 919876543210, а 0612345678 с 39 (Италия, где 0 — часть номера) — на 390612345678.
  • Вместе с кодом страны номер должен содержать от 7 до 15 цифр.
  • Текст с буквами или другими символами, например Sales Team Mumbai или Family 2024, считается названием группы WhatsApp, которая ищется так же, как в API отправки в группу.
  • Название группы без букв, например 2024-2025, читается как номер телефона, если только в нём не меньше 10 цифр и ваше рабочее пространство уже не отправляло сообщение в группу с точно таким названием (она есть в разделе Группы в Контактах). Короткое название, в котором меньше 7 цифр и есть дефис, точка или скобки, например 2024-25 или (2024), всегда считается названием группы. Группы с запятыми в названии нельзя отправить через этот endpoint. Для них используйте API отправки в группу.
  • С аккаунта Telegram @username, ссылка t.me/username или tg:<id> — это человек, а не название группы, а номер телефона уходит этому человеку в Telegram. С номера WhatsApp имена пользователей, ссылки t.me и tg:<id> пропускаются.

Что ещё нужно знать:

  • Номера, которые после добавления кода страны оказываются слишком короткими или слишком длинными, округлённые значения из таблиц и элементы только из нулей (0, 00) молча пропускаются. Они не появляются в ответе и не получают msg_id.
  • Дубликаты не удаляются. Номер, указанный дважды, получит два сообщения.
  • Если местный номер случайно начинается с тех же цифр, что и country_code (например, 9123456780 при country_code 91), код не добавляется. Передавайте такие номера сразу с кодом страны (919123456780).
  • URL изображений и файлов не проверяются при вызове API. Они скачиваются при отправке каждого сообщения, поэтому из-за нерабочей ссылки позже завершатся ошибкой сами сообщения, а не запрос. Действуют те же правила отправки, что и в API отправки сообщений: изображения больше 16 МБ и видео больше 64 МБ не проходят, аудио WAV и OGG нельзя отправить как изображение (msg_type 1), а к файлам (msg_type 2) без расширения или с неподдерживаемым расширением добавляется .pdf. См. Отправка изображений и файлов.

Лимиты сообщений#

Весь пакет проверяется до создания сообщений, поэтому список никогда не отправляется частично. Учитывается каждый непустой элемент в phone, включая те, что позже будут пропущены, а также сообщения, которые стоят в очереди, но ещё не отправлены.

{
  "message": "Daily limit reached: a number can send 1,000 messages in 24 hours (fair use). Send the rest tomorrow. 1200 messages requested, 640 more can go out from this number in the next 24 hours.",
  "code": "daily_limit_reached",
  "status": 0
}
  • Бесплатный тариф: пакет также должен уложиться в оставшиеся бесплатные сообщения рабочего пространства (50 за любые 30 дней). Иначе вы получаете:
{
  "message": "Not enough credits: 120 messages requested, 35 credits remaining",
  "status": 0
}

Распределяйте большие списки на несколько номеров или дней. Для крупных кампаний загрузите таблицу на странице Кампании.

Ответ#

Успешный запрос возвращает HTTP 200:

{
  "msg_ids": [9817263, 9817264, 9817265],
  "messages": [
    { "msg_id": 9817263, "contact": "919876543210", "is_group": false },
    { "msg_id": 9817264, "contact": "919812345670", "is_group": false },
    { "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
  ],
  "message": "Successfully created 3 messages",
  "status": 1
}
ПолеТипОписание
statusinteger1, если в очередь поставлено хотя бы одно сообщение, иначе 0.
messagestringSuccessfully created N messages при успехе, иначе текст ошибки.
msg_idsarray of integersID сообщений в очереди в порядке phone. Присутствует только при успехе.
messagesarrayПо одному объекту на каждое сообщение в очереди. Присутствует только при успехе.
messages[].msg_idintegerID сообщения.
messages[].contactstringНомер телефона с применённым кодом страны или название группы.
messages[].is_groupbooleantrue, если элемент был распознан как название группы.

Сравните messages с отправленным списком, чтобы найти пропущенные номера, и проверьте, что is_group равен false для каждого элемента, который вы передавали как номер телефона.

Ошибки#

Большинство ошибок возвращаются с HTTP 200 и status, равным 0, поэтому всегда проверяйте status в теле ответа. Кроме ошибок с HTTP 400 и 403, ответы (включая успешные) — это JSON с заголовком Content-Type: text/html, поэтому разбирайте тело самостоятельно, а не полагайтесь на автоматическое определение JSON (например, в no-code-инструментах):

{ "message": "Invalid whatsapp client", "status": 0 }
СообщениеКак исправить
Auth ErrorПередайте и client_id, и api_key.
Invalid Client IdПередайте client_id числом. Возвращается с HTTP 403.
Auth Error: invalid api keyПроверьте, что ключ существует, не удалён и принадлежит этому client_id. Возвращается с HTTP 400.
Msg cant be nullДля текстовых сообщений (msg_type 0) нужен msg.
Image Url Can't be nullДля msg_type 1 передайте img_url.
File Url Can't be nullДля msg_type 2 передайте file_url.
Not enough credits: … messages requested, … credits remainingСообщений бесплатного тарифа не хватает на весь список. Уменьшите число получателей или выберите тариф. См. раздел Лимиты сообщений.
Daily limit reached: … messages requested, … more can go out from this number in the next 24 hours.Распределите список на несколько дней или номеров. См. раздел Лимиты сообщений.
Invalid whatsapp clientЭтого ID whatsapp_client нет в вашем рабочем пространстве.
No valid contacts foundВсе элементы в phone оказались пустыми или были пропущены. Проверьте, что номера вместе с кодом страны содержат от 7 до 15 цифр.
Demo Account can not access apisИспользуйте обычный аккаунт.
Invalid JSON format: …Тело JSON некорректно, или вы отправили поля формы без client_id.

Советы#

  • Передавайте phone строкой: объедините список через запятую. На JSON-массив возвращается {}.
  • Пока не используйте send_bulk_messages из клиента для Python: он передаёт список как phones, а этот endpoint такое поле игнорирует. Вызывайте endpoint напрямую, как в примерах выше.
  • Отслеживайте каждое сообщение: сохраняйте каждый msg_id из messages или передайте webhook, чтобы получать уведомление об отправке, ошибке, отмене или истечении срока каждого сообщения.
  • Держите номер подключённым: все сообщения отправляются с вашего номера WhatsApp, поэтому он должен оставаться подключённым в настройках WhatsApp, пока не уйдёт весь пакет.
  • Разный текст для разных людей: этот endpoint отправляет всем один и тот же msg. Чтобы персонализировать сообщения, вызывайте API отправки сообщений отдельно для каждого получателя.