Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Вебхук Битрикс24 не работает: разбор ответов

Ошибку REST API определяют по составу полей в теле ответа, а не по HTTP-статусу: со статусом 200 приходят ошибки подзапросов пакета batch. Если в теле есть error и error_description — вызов не выполнен. Если непустое result.result_error — пакет принят, но часть подзапросов упала.

Вебхук не найден или не авторизован

  • INVALID_CREDENTIALS (401) — активного вебхука с такой парой «идентификатор пользователя и секретный код» нет. Проверьте адрес целиком: чаще всего в нём лишний или потерянный символ, либо вебхук удалили.
  • NO_AUTH_FOUND (401) — в запросе вообще нет кода вебхука.
  • INVALID_REQUEST, Https required — вызов ушёл по http.
  • ACCESS_DENIED — REST недоступен на текущем тарифе; у вебхука текст звучит как REST is available only by subscription.
  • insufficient_scope — вебхуку не выдали право, которое нужно методу. Права правят в настройках самого вебхука.
  • ERROR_METHOD_NOT_FOUND (404) — опечатка в имени метода либо отсутствующее право.
  • PORTAL_DELETED (403) — в коробке закрыта публичная часть сайта. Пока она закрыта, REST не ответит.

Отдельно стоит OVERLOAD_LIMIT (401): это ручная блокировка REST за перегрузку. Сама она не снимется, повторять вызовы бессмысленно — нужно обращение в поддержку вендора.

Два лимита, о которые разбиваются выгрузки

Интенсивность запросов. Работает по принципу протекающего ведра: каждый вызов добавляет единицу к счётчику, счётчик убывает со своей скоростью. На обычных тарифах это 2 запроса в секунду при пороге 50, на Энтерпрайзе — 5 в секунду при пороге 250. Короткий всплеск допустим, постоянное превышение — нет: за порогом приходит 503 и QUERY_LIMIT_EXCEEDED. Лимит считается на портал, поэтому две интеграции с одного сервера делят его между собой.

Ресурсоёмкость. У каждого метода накапливается время выполнения — поле operating в блоке time ответа. Учёт идёт десятью минутными корзинами; когда накопленное время превышает лимит, следующий вызов этого метода блокируется с 429 и кодом OPERATION_TIME_LIMIT. Блокируется только этот метод для этого вебхука, остальное работает. Когда делать повторную попытку, подсказывает operating_reset_at из последнего успешного ответа.

Для масштаба: 2 запроса в секунду — это 172 800 вызовов в сутки, а списочные методы отдают по 50 записей за раз. Для большинства выгрузок этого достаточно, если не запускать их в десять потоков.

Пакет batch

В один batch помещается до 50 вызовов, и это главный способ не превышать интенсивность: один HTTP-запрос вместо пятидесяти. Ресурсоёмкость вложенных методов он не отменяет. Подзапросы сверх пятидесяти получают ERROR_BATCH_LENGTH_EXCEEDED, а метод, который нельзя выполнить в пакете, — ERROR_BATCH_METHOD_NOT_ALLOWED. Ошибка подзапроса приходит по тому же ключу, под которым команда передана.

Коробочная версия

В коробке лимиты другие: интенсивность и нагрузку настраивает администратор, а лимит ресурсоёмкости по умолчанию выключен — при включении он равен 420 секундам и меняется в настройках модуля REST. Время выполнения запроса зависит от настроек сервера, тогда как в облаке запрос обрывается на 60 секундах.

Чего не делать

  • Не повторять вызов, который вернул ошибку метода: ответ будет тот же, сначала правят запрос.
  • Не ветвить логику по тексту error_description — он меняется и зависит от языка.
  • Не писать код вебхука в журналы: по нему получают доступ к данным портала. В журнал идут код ошибки, описание, статус и имя метода.

Проверяли по первоисточнику: документация REST API Битрикс24

Частые вопросы

Вебхук работал, после смены сотрудника перестал.

Вебхук привязан к пользователю, который его создал, и работает с его правами. Уволили сотрудника — вебхук перестал отвечать. Поэтому вебхуки для интеграций создают от учётной записи, которая не уйдёт вместе с человеком.

Выгрузка падает на середине с кодом 503.

Это QUERY_LIMIT_EXCEEDED — превышена интенсивность запросов. Снизьте частоту, повторяйте с нарастающей задержкой и не запускайте параллельные серии: лимит считается на портал целиком, а не на вашу программу.

Один метод заблокирован, остальные работают.

Так выглядит OPERATION_TIME_LIMIT со статусом 429: превышен лимит ресурсоёмкости для этого метода у этого вебхука. Блокировка снимается сама, ориентир для повторной попытки — поле operating_reset_at из последнего успешного ответа.