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

Отправка сообщений WhatsApp на PHP

Отправляйте тексты, изображения и файлы WhatsApp со своего сайта или из приложения на PHP с вашего собственного номера, привязанного к WbizTool как WhatsApp Web. Нужны только расширение cURL для PHP и один POST к документированному эндпоинту.

Бесплатный пробный период: 50 сообщений за любые 30 дней, без карты.

Как это работает

  1. Получите API-ключ и привяжите номер

    Зарегистрируйтесь, затем привяжите номер WhatsApp на странице «Номера WhatsApp» по QR-коду или коду привязки, как WhatsApp Web. В разделе «Настройки → API-ключи» создайте ключ и скопируйте свой Client ID (где их найти, показано в руководстве по API-ключам ниже). ID на карточке номера (например, ID 678) – это ваш whatsapp_client.

  2. Соберите запрос

    Поместите client_id, api_key, whatsapp_client, номер телефона и msg в массив. Отправьте его как JSON через расширение cURL – или любым HTTP-клиентом, которым вы уже пользуетесь, с теми же полями.

  3. Отправьте сообщение

    Отправьте его POST-запросом на https://wbiztool.com/api/v1/send_msg/. Ответ с "status": 1 и msg_id означает, что сообщение поставлено в очередь на вашем номере.

  4. Проверьте, что оно ушло

    Передайте URL в webhook, чтобы узнать, когда сообщение отправлено или не отправлено, или запросите эндпоинт статуса сообщения с msg_id.

Примеры кода: PHP

Отправка текста
<?php
$payload = [
    'client_id'       => 12345,
    'api_key'         => 'YOUR_API_KEY',
    'whatsapp_client' => 678,
    'msg_type'        => 0,
    'country_code'    => '91',
    'phone'           => '9876543210',
    'msg'             => 'Hi Aman, your order #4821 has shipped and will arrive on Thursday.',
];

$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['status'] ?? 0) === 1) {
    echo 'Queued with msg_id ' . $result['msg_id'];
} else {
    echo 'Failed: ' . ($result['message'] ?? 'no response');
}
Ответ
{"status": 1, "message": "Created", "msg_id": 9817263}
Отправка изображения по URL
<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'client_id'       => 12345,
        'api_key'         => 'YOUR_API_KEY',
        'whatsapp_client' => 678,
        'msg_type'        => 1,
        'country_code'    => '91',
        'phone'           => '9876543210',
        'img_url'         => 'https://example.com/offers/diwali-sale.jpg',
        'msg'             => 'Our Diwali sale starts today 🎉',
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);
Отправка PDF (загрузка файла)
<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    // An array body (not json_encode) makes cURL send multipart/form-data.
    CURLOPT_POSTFIELDS     => [
        'client_id'       => 12345,
        'api_key'         => 'YOUR_API_KEY',
        'whatsapp_client' => 678,
        'msg_type'        => 2,
        'country_code'    => '91',
        'phone'           => '9876543210',
        'msg'             => 'Your invoice for order #4821 is attached.',
        'file_name'       => 'invoice-4821.pdf',
        'file'            => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 120,
]);
echo curl_exec($ch);
curl_close($ch);
Планирование сообщения
<?php
$payload = [
    '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',
];

$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['status'] ?? 0) === 1) {
    echo 'Scheduled with msg_id ' . $result['msg_id'];
} else {
    echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}
Проверка статуса сообщения
<?php
$msgId = 9817263;
$payload = [
    'client_id' => 12345,
    'api_key'   => 'YOUR_API_KEY',
];

$ch = curl_init("https://wbiztool.com/api/v1/message/status/{$msgId}/");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['message'] ?? '') === 'Unknown message id') {
    echo 'No message with this ID in your workspace';
} elseif (!isset($result['status_text'])) {
    echo 'Request failed: ' . ($result['message'] ?? 'no message in response');
} elseif ($result['status'] === 1) {
    echo 'Sent';
} elseif ($result['status'] === 2) {
    echo 'Failed: ' . $result['error'];
} else {
    echo 'Status: ' . $result['status_text'];
}
Приём вебхука статуса
<?php
// webhook.php – WbizTool posts form fields, so they arrive in $_POST.
$msgId  = $_POST['msg_id'] ?? '';
$status = $_POST['status'] ?? ''; // SENT, FAILED, CANCELLED or EXPIRED
error_log("WbizTool message $msgId: $status");
http_response_code(200);

Что можно делать

  • Без библиотек

    Примеры используют только расширение cURL для PHP. API принимает JSON, поля формы или multipart form data, когда вы загружаете файл.

  • Тексты, изображения и файлы

    Укажите msg_type 0 для текста, 1 для изображения или 2 для файла. Передайте публичный img_url или file_url либо загрузите файл через CURLFile.

  • Планирование на потом

    Отправьте POST на /api/v1/schedule_msg/ с date (дд/мм/гггг), time (ЧЧ:ММ) и timezone, например Asia/Kolkata или America/New_York.

  • Вебхуки для каждого статуса

    Передайте webhook, и ваш скрипт получит POST в формате form-encoded – читайте $_POST['msg_id'] и $_POST['status'] (SENT, FAILED, CANCELLED или EXPIRED).

  • Сайт на WordPress? Используйте плагин

    Плагин WbizTool для WordPress отправляет сообщения WhatsApp для заказов WooCommerce, записей WP Amelia и форм Contact Form 7 без кода.

Полезно знать

  • "status": 1 означает, что сообщение в очереди, а не доставлено. «Отправлено» – конечное успешное состояние; API не сообщает, доставлено ли сообщение и прочитано ли оно.
  • Ошибки отправки сообщения приходят с HTTP 400 (429 при дневном лимите); ошибки планирования обычно приходят с HTTP 200 и "status": 0, поэтому всегда декодируйте тело ответа и проверяйте status.
  • Для загрузки файла передавайте в CURLOPT_POSTFIELDS массив, а не json_encode, чтобы cURL отправил multipart/form-data с файлом в поле file.
  • Храните API-ключ на сервере, например в переменной окружения. Любой, у кого он есть, может отправлять с ваших номеров, поэтому никогда не размещайте его в JavaScript в браузере, в мобильном приложении или в публикуемом коде.
  • В пробном периоде – 50 сообщений за любые 30 дней и 1 номер, без карты. На платных тарифах – от $25 в месяц в США (ваша цена – на странице «Цены») – сообщения безлимитные в рамках честного использования: до 1 000 в день с одного номера.
  • Сообщения уходят с вашего собственного номера WhatsApp, поэтому действуют правила самого WhatsApp: пишите тем, кто ждёт ваших сообщений.

Вопросы и ответы

Есть ли SDK для PHP?
Официального пакета для PHP нет, и он не нужен: каждый вызов – это один POST через расширение cURL, как показано выше. Любой HTTP-клиент для PHP работает с тем же URL и полями.
Как отправить счёт в PDF из PHP?
Используйте msg_type 2. Либо передайте публичный file_url, либо загрузите файл через new CURLFile(...) в поле file. Укажите file_name с расширением, например invoice-4821.pdf.
Как узнать, что сообщение отправлено?
Ответ с "status": 1 и msg_id означает, что оно в очереди. Передайте URL в webhook, чтобы получить POST с SENT, FAILED, CANCELLED или EXPIRED, или вызовите эндпоинт статуса сообщения с msg_id. «Отправлено» – конечное состояние: API не сообщает о доставке или прочтении.
В каком формате указывать номер телефона?
Передайте номер с кодом страны (79161234567) или без него (9161234567) вместе с country_code (7). Пробелы, +, дефисы и скобки удаляются автоматически, поэтому +7 (916) 123-45-67 тоже подойдёт.
Нужны ли WhatsApp Business API или одобрение Meta?
Нет. WbizTool отправляет с вашего собственного номера WhatsApp или WhatsApp Business, привязанного как WhatsApp Web. Одобрение Meta не нужно, и согласовывать шаблоны сообщений тоже не надо.
Есть ли плата за каждое сообщение?
Нет. Пробный период включает 50 сообщений за любые 30 дней. На платных тарифах сообщения безлимитные в рамках честного использования, до 1 000 в день с одного номера: Lite – $25, Standard – $59 и Advanced – $149 в месяц в США; на странице «Цены» показана цена для вашей страны.

Читайте руководства

Смотрите также

Отправьте своё первое автоматическое сообщение в WhatsApp уже сегодня

Создайте аккаунт, отсканируйте QR-код и отправьте сообщение менее чем за пять минут.

Начать бесплатно

Платные тарифы – от $25 в месяц в США. Цены