Создание заказа с лояльностью
Введение
В этой статье рассматривается сценарий применения бонусов и скидок системы лояльности к заказу на сайте ресторана.
Основы взаимодействия сайта ресторана с r_k Delivery описаны в статьях Возможности API.
Базовый сценарий создания заказа с бонусами лояльности:
- Получение предрасчета заказа
- Создание заказа
- Заказ передается на кассу вручную или автоматически
- К заказу применяется лояльность на кассе.
Предварительные настройки
- Настройте заведение в r_k Delivery
- Настройте интеграцию с r_k Loyalty
- Настройте подключение по API для бэкенда сайта или бэкенда приложения ресторана
Подключите на сайте авторизацию гостей по номеру телефона.
Авторизация гостей по номеру телефона необходима для связи с базой гостей в r_k Delivery и r_k Loyalty, а также для идентификации пользователя на сайте: так вы сможете контролировать, чтобы гость использовал именно свои бонусы, а не чужие.
Метод предрасчета
Для получения данных о лояльности гостя, необходимо использовать метод предварительного расчета заказа. Этот метод должен использоваться после заполнения деталей заказа: состава, способа доставки и пр. и авторизации гостя.
Запрос:
Пример запроса:
Пример данных тела запроса:
Параметр | Тип параметра | Описание |
---|---|---|
dishList | array | состав заказа |
-id | string | id блюда(формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой |
-name | string | наименование блюда |
-price | double разделителем всегда будет точка - "." | цена блюда |
-discount | double | скидка |
-measure | мера | |
--value | double | размер порции |
--unit | string | единица измерения: кг, литр, шт. Значение не словарное |
-quantity | double разделителем всегда будет точка - "." | количество блюд |
-ingredients | array | ингредиенты |
--id | string | id ингредиента (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой |
--name | string | наименование ингредиента |
--price | double разделителем всегда будет точка - "." | цена ингредиента |
--quantity | double разделителем всегда будет точка - "." | количество ингредиента |
--ingredients | array | модификаторы |
---id | string | id модификатора (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой |
---name | string | наименование модификатора |
---price | double разделителем всегда будет точка - "." | цена модификатора |
---quantity | double разделителем всегда будет точка - "." | количество модификатора |
-isListStoped | string | находится ли в стоп-листе |
address | адрес доставки В случае самовывоза принимает значение null. Пример параметров при указании адреса читайте в статье Создание заказа | |
expectedAt | DateTime | время к которому ожидается заказ |
soonest | bool | привезти заказа как можно скорее Если принимает значение true, то значение параметра expectedAt можно не отправлять: система рассчитает его автоматически. Если принимает значение false, то параметр expectedAt — обязателен |
useLoyalty | bool | использование лояльности в заказу Принимает значение true – если лояльность используется. Принимает значение false – если не используется. |
restaurantId | string | id ресторана |
phone | string | номер телефона гостя |
expeditionType | string | тип доставки |
useLoyaltyBonusPayments | string | списание бонусов лояльности |
orderId | string | id заказа |
manualDiscounts | ручные скидки В случае применения лояльности параметр не используется. О применении ручных скидок читайте статье Создание заказа с кассовой скидкой. | |
loyaltyPromo | string array | Список промокодов для применения |
Параметры, отвечающие за лояльность:
- useLoyalty — указывает, собирается ли гость использовать программу лояльности
- useLoyaltyBonusPayments — указывает, собирается ли гость использовать бонусы лояльности
- phone — номер телефона гостя. Это главный параметр, отвечающий за связь заказа с программой лояльности, так как r_k Loyalty идентифицирует гостя по номеру телефона.
Накопление или списание бонусов
Пример ответа метода предрасчета, если происходит накопление или списание бонусов по программе лояльности:
где:
- loyaltyAmount — блок, содержащий данные о лояльности
- totalAmount — общая сумма заказа
- loyaltyDiscountAmount — общая сумма скидки на заказ, включая бонусы, если они будут списаны
- bonuses — блок, отвечающий за данные о бонусах гостя
- guestBalance — текущий баланс бонусов гостя
- rankName — текущий ранг гостя.
- maxBonusesForPayment — максимальное количество бонусов, доступных к списанию у данного гостя
- accrualWithPayment — сколько бонусов будет накоплено, если будет списание бонусов в данном заказе
- accrualWithoutPayment — сколько бонусов будет накоплено, если не будет списания бонусов в данном заказе.
Скидка по программе лояльности
Пример ответа метода предрасчета, если может быть применена скидка по программе лояльности:
где:
- loyaltyAmount — блок, содержащий данные о лояльности
- totalAmount — общая сумма заказа
- loyaltyDiscountAmount — общая сумма скидки на заказ, включая бонусы, если они будут списаны
- loyaltyPrograms[] — блок данных о сработанной акции
- programName — название акции
- programNotification[] — сообщение о скидке, которое задается в административной панели r_k Loyalty.
Скидка по промокоду
Пример ответа метода предрасчета, если может быть применена скидка по промокоду лояльности:
где:
- loyaltyAmount — блок, содержащий данные о лояльности
- totalAmount — общая сумма заказа
- loyaltyDiscountAmount — общая сумма скидки на заказ, включая бонусы, если они будут списаны
- loyaltyPrograms[] — блок данных о сработанной акции
- programName — название акции
- programNotification[] — сообщение о скидке, которое задается в административной панели r_k Loyalty.
Создание заказа
После уточнения деталей заказа и срабатывания метода предрасчета, необходимо создать заказ.
Пример запроса:
Пример данных тела запроса:
где
- loyaltyCalculation — блок данных, полученных в методе предрасчета заказа в блоке loyaltyAmount.
Подробнее о запросе и параметрах читайте в статье Создание заказа.
Пример ответа:
где orderId — это номер заказа.
Редактирование заказа
Чтобы отредактировать заказ после его создания, необходимо сбросить предварительный расчет заказа. Если этого не сделать, то могут возникнуть проблемы с заморозкой бонусов гостя. Для сброса предрасчета используйте метод:
где orderId — это номер заказа, который был получен в ответе на метод создания заказа. Например, 123, как в ответе выше.
Тело запроса — пустое.
Далее сделайте запрос предрасчета с номером заказа. Пример запроса:
Только после повторного запроса предрасчета можно приступать к редактированию заказа. Пример метода запроса редактирования заказа:
Пример тела запроса:
где
- loyaltyCalculation — блок данных, полученных в последнем методе предрасчета заказа в блоке loyaltyAmount.
Подробнее о запросе и параметрах читайте в статье Изменение заказа.