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

API сообщений

API планирования сообщений WhatsApp

Запланируйте отправку текста, изображения или документа WhatsApp на номер телефона или в группу на выбранные дату и время. Подходит для напоминаний о записи, поздравлений с днём рождения, повторных сообщений и предложений, ограниченных по времени.

POSThttps://wbiztool.com/api/v1/schedule_msg/

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

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

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

curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
  -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",
    "msg": "Hi Aman, a reminder that your appointment is today at 11:30 AM.",
    "date": "24/12/2026",
    "time": "09:00",
    "timezone": "Asia/Kolkata"
  }'

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

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

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

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

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

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

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

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

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

Расписание

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

День отправки сообщения в формате dd/mm/yyyy, например 24/12/2026.

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

Время отправки сообщения в 24-часовом формате HH:MM, например 09:00 или 18:45. Секунды не указывайте.

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

Часовой пояс, в котором указаны date и time. Если не передан, используется IST (Индия). См. раздел Часовые пояса.

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

phonestringОбязателен, если не передан group_name

Номер WhatsApp получателя. Пробелы, +, -, ., скобки и 00 в начале удаляются автоматически, поэтому +91 98765-43210 подойдёт. Значения из таблиц, например 919876543210.0 и 9.19876543210E+11, читаются как их цифры, а округлённое, например 9.19877E+11, отклоняется, потому что в нём не хватает цифр. Передайте номер либо с кодом страны (919876543210), либо без него (9876543210) вместе с country_code. Местный номер с ведущим 0 тоже работает: 09876543210 с country_code 91 уходит на 919876543210, а 0612345678 с 39 (Италия, где 0 — часть номера) — на 390612345678. Номер, написанный с + или 00, уже содержит свой код страны: country_code к нему не добавляется, а (0) в скобках после кода удаляется, поэтому +44 (0)20 7946 0018 уходит на 442079460018. С аккаунта Telegram в phone можно также передать @username, ссылку t.me/username или tg:<id>.

group_namestringОбязателен, если не передан phone

Название группы WhatsApp, участником которой является ваш номер. Группа ищется так же, как в API отправки в группу. Передавайте phone или group_name, но не оба параметра.

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

Телефонный код страны без +, например 91 для Индии или 1 для США. Он добавляется перед phone, если номер ещё не начинается с него и не написан с + или 00. Исключение: с кодом 91 к 10-значному номеру префикс добавляется всегда. С другими кодами передавайте местные номера, которые начинаются с тех же цифр, уже с кодом страны. Для групп игнорируется.

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необязательно

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

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

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

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

Когда отправляется сообщение#

  • WbizTool переводит date, time и timezone в единый момент времени и отправляет сообщение, как только этот момент наступил, при условии что ваш номер WhatsApp подключён.
  • Время в прошлом принимается. Сообщение отправляется сразу, как при обычной отправке. Перепроверьте формат даты (dd/mm/yyyy, сначала день), чтобы не отправить сообщение на несколько месяцев раньше.
  • Если в запланированное время ваш номер отключён, сообщение ждёт и уходит сразу после повторного подключения номера, даже если это произойдёт намного позже запланированного. У этого endpoint нет срока действия сообщений, поэтому отмените сообщение, если оно больше не актуально. Сообщение, которое через 90 дней после запланированного времени всё ещё ждёт на отключённом или удалённом номере, удаляется.
  • Пока сообщение не отправлено, у него статус 0 (Created) и его можно отменить. Оно учитывается в дневном лимите номера в день, когда вы его планируете (и в сообщениях бесплатного тарифа).

Часовые пояса#

timezone принимает либо название часового пояса, либо одно из сокращений ниже.

Названия часовых поясов, например Asia/Kolkata, America/New_York, Europe/London или Australia/Sydney. Подходит любое название из базы часовых поясов IANA. Это самый надёжный вариант. Список — в справочнике часовых поясов.

Сокращения можно писать заглавными или строчными буквами (IST или ist). Каждое соответствует региону, и летнее время этого региона учитывается автоматически:

СокращениеИнтерпретируется как
ISTAsia/Kolkata
UTCUTC
GMTGMT
ESTUS/Eastern
CSTUS/Central
MSTUS/Mountain
PSTUS/Pacific
CET, CESTEurope/Paris
EET, EESTEurope/Athens
JSTAsia/Tokyo
AEST, AEDTAustralia/Sydney

Например, EST в июле означает летнее время Нью-Йорка (UTC−4), а не фиксированное UTC−5.

Планирование для группы#

curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "group_name": "Sales Team Mumbai",
    "msg": "Team meeting starts in 15 minutes.",
    "date": "24/12/2026",
    "time": "14:45",
    "timezone": "Asia/Kolkata"
  }'

Ответ#

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

{
  "msg_id": 9817263,
  "message": "Created",
  "status": 1
}
ПолеТипОписание
statusinteger1, если сообщение запланировано, 0, если запрос не выполнен.
messagestringCreated при успехе, иначе текст ошибки.
msg_idintegerID запланированного сообщения. Сохраните его, чтобы позже проверить статус или отменить сообщение. Присутствует только при успехе.

В ответе не повторяются запланированное время и часовой пояс, поэтому сохраняйте в журнале то, что отправили.

Ошибки#

Большинство ошибок возвращаются с HTTP 200 и status, равным 0, поэтому всегда проверяйте status в теле ответа:

{ "message": "Scheduled date & time is not in valid format", "status": 0 }
СообщениеКак исправить
Auth ErrorПередайте и client_id, и api_key.
Invalid Client IdПередайте client_id числом. Возвращается с HTTP 403.
Auth Error: invalid api keyПроверьте, что ключ существует, не удалён и принадлежит этому client_id. Возвращается с HTTP 400.
Either phone or group_name parameter is requiredДобавьте phone или group_name.
Please provide either phone OR group_name, not bothУдалите один из параметров.
Invalid phone numberphone должен быть номером из 6–17 цифр. Буквы и другие символы не допускаются, как и округлённое значение из таблицы, например 9.19877E+11.
Invalid Contact Number "…"Вместе с кодом страны номер должен содержать от 7 до 15 цифр.
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.
Scheduled date & time is not in valid formatОтсутствует date или time, либо timezone — пустая строка.
Scheduled date & time is not in valid format: date DD/MM/YYYY and time HH:MM (24-hour)date или time указаны в другом формате (например, 2026-12-24 или 09:00:00) либо это несуществующая дата (31/02/2026).
Unknown timezone "…": …timezone не является ни названием часового пояса, ни одним из сокращений выше. Смещения вида GMT+5:30 не принимаются.
Invalid msg_type: use 0 (text), 1 (image) or 2 (file)Передайте msg_type как 0, 1 или 2.
Invalid whatsapp client …whatsapp_client отсутствует или не является одним из ваших номеров. Используйте ID, который показан для подключённого номера в вашей панели управления.
Telegram usernames can only be sent to from a Telegram account: pass its id as whatsapp_clientДля @username, ссылки t.me или tg:<id> в phone нужен аккаунт Telegram в whatsapp_client.
Server error: the message was not scheduled. Please try again.Сбой произошёл на нашей стороне. Возвращается с HTTP 500; ничего не запланировано, поэтому повторите запрос.
Not enough creditsРабочее пространство на бесплатном тарифе, и у него не осталось сообщений: платные тарифы отправляют безлимитные сообщения. См. Когда закончились сообщения.
Daily limit reached: a number can send 1,000 messages in 24 hours (fair use). Send the rest tomorrow. (HTTP 429, "code": "daily_limit_reached")Этот номер принял 1 000 сообщений за последние 24 часа (честное использование). Ответ всё равно содержит msg_id отклонённого сообщения, которое отображается как неудачное. Отправьте остальное позже или с другого номера.
Demo Account can not access apisИспользуйте обычный аккаунт.
Invalid JSON format: …Тело JSON некорректно, или вы отправили поля формы без client_id.

Советы#

  • Аккуратно формируйте дату: в Python используйте strftime("%d/%m/%Y") и strftime("%H:%M"). В JavaScript форматируйте дату и время в том же часовом поясе, который передаёте в timezone, а не в локальном времени сервера:

    const tz = "Asia/Kolkata"; // d is the Date to send at
    const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(d); // "24/12/2026"
    const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(d); // "09:00"
  • Проверьте время: запланируйте тестовое сообщение на пять минут вперёд и убедитесь, что оно приходит вовремя.

  • Изменились планы: чтобы перенести сообщение, отмените его и запланируйте новое.

  • Пока не используйте официальные клиенты для планирования: schedule_message в Python передаёт дату в формате YYYY-MM-DD (отклоняется как неверный формат), а scheduleMessage в Node передаёт schedule_time, который этот endpoint не читает. Вызывайте endpoint напрямую, как показано выше.

  • Повторяющиеся сообщения: для регулярных сообщений, например ежемесячных напоминаний об оплате, см. API создания напоминаний.