ДОКУМЕНТАЦИЯ 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'])Если запрос не выполнен
- 401: проверьте личный ключ и заголовок Bearer.
- 404 «Канал не найден»: получите ID через
/v3/channelsс тем же ключом. - 400: проверьте JSON, непустой текст, формат номера и подключение канала. Точное пояснение находится в поле
error. - 422: поле
contentUriне поддерживается этим методом. Для вложения используйте multipart-инструкцию.
Не планируйте получение статусов через публичный 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