WatsyApp.В кабинет ↗

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

Файлы и голосовые
в WhatsApp через API

PDF, фото и аудио через multipart-загрузку. Разберитесь с MIME-типом, подписью, голосовым форматом и лимитом одного файла.

Подготовьте локальный файл

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

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

Используйте один файл размером не более 20 × 1024 × 1024 байт (20 МиБ). Лимит относится к загружаемому вложению WatsyApp, а не ко всем возможностям WhatsApp. Метод принимает байты локального файла, не ссылку на скачивание.

PDF и документы: POST /api/send

Запрос — multipart/form-data. Обязательны chatId и, для отправки вложения, file. Поле text необязательно; для документа оно становится подписью. Канал определяется API-ключом, поэтому channelId в этом методе не требуется.

curl --request POST 'https://watsyapp.com/api/send' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --form 'chatId=RECIPIENT_DIGITS' \
  --form 'text=Документ по вашему запросу' \
  --form 'file=@./document.pdf;type=application/pdf'

Не задавайте общий заголовок Content-Type: multipart/form-data вручную: curl добавит boundary. Параметр type=application/pdf внутри поля файла задаёт MIME-тип самого вложения.

{
  "messageId": "MESSAGE_ID",
  "chatId": "RECIPIENT_DIGITS"
}

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

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

Изображения, видео и обычное аудио

Способ отправки зависит от MIME-типа загрузки: image/* — картинка, video/* — видео, audio/* — аудио. Остальные типы уходят как документ с исходным именем файла. Указывайте MIME-тип, соответствующий содержимому.

curl --request POST 'https://watsyapp.com/api/send' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --form 'chatId=RECIPIENT_DIGITS' \
  --form 'text=Фото по вашему запросу' \
  --form 'file=@./photo.jpg;type=image/jpeg'

Подпись text применяется к изображениям, видео и документам. В текущей реализации обычное аудио и голосовое отправляются без подписи: при необходимости отправьте пояснение отдельным текстовым сообщением. Произвольный кодек не гарантирует воспроизведение на телефоне; проверьте тестовое вложение на устройстве получателя.

Голосовое сообщение: type=voice

Чтобы отправить аудио как голосовое, добавьте отдельное поле формы type=voice. Это другой параметр, чем MIME-тип файла. Сервер преобразует загруженное аудио в OGG/Opus и передаст его как PTT. Обычная загрузка аудиофайла без этого поля отправит аудио, а не голосовое.

curl --request POST 'https://watsyapp.com/api/send' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --form 'chatId=RECIPIENT_DIGITS' \
  --form 'type=voice' \
  --form 'file=@./recording.mp3;type=audio/mpeg'

Конвертация может завершиться ошибкой, если исходник повреждён, не содержит подходящего аудио или превышено время обработки. Ограничение загрузки 20 МиБ действует и для исходного голосового файла.

Проверка ошибок и повторов

Не используйте JSON-поле contentUri в /v3/message: оно возвращает 422. Нет публичного webhook для подтверждений. API WatsyApp использует QR-подключение; это не контракт Meta Cloud API/WABA.

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

Можно передать несколько файлов одним запросом?

Нет. Текущий загрузчик разрешает одно вложение. Для каждого файла нужен отдельный запрос и отдельная проверка результата.

Почему MP3 пришёл аудиофайлом?

Для голосового требуется отдельное поле формы type=voice. Сервер преобразует исходник в OGG/Opus.

Нужен ли ID канала для файла?

Нет. /api/send выбирает канал аккаунта по API-ключу. ID требуется для текстового /v3/message.

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

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