Перейти к содержимому
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, с которого отправляется сообщение, со страницы настроек 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 получателя, только цифры. Пробелы, +, -, . и скобки удаляются автоматически. Передайте номер либо с кодом страны (919876543210), либо без него (9876543210) вместе с country_code.

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

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

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

Телефонный код страны без +, например 91 для Индии или 1 для США. Он добавляется перед phone, если номер ещё не начинается с него. Исключение: с кодом 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. Это самый надёжный вариант. Список — в справочнике часовых поясов.

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

СокращениеИнтерпретируется как
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), в начале допускается +.
Invalid Contact Number "…"Вместе с кодом страны номер должен содержать от 6 до 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 — пустая строка.
Not enough creditsВ вашем тарифе закончились сообщения.
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 создания напоминаний.