Webhook

A mechanism for automatically sending data from one system to another when an event occurs. For example, a webhook can send a Telegram notification when a new order arrives. Unlike API, webhooks work in push mode, not pull.

В чём разница с обычным запросом

При обычном обращении к API ваша система спрашивает: «появились новые заказы?» — и так каждые несколько секунд. Webhook переворачивает схему: как только событие произошло, отправитель сам стучится по заданному адресу и приносит данные. Для доставки это и есть разница между «статус обновляется примерно» и «статус обновляется сразу». Опрос по расписанию всегда опаздывает ровно на интервал опроса.

Где это важно в доставке

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

Как это устроено в Delever

События в Delever передаются между контурами по мере возникновения: оплата из платёжного шлюза, статус из кассы, смена статуса курьером в приложении, ответ внешней службы доставки. Глубина и мгновенность обмена зависят от того, что отдаёт конкретная система: часть касс и шлюзов из пятидесяти с лишним интеграций присылают события сами, часть приходится опрашивать — тогда задержка определяется их стороной, и мы не выдаём её за мгновенную.

Частые ошибки

Первая — не обрабатывать повторы. Отправитель при сбое присылает событие заново, и без защиты один заказ попадает в кассу дважды. Вторая — не проверять подпись запроса: адрес webhook открыт в интернет, и без проверки туда можно прислать что угодно. Третья — отвечать на webhook долго: отправитель считает это сбоем и начинает повторять.

FAQ

Что будет, если наш сервер был недоступен в момент события?

Это зависит от отправителя: большинство систем повторяют доставку события несколько раз с увеличивающимся интервалом, часть — нет. Поэтому критичные состояния надо уметь досверять запросом, а не рассчитывать только на webhook.

Можно ли обойтись без webhook?

Можно, через опрос по таймеру. Цена — задержка на интервал опроса и лишняя нагрузка. Для стоп-листов и оплат эта задержка оборачивается проданными позициями, которых нет.

Нужен ли для webhook публичный адрес?

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