WatsyApp.В кабинет ↗

ДОКУМЕНТАЦИЯ API WATSYAPP

Отправка текста
в WhatsApp через API

Один JSON-запрос из вашей системы. Параметры своего канала, рабочая структура запроса и проверка результата отправки.

Подготовьте канал и получателя

Войдите в кабинет WatsyApp, подключите свой номер по QR-инструкции и дождитесь состояния «Активен». В разделе «Интеграция API» возьмите личный API-ключ. Передавайте его только со своего сервера в заголовке Authorization: Bearer YOUR_API_KEY; не помещайте ключ в JavaScript публичного сайта.

Во всех примерах используются заглушки. Замените RECIPIENT_DIGITS номером получателя в международном формате, 7–15 цифр, без плюса, пробелов и скобок. Команды рассчитаны на Bash. Страница ничего не отправляет сама; выполнение команды с действующими параметрами отправит сообщение.

Получите ID своего канала запросом ниже. Используйте поле channelId из ответа и проверьте state. На аккаунт доступен один канал; ID другого аккаунта не подойдёт.

curl 'https://watsyapp.com/v3/channels' \
  --header 'Authorization: Bearer YOUR_API_KEY'

Отправьте текст: POST /v3/message

Метод принимает JSON с тремя обязательными полями: channelId — ID вашего канала, chatId — номер получателя, text — непустой текст. Передавайте русские буквы в UTF-8. Для переноса строки внутри JSON используйте \n, а кавычки экранируйте JSON-сериализатором.

curl --request POST 'https://watsyapp.com/v3/message' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"channelId":"YOUR_CHANNEL_ID","chatId":"RECIPIENT_DIGITS","text":"Здравствуйте! Ваш документ готов."}'
{
  "messageId": "MESSAGE_ID",
  "chatId": "RECIPIENT_DIGITS"
}

Сохраните messageId вместе с ID операции своей системы. Ответ 200 подтверждает выполнение отправки, но не доставку и не прочтение. Проверьте результат в диалоге и на тестовом телефоне получателя.

Если соединение оборвалось или клиент дождался тайм-аута, результат может быть неизвестен. В текущем контракте нет ключа идемпотентности: автоматический повтор способен отправить дубль. Сначала проверьте диалог и журнал своей системы; повторяйте только после выяснения результата.

Пример для Node.js

Пример для серверной среды с встроенным fetch. Значения берутся из переменных окружения; тело формируется через JSON.stringify, чтобы кавычки и переносы не ломали JSON.

const key = process.env.WATSYAPP_API_KEY;
const channelId = process.env.WATSYAPP_CHANNEL_ID;
const chatId = process.env.WATSYAPP_RECIPIENT;
if (!key || !channelId || !chatId) throw new Error('Задайте параметры окружения');
const response = await fetch('https://watsyapp.com/v3/message', {
  method: 'POST',
  headers: { Authorization: 'Bearer ' + key, 'Content-Type': 'application/json' },
  body: JSON.stringify({ channelId, chatId, text: 'Здравствуйте!\nВаш документ готов.' })
});
const result = await response.json();
if (!response.ok) throw new Error(result.error || 'Ошибка HTTP ' + response.status);
console.log(result.messageId);

Пример для Python

Вариант на стандартной библиотеке Python. HTTPError означает HTTP-ошибку; сетевой тайм-аут требует проверки результата перед повтором.

import json, os, urllib.request
payload = {
    'channelId': os.environ['WATSYAPP_CHANNEL_ID'],
    'chatId': os.environ['WATSYAPP_RECIPIENT'],
    'text': 'Здравствуйте! Ваш документ готов.'
}
request = urllib.request.Request(
    'https://watsyapp.com/v3/message',
    data=json.dumps(payload).encode('utf-8'),
    headers={'Authorization': 'Bearer ' + os.environ['WATSYAPP_API_KEY'],
             'Content-Type': 'application/json'}, method='POST')
with urllib.request.urlopen(request, timeout=60) as response:
    result = json.load(response)
print(result['messageId'])

Если запрос не выполнен

Не планируйте получение статусов через публичный webhook: GET /v3/webhooks сейчас возвращает enabled:false. Это API WatsyApp с QR-подключением, отдельное от Meta Cloud API/WABA. Массовые рассылки, группы и гарантированное отсутствие блокировок здесь не заявлены.

Вопросы по методу

Можно отправить PDF в этом JSON?

Нет. Поле contentUri отклоняется с 422. Загрузите файл через POST /api/send.

Нужен ли channelId?

Да, для /v3/message это обязательный ID своего канала. Получите его через GET /v3/channels.

Почему 200 не означает прочтение?

Сервер возвращает результат операции отправки. Доставка и прочтение зависят от последующих событий WhatsApp.

Следующий шаг

Отправка файлов и голосовых · Обзор API и подключение · Интеграция с CRM