WebHook API

получение событий от системы

Приложение может отправлять события на ваш сервер, такие как изменение статуса заказа или информацию о том, что в системе изменилось меню.

Настройка

Для включения необходимо создать интеграцию на странице "Настройки - Интеграции" с типом "Интеграция по API". В настройках интеграции указать ключ авторизации (он будет отправлен вам в header Authorization, чтобы вы понимали что запрос пришел от нас) и указать URL-адреса, на которые нужно отправлять те или иные события. Если для события указан адрес, на него будет отправляться событие, если адрес не указан, то соответственно ничего отправляться не будет.

Например, если вы указали адрес https://example.ytimes.ru/notification/menu/update для событий изменений меню, на него будут поступать запросы всякий раз, когда кто-то в личном кабинете YTimes будет менять настройки меню.

В теле запроса будет передаваться JSON, соответствующий событию. В поле eventId будет передаваться UUID события - это ключ идемпотентности, чтобы повторные запросы не приводили к дублированию на вашей стороне.

При успешной обработке события ваш сервер должен ответить кодом 200 и в теле ответа отправить "OK". Мы будем отправлять событие каждые 5 минут до тех пор пока ваш сервер не примет событие. Если в течение 48 часов успешного ответа не получено, отправка события отменяется.

Статус заказа, созданного по API

POST {your url}/remote-order/status

Передает информацию и принятии или отмене заказа (созданного через API) кассиром. event guid - идентификатор заказа. status - может принимать значения CANCELLED или ACCEPTED.

Headers

NameTypeDescription

Authorization

string

Bearer {your key}

Request Body

NameTypeDescription

body*

string

{ "eventId": "ключ идемпотентности", "guid" : "885188cd-d0ee-4444-919e-4f063359dff7", "status" : "CANCELLED", "statusMessage" : "Отсутствуют позиции в наличие" }

OK

Событие изменения меню

POST {your base url}/menu/changed

Информация о том, что в системе изменились настройки меню. После этого необходимо запросить с сервера актуальную версию меню. В событии отправляется тип меню, который был изменен. Возможные варианты: MENU_GROUP, MENU_ITEM, SUPPLEMENT_GROUP, SUPPLEMENT, COMBO

Headers

NameTypeDescription

Authorization

string

Bearer {your key}

Request Body

NameTypeDescription

body*

string

{ "eventId": ключ идемпотентности "type": тип меню, которое изменилось }

OK

Изменение анкеты карты гостя

POST {your base url}/client/update

Если анкету базы клиентов изменили (включая изменение бонусного баланса), то срабатывает данное событие.

Headers

NameTypeDescription

Authorization

string

Bearer {your key}

Request Body

NameTypeDescription

body*

string

{ eventId: ключ идемпотентности

dateTimeUTC: дата/время события по UTC phoneCode: телефонный код страны, например 7 для РФ phone: телефон

number: номер карты гостя (целое число) name: имя гостя surname: фамилия гостя email: электронная почта birthday: день рождения sex: пол comment: комментарий к карте isAgreeToNotification: наличие согласия на получение рассылки (true/false)

excludeAddPoints: если true, данному гостю нельзя начислять бонусы (true/false) pointsValue: текущий баланс гостя на момент события (double) pointsChange: изменение баланса гостя в результате события (double) pointsChangeComment: комментарий к изменению баланса гостя

statVisitCount: общее кол-во посещений (int) statPayValue: общая оплаченная сумма (double) statLastMonthVisitCount: количество посещений в прошлый месяц (int) statLastMonthPayValue: сумма оплаты в прошлый месяц (double) statCurrentMonthVisitCount: количество посещений в текущий месяц (int) statCurrentMonthPayValue: сумма оплаты в текуший месяц (double) }

OK

Пример контроллера для приема событий

@Controller
@RequestMapping("/public/exapi/webhook/")
public class ExWebHookTestController {


    @RequestMapping("/menu/changed")
    @ResponseBody
    public String menuChanged(@RequestHeader(required = false) String Authorization,
                              @RequestBody(required = false) Map body) {
        //check auth header
        //do something
        return "OK";
    }

    @RequestMapping("/order/status")
    @ResponseBody
    public String orderStatus(@RequestHeader(required = false) String Authorization,
                              @RequestBody(required = false) Map body) {
        //check auth header
        //do something
        return "OK";
    }

}

Last updated