Перейти к основному содержимому

Ошибки

Как выглядит ошибка

Ответ об ошибке несёт человеческий текст и машинный код:

{
"error": "у ключа нет права subscribers:write",
"code": "forbidden_scope",
"Error": "у ключа нет права subscribers:write"
}
  • error — что случилось, словами. Можно показать пользователю.
  • code — по нему ветвится код: он не меняется от версии к версии, в отличие от текста.
  • Error — то же самое, что error. Оставлено для старых интеграций: раньше ошибка приходила именно в этом поле.
У методов первой очереди формат прежний

Каталог, календарь, прокси и другие методы первой очереди отвечают как раньше — полем Error без машинного кода. Ошибки авторизации и превышения частоты у них теперь приходят в новом формате, но со старым полем внутри.


Коды ответа

КодПричинаЧто проверить
401Ошибка авторизацииПередан ли ключ: заголовок Authorization, X-Api-Key или параметр key. Не отозван ли ключ и не истёк ли его срок
403Нет доступаУ ключа нет нужного права, либо аккаунт выключен, либо возможность не входит в тариф
404Не найденоБот, подписчик, список, цепочка или строка с такими параметрами не существуют
409Так нельзяДействие противоречит состоянию: цепочка выключена, подписчик заблокировал бота, ключ идемпотентности переиспользован
422Ошибка в параметреПереданы ли все обязательные параметры метода. Сверьтесь со схемой запроса
429Превышена частотаНе больше 10 запросов в секунду. Загляните в заголовок Retry-After
500, 502Сбой на нашей сторонеПовторите позже. Если повторяется — напишите в поддержку и приложите время запроса

Машинные коды

Авторизация и права

codeЗначение
unauthorizedключ не передан или не найден
key_revokedключ отозван
key_expiredсрок действия ключа истёк
forbidden_scopeу ключа нет нужного права
account_offаккаунт выключен
rate_limitслишком часто
tariffвозможность не входит в тариф

Параметры

codeЗначение
no_botid, no_clientidне указан бот или подписчик
no_bot, no_subscriberбот или подписчик не найдены
many_botsв аккаунте несколько ботов этого мессенджера — уточните botid
no_list, no_rowсписок или строка не найдены
no_chain, no_message, no_blockцепочка, шаг или блок не найдены
no_text, no_row, no_where, no_sumне передано то, без чего метод бессмыслен
bad_scope, bad_event, bad_urlзначение не из допустимого набора

Состояние

codeЗначение
subscriber_offподписчик отключён
subscriber_blockedподписчик заблокировал бота
chain_offцепочка выключена
chain_emptyв цепочке нет включённых шагов
not_scenarioшаг не сценарий, блоков в нём нет
no_active_chainу подписчика нет запущенных цепочек — переменной негде жить
idempotency_conflictтот же Idempotency-Key пришёл с другими параметрами
list_exists, stage_existsтакое название уже занято

Как обрабатывать

Стратегия в боте

В сценариях действий после вызова метода API сохраняйте JSON-ответ и HTTP-статус в переменные — это позволит ветвить логику по коду ошибки и показывать пользователю осмысленное сообщение вместо общей «что-то пошло не так».

Защита от 429

Не запускайте API-вызовы в цикле без задержек. Для массовых операций используйте методы, рассчитанные на пачку: /list/rows/add принимает до 500 строк за раз, /broadcast/send рассылает по сегменту одним запросом, а внутри бота есть массовые операции и Списки.

Повторяйте безопасно

Если запрос оборвался и вы не знаете, дошёл ли он, повторяйте с тем же заголовком Idempotency-Key — второй записи не появится. См. Авторизация.