Перейти к содержимому
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, с которого отправляются сообщения, со страницы настроек WhatsApp. В отличие от API отправки сообщений, этот endpoint никогда не выбирает номер за вас.

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

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

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

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

Телефонный код страны без +, например 91. Он добавляется перед каждым номером телефона, если номер ещё не начинается с него. В JSON передавайте его строкой ("91"), а не числом. Если передать число, каждый номер телефона в списке считается названием группы (is_group: true), и эти сообщения не отправляются.

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 по запятым, удаляет пробелы вокруг каждого элемента, а затем определяет, чем является каждый элемент:

  • Только цифры (допускаются + в начале и ведущие нули): считается номером телефона. Добавляется country_code, если номер ещё не начинается с него; после этого номер должен содержать от 6 до 15 цифр.
  • Всё остальное: считается названием группы WhatsApp, которая ищется так же, как в API отправки в группу.
  • Группа, название которой состоит только из цифр (например, 2024), считается номером телефона, а группы с запятыми в названии нельзя отправить через этот endpoint. Для них используйте API отправки в группу.

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

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

Кредиты#

Перед созданием сообщений весь пакет сверяется с остатком ваших кредитов. Учитывается каждый непустой элемент в phone, включая те, что позже будут пропущены. Если их больше, чем оставшихся кредитов, сообщения не создаются, и вы получаете:

{
  "message": "Not enough credits: 120 messages requested, 85 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Уменьшите число получателей или пополните кредиты. См. раздел Кредиты.
Invalid whatsapp clientЭтого ID whatsapp_client нет в вашем рабочем пространстве.
No valid contacts foundВсе элементы в phone оказались пустыми или были пропущены. Проверьте, что номера вместе с кодом страны содержат от 6 до 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 отправки сообщений отдельно для каждого получателя.