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

Webhook'и

Если владелец ресторана зарегистрирует ваш адрес (в Sitora Biz, рядом с учётными данными), Sitora будет отправлять подписанные события по мере их возникновения. Webhook’и необязательны; контроллер, который только опрашивает, полностью соответствует требованиям.

Адреса должны быть HTTPS и разрешаться в публичный адрес. Sitora отказывает в регистрации — и в доставке — для обычного HTTP, URL со встроенными учётными данными и хостов, разрешающихся в loopback, приватные или link-local диапазоны. Редиректы не отслеживаются: публикуйте конечный URL.

Событие Когда срабатывает
serving_task.offered Вашему парку предложена новая задача.
serving_task.cancelled Задача, которую вы могли выполнять, отменена Sitora.
serving_task.expired Предложение истекло непринятым.
robotics.paused Робототехника филиала приостановлена.
robotics.resumed Робототехника филиала возобновлена.

Тело webhook’а идентифицирует задачу и её новое состояние — и ничего больше:

{
"delivery_id": 4412,
"event_type": "serving_task.offered",
"created_at": "2026-08-06T18:20:05.412Z",
"payload": {
"task_id": 8871,
"display_number": 42,
"leg": "dine_in_tray",
"status": "offered",
"expires_at": "2026-08-06T18:22:05.412Z"
}
}

Манифест намеренно отсутствует. Webhook’и уходят на URL, который ввёл владелец ресторана, и сохраняются как записи доставки, поэтому назначение — адрес гостя на курьерских этапах — в этот канал не помещается. Дополните задачу через GET /serving-tasks/, где ваши учётные данные проверяются при каждом чтении. robotics.paused / robotics.resumed несут только filial_id.

Каждая доставка несёт:

X-Sitora-Robotics-Signature: t=<unix_timestamp>,v1=<hex>

где v1 — это HMAC_SHA256(secret, "{t}.{body}"), а secret — секрет webhook’а, показанный один раз при регистрации. Проверяйте сравнением за постоянное время и отклоняйте устаревшие метки времени (нескольких минут допуска достаточно), чтобы исключить повторное воспроизведение.

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

  • Webhook’и — оптимизация задержки, а не правда. По любому событию сверяйтесь опросом — контрактом является список задач.
  • Пропущенные или сомнительные события можно перечитать через GET /webhook-deliveries/?since_id=<последний виденный id>, а отдельную доставку можно переслать через POST /webhook-deliveries/{id}/redeliver/.
  • Отвечайте 2xx быстро и делайте работу асинхронно; медленный адрес — это провалённая доставка.