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 долго: отправитель считает это сбоем и начинает повторять.