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

Событие отброшенных событий веб-хука

[OnWebhookEventsDropped] События веб-хука сверх лимита пачки​

Доступно с версии 3.9.0

На более ранних версиях событие не вызывается, а лишние события пропадают без записи в лог.

Один POST-запрос веб-хука МойСклад может нести несколько событий (массив events). За один запрос модуль обрабатывает не больше событий, чем задано в настройке «Количество событий за раз» на вкладке «Веб-хуки» (webhook_limit_count, по умолчанию 5). Всё, что сверх лимита, в каталог не попадает.

Раньше такие события терялись молча. Теперь модуль:

  1. пишет в лог модуля блок «Вебхук: события сверх лимита пачки не обработаны» — сколько событий отброшено из скольких и по строке на каждое: тип сущности, действие, ссылка (не больше 100 строк, остаток — одной строкой «…и ещё событий: N»);
  2. отдаёт отброшенные события вашему коду событием OnWebhookEventsDropped.
Это редкая ситуация

В обычной работе МойСклад присылает одно событие на запрос, даже при массовом изменении товаров. Событие страхует от пачек, которые всё-таки пришли, а сами изменения в любом случае подхватит плановый агент импорта.

Что модуль гарантирует и чего нет​

Событие вызывается до разбора событий пачки — сразу после проверки соли и того, что обмен включён. Поэтому в него попадают отброшенные события любых типов: и шести штатных (product, variant, bundle, service, productfolder, specialpricediscount), и сущностей, объявленных в реестре OnBuildWebhookEntityList.

Отброшенные события не проверены

Модуль их не разбирал: ни проверки href на принадлежность API МойСклад, ни нормализации домена, ни проверки действия, ни дедупликации к ним не применялось. Элементы массива events приходят ровно такими, какими были в теле запроса, — это недоверенные данные. Прежде чем обращаться по meta->href, проверьте адрес сами, например \Rbs\MoyskladStocks\ApiNew::isAvailableUrl($href) — предварительно приведя домен вызовом \Rbs\MoyskladStocks\ApiNew::replaceOldDomain($href).

Исключение обработчика не обрывает приём

Модуль перехватывает исключение обработчика и пишет его текст в тот же блок лога. Обработчики, зарегистрированные после упавшего, в этом запросе не вызываются. Результат обработчика не читается.

Параметры события

ПараметрТипОписание
eventsarrayОтброшенные элементы events из тела веб-хука, как они пришли от МойСклад
limitintЛимит событий на один запрос, действовавший в момент приёма
totalintСколько событий было в запросе всего

Число отброшенных — count($events), то есть total - limit.

Возвращаемое значение

Ничего возвращать не нужно — результат не читается.