Справочник API

Сообщения

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

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

POSThttps://api.unifyport.ai/v1/messages

Поддерживаемые каналы

all

Перед вызовом

Используйте 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-Key
stringобязательно

API-ключ рабочей области. Рабочая область определяется по этому заголовку.

Content-Type
stringобязательно

Используйте application/json при отправке JSON-тела запроса.

Тело запроса

provider_data
object

Опции отправки провайдера, действующие только для поддерживаемых провайдеров и типов сообщений. seconds для WhatsApp audio/video — неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295, waveform — только для audio. Для ответа с цитатой используйте reply_to верхнего уровня, если он поддерживается. Для sticker поле provider_data нужно опустить или передать пустой объект; не объект возвращает 400 invalid_request, непустой объект — 400 provider_invalid_request.

seconds
integer

Необязательная длительность сообщений WhatsApp audio и video в секундах как неотрицательное целое. Только для video допустим диапазон от 0 до 4294967295.

minimum: 0

waveform
string

Необязательные данные waveform для сообщений WhatsApp типа audio. Непустые значения должны использовать стандартную кодировку Base64 и после декодирования быть разбираемыми JSON-данными waveform; пустая строка считается отсутствием значения, а другие ошибки формата возвращают HTTP 400 provider_invalid_request.

account_id
stringобязательно

Аккаунт провайдера, отправляющий сообщение.

minLength: 1

to
objectобязательно

Получатель: id и type.

id
stringобязательно

Идентификатор получателя на стороне провайдера.

minLength: 1

type
stringобязательно

Стандартный тип беседы: user, group или channel. Группы объявлений сообщества WhatsApp по-прежнему используют group.

enum: user, group, channel

message
objectобязательно

Нормализованный payload сообщения. Текст — message.text, медиа — message.url.

type
stringобязательно

Тип сообщения: text, image, video, audio, document, file, contact, link_preview, poll или sticker.

enum: text, image, video, audio, document, file, contact, link_preview, poll, sticker

text
string

Непустой текст, обязательный для text и link_preview. Для link_preview нужен хотя бы один непробельный символ; WhatsApp также требует включить в текст link_preview.url без изменений.

minLength: 1

caption
string

Необязательная подпись для image, video, document или file.

url
string

Непустой абсолютный HTTP(S) URL; медиа требует url, file_url или file_key.

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://

file_url
string

Непустой альтернативный абсолютный HTTP(S) URL; медиа требует один источник.

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://

file_key
string

Непустая ссылка на файл провайдера или хранилища; медиа требует один источник.

contacts[]
object[]

Непустой массив карточек, обязательный при message.type=contact.

minItems: 1

name
string

Непустое отображаемое имя, обязательное для каждой карточки.

minLength: 1

phones[]
object[]

Телефонные номера в карточке контакта.

number
string

Номер телефона; обязателен для каждой записи phone.

type
string

Необязательная метка телефона, например CELL или WORK.

emails[]
object[]

Адреса электронной почты в карточке контакта.

address
string

Адрес электронной почты; обязателен для каждой записи email.

format: email

type
string

Необязательная метка электронной почты, например WORK или HOME.

organization
string

Необязательное название организации контакта.

title
string

Необязательная должность контакта.

link_preview
object

Обязателен вместе с text только для message.type=link_preview; нельзя смешивать с другими данными сообщения. Общая структура требует только url; необязательные title и description допускают пустую строку, но не null. Политика отправки WhatsApp в этом API требует непустые title/image_url и ограничивает title до 255, а description до 1024 символов Unicode.

url
string

Обязательная целевая ссылка: абсолютный HTTP(S) URI с именем хоста без пробельных символов; в квадратных скобках допустимы только литералы IPv6. Сохраняется без изменений; доступность ресурса не гарантируется.

pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)

title
string

Необязательный заголовок предпросмотра; пустая строка допустима, null запрещён. WhatsApp требует непустое значение длиной до 255 символов Unicode.

description
string

Необязательное описание предпросмотра; пустая строка допустима, null запрещён. WhatsApp допускает до 1024 символов Unicode.

image_url
string

Необязательный URI изображения; для WhatsApp обязателен и не может быть пустым. Нужен абсолютный HTTP(S) URI с именем хоста без пробельных символов; в квадратных скобках допустимы только литералы IPv6. Сохраняется без изменений; доступность ресурса не гарантируется.

pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)

poll
object

Обязателен только для message.type=poll; нельзя смешивать с text или другими данными сообщения. Требуются question, options и max_selections. Вопрос и заголовки вариантов сохраняются без изменений. Общая структура не ограничивает длину вопроса, максимальное число вариантов или повторение заголовков; провайдеры могут вводить дополнительные ограничения.

question
string

Обязательный вопрос опроса с хотя бы одним непробельным символом; сохраняется без изменений.

minLength: 1 · pattern: \S

options[]
object[]

Обязательный массив минимум из двух вариантов, каждый с title.

minItems: 2

title
string

Обязательный заголовок варианта с хотя бы одним непробельным символом. Отправляется без trim, изменения регистра или нормализации Unicode.

minLength: 1 · pattern: \S

max_selections
integer

Обязательное максимальное число выбираемых вариантов на одного участника, не число участников. Целое от 1 до количества options, проверяемое API. Числа с целым значением, например 1.0 и 1e0, равны 1; дробные значения недопустимы.

minimum: 1

reply_to
object

Цель цитирования. Скопируйте data.message.reply_token из события цитируемого сообщения или data.reply_token из ответа на отправку в reply_to.reply_token без изменений, используя исходные аккаунт и диалог; не заменяйте ID сообщения.

reply_token
string

Непрозрачный дескриптор из data.message.reply_token события цитируемого сообщения или data.reply_token ответа на отправку. Используйте без изменений с исходными аккаунтом и диалогом; не заменяйте ID сообщения.

minLength: 1

mentions[]
object[]

Список целей @ для группового сообщения. type=member использует соответствующий id участника Provider; type=all означает @всех и действует только при поддержке Provider, иначе возвращается unsupported_message_type.

type
string

Тип цели @. Если опустить, для совместимости со старыми запросами считается member; type=member требует id, а type=all передается без id и применим только к групповым чатам.

enum: member, all

id
string

Идентификатор участника 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
string

Идентификатор сообщения UnifyPort (msg_...) для принятого сообщения.

account_id
string

Аккаунт провайдера, к которому относится этот ответ.

status
string

Статус приёма; accepted означает, что сообщение поставлено в очередь на доставку провайдеру.

provider_ref
string

Ссылка на сообщение на стороне провайдера, как только провайдер её назначит.

reply_token
string

Необязательный непустой непрозрачный дескриптор WhatsApp после успешной отправки при полном контексте цитирования, включая новые опросы, которые можно цитировать обычным текстом. Если недоступен, опускается без изменения статуса accepted. Используйте без изменений с исходным аккаунтом и диалогом; это не ID сообщения.

minLength: 1

Ответы

200

200 OK

Запрос выполнен. См. пример тела ответа.

400

Bad Request

Тело запроса, путь или параметры некорректны.

401

Unauthorized

Заголовок X-Api-Key отсутствует или недействителен.

403

Forbidden

Запрос распознан, но операция запрещена.

404

Not Found

Запрошенный ресурс не найден. Сверьте error.code с текущей операцией.

409

Conflict

Запрошенная операция конфликтует с существующим аккаунтом провайдера или ресурсом.

500

Internal Server Error

Сервис столкнулся с неожиданной ошибкой.

501

Not Implemented

Выбранный провайдер не реализует эту операцию.

502

Bad 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"
  }
}