Сообщения
Отправить текстовое сообщение
Отправляет текстовое сообщение. message.text не может быть пустым; provider_data содержит специфичные поля, а цитируемый ответ использует reply_to верхнего уровня.
https://api.unifyport.ai/v1/messagesПоддерживаемые каналы
Перед вызовом
Используйте X-Api-Key нужного рабочего пространства на сервере. Перед запуском замените все заполнители.
Завершите авторизацию и проверьте runtime_status. Авторизация и соединение — разные состояния; HTTP-успех не доказывает готовность.
Откуда взять параметры
- account_id
- Возьмите data.id из создания или запроса аккаунта. Идентификатор относится к рабочему пространству X-Api-Key. Получить аккаунт
- to.id · to.type
- Для ответа скопируйте data.conversation.id и data.conversation.type из message.received в to.id и to.type. Для нового адресата следуйте правилам идентификаторов канала. Поддержка единого отправления сообщений
Параметры запроса
Заголовки
X-Api-KeyAPI-ключ рабочей области. Рабочая область определяется по этому заголовку.
Content-TypeИспользуйте application/json при отправке JSON-тела запроса.
Тело запроса
provider_dataobjectОпции отправки провайдера, действующие только для поддерживаемых провайдеров и типов сообщений. seconds для WhatsApp audio/video — неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295, waveform — только для audio. Для ответа с цитатой используйте reply_to верхнего уровня, если он поддерживается. Для sticker поле provider_data нужно опустить или передать пустой объект; не объект возвращает 400 invalid_request, непустой объект — 400 provider_invalid_request.
provider_dataОпции отправки провайдера, действующие только для поддерживаемых провайдеров и типов сообщений. seconds для WhatsApp audio/video — неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295, waveform — только для audio. Для ответа с цитатой используйте reply_to верхнего уровня, если он поддерживается. Для sticker поле provider_data нужно опустить или передать пустой объект; не объект возвращает 400 invalid_request, непустой объект — 400 provider_invalid_request.
secondsНеобязательная длительность сообщений WhatsApp audio и video в секундах как неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295.
minimum: 0
waveformНеобязательные данные waveform для сообщений WhatsApp типа audio. Непустые значения должны использовать стандартную кодировку Base64 и после декодирования быть разбираемыми JSON-данными waveform; пустая строка считается отсутствием значения, а другие ошибки формата возвращают HTTP 400 provider_invalid_request.
account_idАккаунт провайдера, отправляющий сообщение.
minLength: 1
toobjectобязательноПолучатель: id и type.
toПолучатель: id и type.
idИдентификатор получателя на стороне провайдера.
minLength: 1
typeСтандартный тип беседы: user, group или channel. Группы объявлений сообщества WhatsApp по-прежнему используют group.
enum: user, group, channel
messageobjectобязательноНормализованный payload сообщения. Текст — message.text, медиа — message.url.
messageНормализованный payload сообщения. Текст — message.text, медиа — message.url.
typeТип сообщения: text, image, video, audio, document, file, contact, link_preview, poll или sticker.
enum: text, image, video, audio, document, file, contact, link_preview, poll, sticker
textНепустой текст, обязательный для text и link_preview. Для link_preview нужен хотя бы один непробельный символ; WhatsApp также требует включить в текст link_preview.url без изменений.
minLength: 1
captionНеобязательная подпись для image, video, document или file.
urlНепустой абсолютный HTTP(S) URL; медиа требует url, file_url или file_key.
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_urlНепустой альтернативный абсолютный HTTP(S) URL; медиа требует один источник.
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_keyНепустая ссылка на файл провайдера или хранилища; медиа требует один источник.
contacts[]object[]Непустой массив карточек, обязательный при message.type=contact.
minItems: 1
contacts[]Непустой массив карточек, обязательный при message.type=contact.
minItems: 1
nameНепустое отображаемое имя, обязательное для каждой карточки.
minLength: 1
phones[]object[]Телефонные номера в карточке контакта.
phones[]Телефонные номера в карточке контакта.
numberНомер телефона; обязателен для каждой записи phone.
typeНеобязательная метка телефона, например CELL или WORK.
emails[]object[]Адреса электронной почты в карточке контакта.
emails[]Адреса электронной почты в карточке контакта.
addressАдрес электронной почты; обязателен для каждой записи email.
format: email
typeНеобязательная метка электронной почты, например WORK или HOME.
organizationНеобязательное название организации контакта.
titleНеобязательная должность контакта.
link_previewobjectОбязателен вместе с text только для message.type=link_preview; нельзя смешивать с другими данными сообщения. Общая структура требует только url; необязательные title и description допускают пустую строку, но не null. Политика отправки WhatsApp в этом API требует непустые title/image_url и ограничивает title до 255, а description до 1024 символов Unicode.
link_previewОбязателен вместе с text только для message.type=link_preview; нельзя смешивать с другими данными сообщения. Общая структура требует только url; необязательные title и description допускают пустую строку, но не null. Политика отправки WhatsApp в этом API требует непустые title/image_url и ограничивает title до 255, а description до 1024 символов Unicode.
urlОбязательная целевая ссылка: абсолютный HTTP(S) URI с именем хоста без пробельных символов; в квадратных скобках допустимы только литералы IPv6. Сохраняется без изменений; доступность ресурса не гарантируется.
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
titleНеобязательный заголовок предпросмотра; пустая строка допустима, null запрещён. WhatsApp требует непустое значение длиной до 255 символов Unicode.
descriptionНеобязательное описание предпросмотра; пустая строка допустима, null запрещён. WhatsApp допускает до 1024 символов Unicode.
image_urlНеобязательный URI изображения; для WhatsApp обязателен и не может быть пустым. Нужен абсолютный HTTP(S) URI с именем хоста без пробельных символов; в квадратных скобках допустимы только литералы IPv6. Сохраняется без изменений; доступность ресурса не гарантируется.
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
pollobjectОбязателен только для message.type=poll; нельзя смешивать с text или другими данными сообщения. Требуются question, options и max_selections. Вопрос и заголовки вариантов сохраняются без изменений. Общая структура не ограничивает длину вопроса, максимальное число вариантов или повторение заголовков; провайдеры могут вводить дополнительные ограничения.
pollОбязателен только для message.type=poll; нельзя смешивать с text или другими данными сообщения. Требуются question, options и max_selections. Вопрос и заголовки вариантов сохраняются без изменений. Общая структура не ограничивает длину вопроса, максимальное число вариантов или повторение заголовков; провайдеры могут вводить дополнительные ограничения.
questionОбязательный вопрос опроса с хотя бы одним непробельным символом; сохраняется без изменений.
minLength: 1 · pattern: \S
options[]object[]Обязательный массив минимум из двух вариантов, каждый с title.
minItems: 2
options[]Обязательный массив минимум из двух вариантов, каждый с title.
minItems: 2
titleОбязательный заголовок варианта с хотя бы одним непробельным символом. Отправляется без trim, изменения регистра или нормализации Unicode.
minLength: 1 · pattern: \S
max_selectionsОбязательное максимальное число выбираемых вариантов на одного участника, не число участников. Целое от 1 до количества options, проверяемое API. Числа с целым значением, например 1.0 и 1e0, равны 1; дробные значения недопустимы.
minimum: 1
reply_toobjectЦель цитирования. Скопируйте data.message.reply_token из события цитируемого сообщения или data.reply_token из ответа на отправку в reply_to.reply_token без изменений, используя исходные аккаунт и диалог; не заменяйте ID сообщения.
reply_toЦель цитирования. Скопируйте data.message.reply_token из события цитируемого сообщения или data.reply_token из ответа на отправку в reply_to.reply_token без изменений, используя исходные аккаунт и диалог; не заменяйте ID сообщения.
reply_tokenНепрозрачный дескриптор из data.message.reply_token события цитируемого сообщения или data.reply_token ответа на отправку. Используйте без изменений с исходными аккаунтом и диалогом; не заменяйте ID сообщения.
minLength: 1
mentions[]object[]Список целей @ для группового сообщения. type=member использует соответствующий id участника Provider; type=all означает @всех и действует только при поддержке Provider, иначе возвращается unsupported_message_type.
mentions[]Список целей @ для группового сообщения. type=member использует соответствующий id участника Provider; type=all означает @всех и действует только при поддержке Provider, иначе возвращается unsupported_message_type.
typeТип цели @. Если опустить, для совместимости со старыми запросами считается member; type=member требует id, а type=all передается без id и применим только к групповым чатам.
enum: member, all
idИдентификатор участника Provider, обязательный при type=member.
minLength: 1
Как понять результат
Сохраните message_id и provider_ref для сопоставления событий и диагностики. accepted не подтверждает доставку. Проверяйте её по событиям квитанций только при поддержке каналом; форматы идентификаторов различаются.
reply_token — Необязательный непустой непрозрачный дескриптор WhatsApp после успешной отправки при полном контексте цитирования, включая новые опросы, которые можно цитировать обычным текстом. Если недоступен, опускается без изменения статуса accepted. Используйте без изменений с исходным аккаунтом и диалогом; это не ID сообщения.
Ответ 200 OK
{
"request_id": "<REQUEST_ID>",
"data": {
"message_id": "msg_example",
"account_id": "acc_example",
"status": "accepted",
"provider_ref": "provider_msg_example",
"reply_token": "<opaque WhatsApp reply handle>"
}
}
Тело ответа
message_idИдентификатор сообщения UnifyPort (msg_...) для принятого сообщения.
account_idАккаунт провайдера, к которому относится этот ответ.
statusСтатус приёма; accepted означает, что сообщение поставлено в очередь на доставку провайдеру.
provider_refСсылка на сообщение на стороне провайдера, как только провайдер её назначит.
reply_tokenНеобязательный непустой непрозрачный дескриптор WhatsApp после успешной отправки при полном контексте цитирования, включая новые опросы, которые можно цитировать обычным текстом. Если недоступен, опускается без изменения статуса accepted. Используйте без изменений с исходным аккаунтом и диалогом; это не ID сообщения.
minLength: 1
Ответы
200200 OK
Запрос выполнен. См. пример тела ответа.
400Bad Request
Тело запроса, путь или параметры некорректны.
401Unauthorized
Заголовок X-Api-Key отсутствует или недействителен.
403Forbidden
Запрос распознан, но операция запрещена.
404Not Found
Запрошенный ресурс не найден. Сверьте error.code с текущей операцией.
409Conflict
Запрошенная операция конфликтует с существующим аккаунтом провайдера или ресурсом.
500Internal Server Error
Сервис столкнулся с неожиданной ошибкой.
501Not Implemented
Выбранный провайдер не реализует эту операцию.
502Bad Gateway
Адаптер или вышестоящий провайдер не смог завершить операцию.
При ошибке запроса
Проверьте HTTP и error.code/numeric_code, сохраните request_id. Исправьте параметры, завершите авторизацию или проверьте runtime. До повторной отправки или записи выясните результат предыдущей попытки. Справочник ошибок
Сопоставляйте HTTP-статус, error.code и error.numeric_code с текущей операцией. Числовой код — строка. Сохраняйте request_id для диагностики: это не ключ идемпотентности и не идентификатор задачи.
- invalid_reply_token · 36006 · 400
Токен цитирования не читается. Передайте data.message.reply_token входящего события без изменений.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 36006
{ "request_id": "req_example", "error": { "code": "invalid_reply_token", "numeric_code": "36006", "message": "Invalid or unreadable reply_token" } }- invalid_request · 10000 · 400
Проверьте JSON и обязательные поля.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример · 400 · 10000
{ "request_id": "req_message_invalid_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid message request body" } }- invalid_target_workspace · 11003 · 400
Целевое рабочее пространство в заголовке переопределения пусто или задано неверно. Удалите этот заголовок и используйте API-ключ нужного пространства.
Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- provider_invalid_request · 30001 · 400
Проверьте поля и форматы, специфичные для канала.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример · 400 · 30001
{ "request_id": "req_sticker_rejected_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "sticker upload failed: media is unsupported" } }- provider_invalid_request · 36007 · 400
Медиа стикера не прошло проверку до отправки провайдеру. Ответ может уточнять причину подготовки; numeric_code=36007 не означает, что отправка была выполнена.
Условие: Применяется, когда медиа стикера или его URL отклонены при проверке до отправки в канал.
Действия и повторы: Исправьте указанную проблему со стикером перед отправкой. Эта ошибка возникает при подготовке медиа до вызова отправки у провайдера; она не означает неизвестный результат уже выполненной отправки.
Пример · 400 · 36007
{ "request_id": "req_sticker_invalid_example", "error": { "code": "provider_invalid_request", "numeric_code": "36007", "message": "invalid sticker media: invalid WebP container length" } }- unsupported_message_type · 36000 · 400
Используйте поддерживаемый каналом message.type.
Действия и повторы: Выберите поддерживаемые канал и действие. Повтор запроса не добавит возможностей и не откроет доступ к бета-функциям.
Пример JSON; message зависит от фактической причины · 400 · 36000
{ "request_id": "req_example", "error": { "code": "unsupported_message_type", "numeric_code": "36000", "message": "Message type not supported" } }- invalid_api_key · 11001 · 401
Проверьте правильность и активность ключа API.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
Добавьте заголовок X-Api-Key.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- workspace_override_forbidden · 11002 · 403
Запрос пытается переопределить рабочее пространство без необходимых прав. Удалите заголовок переопределения и используйте API-ключ нужного рабочего пространства.
Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- target_workspace_not_found · 11004 · 404
Переопределённое рабочее пространство не найдено или недоступно. Проверьте его принадлежность, удалите заголовок переопределения и используйте нужный API-ключ; повторы не дадут доступ.
Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- account_binding_not_found · 30006 · 409
Нет активной привязки к подключению канала; проверьте состояние аккаунта.
Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.
Пример JSON; message зависит от фактической причины · 409 · 30006
{ "request_id": "req_example", "error": { "code": "account_binding_not_found", "numeric_code": "30006", "message": "Account is not bound to an available server" } }- provider_not_ready · 30009 · 409
Подключение не готово. Перед повтором проверьте авторизацию и runtime_status.
Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.
Пример JSON; message зависит от фактической причины · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- provider_not_ready · 30014 · 409
Отсутствует экземпляр провайдера, нужный аккаунту. Это проблема доступности среды выполнения, а не доказательство истечения авторизации.
Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.
Каналы: WhatsApp
Пример JSON; message зависит от фактической причины · 409 · 30014
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30014", "message": "Provider instance is missing" } }- provider_not_ready · 30015 · 409
Среда выполнения провайдера остановлена. Перед запуском выясните, не было ли это намеренным; остановка сама по себе не означает выход из аккаунта.
Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.
Каналы: WhatsApp
Пример JSON; message зависит от фактической причины · 409 · 30015
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30015", "message": "Provider runtime is stopped" } }- send_message_failed · 20020 · 500
Проверьте account_id и используйте X-Api-Key рабочего пространства владельца аккаунта. Текущий ключ не даёт доступа к аккаунту, которого нет в этом пространстве.
Условие: Применяется, когда аккаунт не найден: прежние HTTP-статус и код операции сохраняются, а numeric_code уточняет отсутствие аккаунта.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 500 · 20020
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "20020", "message": "Account not found" } }- send_message_failed · 30010 · 500
Провайдер не выполнил операцию. message может содержать исходную причину после «Provider operation failed:»; текст меняется и не является стабильным программным интерфейсом.
Условие: Применяется, когда канал не сообщает более точную категорию сбоя; сохраняется ошибка текущей операции.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Каналы: WhatsApp
Пример JSON; message зависит от фактической причины · 500 · 30010
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "30010", "message": "Provider operation failed" } }- send_message_failed · 36001 · 500
Не удалось отправить сообщение или подтвердить результат отправки.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Пример · 500 · 36001
{ "request_id": "req_sticker_prepare_failed_example", "error": { "code": "send_message_failed", "numeric_code": "36001", "message": "download sticker: media download returned HTTP 503" } }- unsupported_by_provider · 30003 · 501
Канал не поддерживает операцию; выберите доступную в таблице возможностей.
Действия и повторы: Выберите поддерживаемые канал и действие. Повтор запроса не добавит возможностей и не откроет доступ к бета-функциям.
Пример · 501 · 30003
{ "request_id": "req_xxx", "error": { "code": "unsupported_by_provider", "numeric_code": "30003", "message": "Operation not supported by this provider" } }- provider_adapter_not_found · 30004 · 502
Сервис канала недоступен. Проверьте состояние или повторите позже; перед повтором записи проверьте предыдущий результат.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Пример JSON; message зависит от фактической причины · 502 · 30004
{ "request_id": "req_example", "error": { "code": "provider_adapter_not_found", "numeric_code": "30004", "message": "Provider adapter unavailable" } }- provider_unavailable · 20102 · 502
При синхронной отправке WhatsApp выявлено ограничение входа: HTTP 502, provider_unavailable, 20102. В событии сбоя WhatsApp та же числовая причина имеет code=account_restricted. Сам HTTP-ответ не обновляет состояние аккаунта и не создаёт дополнительное событие.
Действия и повторы: Остановите автоматическую отправку и повторы. Попросите пользователя проверить и устранить ограничение в официальном приложении WhatsApp. Возобновляйте работу после устранения и необходимой повторной авторизации. Прежний running не доказывает снятие ограничения.
Каналы: WhatsApp
Пример · 502 · 20102
{ "request_id": "req_example_whatsapp_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "20102", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30002 · 502
Сервис канала недоступен. Проверьте состояние или повторите позже; перед повтором записи проверьте предыдущий результат.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Пример · 502 · 30002
{ "request_id": "req_example_provider_unavailable", "error": { "code": "provider_unavailable", "numeric_code": "30002", "message": "Provider service unavailable" } }- provider_unavailable · 30010 · 502
Провайдер не выполнил операцию. message может содержать исходную причину после «Provider operation failed:»; текст меняется и не является стабильным программным интерфейсом.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Каналы: WhatsApp
Пример · 502 · 30010
{ "request_id": "req_example_message_failed", "error": { "code": "provider_unavailable", "numeric_code": "30010", "message": "Provider operation failed: Example operation could not be completed" } }- provider_unavailable · 30019 · 502
Платформа явно ограничила отправку сообщения: HTTP 502, provider_unavailable, 30019. Это не доказывает постоянную блокировку аккаунта и не задаёт время снятия ограничения.
Действия и повторы: Остановите автоматические повторы при таком ограничении отправки. Возобновляйте отправку только после подтверждённого снятия ограничения; фиксированного срока нет, сама ошибка не требует повторной авторизации.
Каналы: WhatsApp
Пример · 502 · 30019
{ "request_id": "req_example_message_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30019", "message": "Message sending is restricted by the platform" } }- provider_unavailable · 30020 · 502
Синхронный запрос whatsapp-protocol выявил ограничение входа с numeric_code=30020. Это может затронуть импорт сессии, runtime, отправку и запросы контактов; HTTP-статус и code текущей операции сохраняются. Не переносите на этот канал контракт событий WhatsApp с 20102.
Действия и повторы: Остановите автоматическую отправку и повторы. Попросите пользователя проверить и устранить ограничение в официальном приложении WhatsApp. Возобновляйте работу после устранения и необходимой повторной авторизации. Прежний running не доказывает снятие ограничения.
Каналы: WhatsApp Protocol
Пример · 502 · 30020
{ "request_id": "req_example_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30020", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30021 · 502
Во время операции WhatsApp не был подключён. Исходный текст ошибки соединения сохраняется. Это не доказывает выход или недействительную авторизацию и не запускает переподключение, повторную отправку либо изменение состояния аккаунта.
Действия и повторы: Приостановите операции, которым нужно соединение. Сначала вызовите POST /v1/accounts/{account_id}/runtime/refresh, восстановите соединение по актуальному состоянию и подтвердите runtime_status=running перед бизнес-запросами. Перед повторной отправкой выясните результат предыдущей записи.
Каналы: WhatsApp
Пример · 502 · 30021
{ "request_id": "req_example_connection_disconnected", "error": { "code": "provider_unavailable", "numeric_code": "30021", "message": "example operation: websocket not connected" } }- provider_unavailable · 34012 · 502
Для отправки в эту группу WhatsApp аккаунту нужны права администратора. Сначала измените его роль в группе; не повторяйте запрос без изменений.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Каналы: WhatsApp
Пример · 502 · 34012
{ "request_id": "req_example_group_admin_required", "error": { "code": "provider_unavailable", "numeric_code": "34012", "message": "Group administrator privileges are required to send messages to this group" } }