Skip to main content

Завдання на реалізацію обміну даних між Касовою системою та АВМ Loyalty

Суть завдання - організувати регулярний автоматичний (без участі людини) обмін даними між касовою системою Клієнта та системою лояльності АВМ Loyalty.

Загальна інформація:

В систему АВМ Loyalty передаютьсявсі транзакції, як ідентифіковані, і неідентифіковані.

Обмін даними між касовою системою та системою АВМ Loyalty повинен бути реалізований в двох режимах:

  • Онлайн- взаємодія каси та системи АВМ Loyalty відбувається в режимі реального часу)
  • Офлайн-у разі неможливості взаємодії каси та системи АВМ Loyalty в онлайн режимі (наприклад відсутність інтернет з'єднання) каса повинна записувати транзакції в чергу з номерами карток (перевіряючи їх по масці) і при відновленні з'єднання з АВМ Loyalty передавати їх. Якщо при надсиланні транзакції з черги до системи лояльності система лояльності повертає помилку, що карту не знайдено, запит надсилається повторно, як неідентифікована покупка.

Дані передаються методами RESTful API по протоколу https.

Для взаємодії каси та Лояльності використовуються методи API:

POST /partner/operation/user/registration –реєструє нового учасника програми лояльності;

POST /partner/card/card-update -використовується зміни статусу карти на касі;

POST /partner/operation/pre-check -розрахунок за чеком;

POST /partner/operation/check-confirm -запит на підтвердження продажу;

POST /партнер/операція/чек-поверненняpartner/operation/check-returnзапит на повернення;

ПУБЛІКУВАТИPOST  /партнер/реферал/посиланняpartner/referral/link -для створення зв'язки реферал-реферер (по роботі реферальної програми)

Операції з продажу:

Перелік операцій продажу на касі:

  1. Режим онлайн - коли є безперервний доступ до мережі Internet
    1. Купівля товару
    2. Повернення товару (повне, часткове, повторне)
  2. Режим офлайн - немає доступу до мережі Internet - дані продажу не можуть відправитися в CRM Лояльності безпосередньо під час продажу.

Порядок виконання операцій продажу:

Карт-юзер-інф

  1. Отримати відповідь передрахунку POST /v2/partner/operation/pre-check.
  2. Вивести повідомлення скільки можна списати бонусів за цей чек, якщо можна списати бонуси - значення з параметра "receipt_bonus_amount": З питанням чи списати бонуси (Відповідь Так, і Відповідь Ні).
  3. Якщо відповідь Так. Вивести поле для введення кількості до списання, при цьому відображати максимальну допустиму кількість до списання. Якщо користувач ввів суму бонусів більше, ніж допустима – видавати відповідне повідомлення та не надсилати дані. Додати кнопку після введення - Надіслати (виконати другий передрахунок POST /v2/partner/operation/pre-check) та Скасувати - не списувати бонуси (вивести суму до оплати на чек та кількість нарахованих бонусів попозиційно та загальну кількість на чек) При натисканні відправити вивести суму до оплати на чек та кількість нарахованих та списаних бонусів (попозиційно та загальна кількість на чек).
  4. Якщо Відповідь Ні вивести суму до оплати на чек та кількість нарахованих бонусів попозиційно та загальну кількість.
  5. Після введення суми до оплати - підтвердження операції продажу POST /v2/partner/operation/check-confirm

За будь-яких змін у продажу - надсилати запит POST /v2/partner/operation/pre-check

Опис методів також доступний за посиланням:

канал API: https://api.sandbox.abmloyalty.app

ключ (токен):

версія: v2

тип авторизації: Базова автентифікація(можна використовувати поле імені користувача як токен (ключ) доступу та пропустити пароль)

ключ:

!! доступ до тестової бази. Потім потрібно буде перейти на продуктову систему

Опис усіх методів доступний за посиланням:

https://documenter.getpostman.com/view/10073265/TzJuAdf5

Реєстрація нового учасника програми лояльності (ПЛ) на касі

Запит на реєстрацію нового учасника програми лояльності (без верифікації по смс)

POST /partner/operation/user/registration

  • Створює новий рахунок у системі, заповнює анкету нового учасника програми.
  • У параметрах потрібно передати анкетні дані клієнта.
    Обов'язковими параметрами є поля анкети, які встановлені як обов'язкові до заповнення (у даному прикладі 5 параметрів).
  • Метод повертає телефон та guid нового, створеного у системі учасника програми лояльності.
Назва Тип даних Опис Відповідає значенню у Клієнта
phone рядокstring Номер мобільного телефону у форматі 380#########  

first_name

ціле числоinteger Ім'я учасника ПЛ

middle_name

рядокstring По батькові учасника програми лояльності  

last_name

рядокstring Прізвище учасника програми лояльності  

birth_day

рядокstring Дата народження учасника програми лояльності у форматі 1989-03-17  

id_region

ціле числоinteger Глобальний довідник регіону проживання  

id_city

ціле числоinteger Глобальний довідник міста проживання пов'язаний з регіоном.

gender

ціле числоinteger Стать:1 - чоловік2- жінка  

sms_notify

ціле числоinteger Підписатися на смс розсилку:1-Згідний0-Не згоден  

email_notify

ціле числоinteger Підписатися на email розсилку:1-Згідний0-Не згоден  

email

рядокstring Електронна пошта у форматі abm@abmcloud.com  

address

рядокstring Адреса учасника ПЛ  

channel_reg

ціле числоinteger Канал реєстрації.Для каси: 5.  

Приклад відповіді при успішному запиті:

{

"успіх"success": правда,true,

"статус"status": 201,

"даних"data": {

"телефон"phone": "380931000013",

"guid":« "68c147a2-edbd-4df5-a8b2-dadfb3a70ebc»dadfb3a70ebc",

}

}

Реєстрація учасника програми лояльності (з верифікацією по смс)

      • Реєстрація з смс за наявності картки
        • Перевірка номера картки

Метод перевіряє, чи є така карта в програмі лояльності, якщо карта є в параметрі availability повертається 1, якщо не карти немає-0.

ОТРИМАТИGET /client/card/{number}/availability

Назва Тип даних Опис Відповідає значенню у Клієнта
number рядокstring Номер картки учасника ПЛ  
        • Запит списку обов'язкових полів

GET /client/profile-params– повертає список полів основної анкети та їх обов'язковість до заповнення.

        • Запит списку додаткових полів

GET /system/profile-fields- повертає список додаткових полів анкети та їхню обов'язковість до заповнення.

        • Запит списку регіонів

ОТРИМАЙТЕGET /v2/client/geo/{country}/regions -повертає всі регіони та їх ID

{country} - ID країни

        • Запит списку міст

ОТРИМАЙТЕGET /v2/client/geo/{country}/{city}/search-city - пошук у частині назви міста, повертає міста (регіони, країни) заданої country, max = 10шт

{country} - ID країни

{city} - частина назви міста

{country} - ID країни прописати в запиті за промовчанням і не виводити в інтерфейс користувача для вибору.

Наприклад, ID країни Казахстан = 81

        • Перевірка номера телефону користувача

POST /v2/client/check-phone–метод перевіряє чи є цей номер телефону вже в програмі лояльності, якщо є, то параметр is_exist у відповідь приходить true, якщо ні-false.

Назва Тип даних Опис Відповідає значенню у Клієнта
phone рядокstring Номер мобільного телефону у форматі 380#########  
        • Реєстрація по смс

POST /v2.1/client/registration – метод реєструє номер телефону та відправляє на номер смс із кодом підтвердження

Назва Тип даних Опис Відповідає значенню у Клієнта
phone рядокstring Номер мобільного телефону у форматі 380#########  
password рядокstring Постійний пароль можна вносити стандартний 111111  
        • Підтвердження реєстрації паролем із смс

POST /v2.1/client/registration-confirm -метод відправляє код із смс і підтверджує реєстрацію

Назва Тип даних Опис Відповідає значенню у Клієнта
кодcode рядокstring Код з смс  
sms_id ціле числоinteger Id sms, отриманий у попередньому запиті  
        • Присвоєння картки користувачеві

POST /v2/client/card/set-card – метод надає зазначений номер картки учаснику (по токену)

Назва Тип даних Опис Відповідає значенню у Клієнта
codenumber рядокstring Номер картки учасника ПЛ  
        • Генерація віртуальної картки(якщо немає пластикової картки)

GET /v2/client/card/generate-card– метод генерує віртуальну карту учаснику програми лояльності (за токеном)

        • Надсилання анкетних даних

PUTPUT/v2/client /v2/клієнт /профільprofile–метод надає зазначені дані учаснику (по токену)

Назва Тип даних Опис Відповідає значенню у Клієнта

first_name

цsле числоinteger Ім'я учасника ПЛ  

middle_name

рядокstring По батькові учасника програми лояльності  

last_name

рядокstring Прізвище учасника програми лояльності  

birth_day

рядокstring Дата народження учасника програми лояльності у форматі 1989-03-17  

id_region

ціле числоinteger Глобальний довідник регіону проживання  

id_city

ціле числоinteger Глобальний довідник міста проживання пов'язаний з регіоном.

gender

ціле числоinteger Стать:1 - чоловік2- жінка  

email

string Електронна почта в форматі abm@abmcloud.com  

sms_subscribe

ціле числоinteger Підписатися на смс розсилку:1-Згідний0-Не згоден  

email_subscribe

ціле числоinteger Підписатися на email розсилку:1-Згідний0-Не згоден  

children

ціле числоinteger Кількість дітей:0-дітей немає;1-1;2-2;3-3;4- ще 3;  

channel_reg

ціле числоinteger Канал реєстрації.Для каси: 5.  

family_stat

ціле числоinteger Сімейний стан:0- не визначено;1- одружений;2 - одномісні,  

has_auto

ціле числоinteger Наявність автомобіля:0 - не визначено;1 - ненемає сам;авто;2 - легковий автомобіль;3 - мікроавтобус;4 - вантажний вагон;;5 - інший автомобіль,  

work_status

ціле числоinteger Вид зайнятості:0 - не визначено;1 - бізнесмен;2 - урядовець;3 - службовець;4 - учень;5 - пенсіонер;6 - домогосподарка;7 - інше,  


Інформація про учасника програми лояльності

Рекомендація:

Якщо у відповіді набули статусу карти"2":"Заблоковано",то проводити продаж як неідентифікованому покупцеві (у річці не передавати номер картки)

Запит інформації про учасника програми лояльності за номером телефону

GET /partner/operation/user/{type}/{token}/user-info

{type} - карта або телефон

{token} - якщо {type} - card, то заповнювати значенням номеру картки, якщо {type} - phone, то заповнювати значенням номера телефону учасника ПЛ

Приклад відповіді при успішному запиті:

{

    "успіх"success":правда, true,

    "статус"status": 200,

    "дані"data": {

        "токен"token": "63", //Номер карткикарти

        "дані_користувача"user_data": {

            "гід"guid":« "533a7a29-6928-4aad-a1b3-051bb1717af4»051bb1717af4",

            "мобільний"mobile": "380631024903", // номер телефонутелефона

            "електроннаemail": пошта":"Alyonahavrylenko@gmail.com", // email-адреса

            "ім'я"first_name": "Хелен"Helen", //ім'яІмʼя

            "поmiddle_name": батькові":"", //По По-батькові

            "прізвище"last_name": "Вчитель"Guru", //Прізвище

            "створений"created": 1578488728, // дата реєстрації;

            "день_народження"birth_day": "1999-08-08",//Дата народження

            "Стать"gender": 2, //ПолСтать

            "sms_notify": 1, // згода на sms-розсилку (0 - не згоден; 1 - згоден);

            "email_notify": 1, // згода на email-мейл-розсилку (0 - не згоден; 1 - згоден);

            "id_region": 86, //id регіонурегіона

            "id_city": 1116, //id міста

            "адреса"address": "Peremogy Avenu 12",// Адреса

            "заблоковано"blocked":0/ 0 //Кількість блокувань учасникаучастника

        },

        "статус_користувача"user_status": [],// статус учасника;

        "профіль"profile": {// додаткові поля анкети;

            "work_status": 3, // статус зайнятості;

            "children": 0,// наявність дітей

            "has_auto": 1,// наявність авто

            "family_stat": 2 // сімейний статус

        },

        "accounts_data": [

            {

                "робочий_статус"account":3,

"діти":0,

2620020401,

"has_auto":1,

"сімейна_статистика":2

},

"accounts_data":[

{

"рахунок":2620020401,// номер гаманця;

                "валюта"currency": "ДОБРЕ"BON", // Названазва валюти лояльності;

                "баланс"balance": 0, // кількість бонусів на рахунку;

                "доступний"avialable":0/ 0 // кількість доступних бонусів на рахунку;

            }

        ],

        "cards_data": [

            {

                "номер"number": "2020000000259", // Номерномер картки;карти;

                "статус"status": 3, // статус карткикарти (0 - нова; 1 - не заповнена; 2 - заблокована; 3 - платіжна);

                "створений"created": 1579167842, // Датадата створення карти (генерації);

                "дата_активації"date_activated": 1580741547, // дата активації (дата першої операції зпо карті чи дата прив'язкипривʼязки карти до гаманця) ;

                "датаissue_date": випуску":нуль,null, // Датадата видачі карти;

                "issue_branch":нуль, null, //Торгівельна торгова точка в якій виданавидано карта;карту ;

                "дата_заблоковано"date_blocked": 0, // дата переведенняпереводу карткикарти ув статус "заблокована";

                "тип"type":1/ 1 // тип карти (1 - основна карта, 2 - брелок);

            },

            {

                "номер"number": "63",

                "статус"status": 3,

                "створений"created": 1579166828,

                "дата_активації"date_activated": 1579178912,

                "датаissue_date": випуску":нуль,null,

                "issue_branch":нуль, null,

                "дата_заблоковано"date_blocked": 0,

                "тип"type": 1

            },

            {

                "номер"number": "67",

                "статус"status": 2,

                "створений"created": 1579166828,

                "дата_активації"date_activated": 1579167114,

                "датаissue_date": випуску":нуль,null,

                "issue_branch":нуль, null,

                "дата_заблоковано"date_blocked": 1579167187,

                "тип"type": 1

            },

            {

                "номер"number": "2020-80477",

                "статус"status": 3,

                "створений"created": 1578498242,

                "дата_активації"date_activated": 1578910691,

                "датаissue_date": випуску":нуль,null,

                "issue_branch":нуль, null,

                "дата_заблоковано"date_blocked": 0,

                "тип"type": 1

            }

        ],

        "подарункові_бонуси"gift_bonuses": [ //Інформація зпро подарунковихподарункові бонусівбонуси

            {

                "id": 268, //ID операції

                "ім'я"name":«Для книг»"For books",// Назва нарахування

                "бонус"bonus": 1000, //Кількість нарахованих бонусів

                "відкрито_у"opened_at":1581948299/ 1581948299 //Дата активації бонусів

            }

        ],

        "статуси карток"card_statuses": {

            "0": "новий"New",

            "1": "Активний"Active",

            "3": "Оплата"Payment",

            "2": "Заблоковано"Blocked"

        },

        "типи_карт"card_types": {

            "1": "Головний"Main",

            "2": "Раб"Slave"

        },

        "загальна_витрачена_сума"total_amount_spent":13398/ 13398 // загальна сума покупок учасника.учасника .   

"groups": [ //список груп,  д яких належить учасник 

"Кайбылдаева",

"0555409355",

"фильтр",

"Чуй обл группа рассылки",

"testoce2",

"All clients",

"омурбеков тест2",

"Тест 2",

"Горобец М, два магазина, квартал",

"Мужчины все ",

"Кроме 996701037770",

"Гавриленко тест",

"Иван Иванов",

"мужчины от 20 до 30",

"тест титан",

"Для рассылки Пуш",

"\t0000001433663",

"0684607869",

"Для_Задания_2",

"Титан мужчины 2 магазина",

"Лекарь тест",

"Женщины за рулем ",

"Чуй конструктор",

"Титан все клиенты",

"Лаки Лук 1",

"1010109147909",

"Ж 20-30, МП_Горобец",

"мужчины по заданию",

"Печенье весовое",

"мужчины до 30",

"Валерия",

"5% скидка"

]

 }

}

    • Запит зміни інформації про учасника програми лояльності (редагування анкетних даних)

PUT /partner/operation/user/{type}/{token}/user-info

Назва Тип даних Опис Відповідає значенню у Клієнта
phone рядок Номер мобільного телефону у форматі 380#########  

first_name

рядокstring Ім'я учасника ПЛ

middle_name

рядокstring По батькові учасника програми лояльності  

last_name

рядокstring Прізвище учасника програми лояльності  

birth_day

рядокstring Дата народження учасника програми лояльності у форматі 1989-03-17  

id_region

ціле числоinteger Глобальний довідник регіону проживання  

id_city

ціле числоinteger Глобальний довідник міста проживання пов'язаний з регіоном.

gender

ціле числоinteger Стать:1 - чоловік2- жінка  

sms_notify

ціле числоinteger Підписатися на смс розсилку:1-Згідний0-Не згоден  

email_notify

ціле числоinteger Підписатися на email розсилку:1-Згідний0-Не згоден  

email

рядокstring Електронна пошта у форматі abm@abmcloud.com  

Приклад відповіді при успішному запиті:

{

"успіх"success": правда,true,

"статус"status": 200,

"даних"data": {

"guid":« "77f8f2d6-afad-4123-bd52-0db68df28e74»0db68df28e74",

"мобільний"mobile": "380931000013",

"електронноюemail": поштою":"titkin1@ua-2.com",

"ім'я"first_name": "Артур"Artur",

"поmiddle_name": батькові":"Іванович"Ivanovich",

"прізвище"last_name":«Я досліджував»"Titkin",

"створений"created": 1521451738,//Дата створення

"день_народження"birth_day": "1979-04-28",

"Стать"gender": "2",

"sms_notify": "0",

"email_notify": "0",

"id_region": "91",

"id_city": "1586",

"заблоковано"blocked":1/ 1 //Кількість блокувань карткикарти

}

}

Інформація про картку учасника програми лояльності

Зміна статусу картки на касі

Запит оновлює дані картки:

  • Встановлює/змінює статус картки;
  • Встановлює/змінює дату видачі;
  • Встановлює/змінює точку видачі;
  • Надає карту існуючому учаснику програми.

POST      /v2/partner/card/card-update

Перелік параметрів у запиті:

Назва Тип даних Опис Відповідає значенню у Клієнта
card_issue_branch рядокstring Код торгової точки, де видали карту  
card_issue_date ціле числоinteger Дата та час видачі картки передається у форматі unix time
card_number рядокstring Номер картки учасника ПЛ, за якою оновлюються дані  
card_status ціле числоinteger Картка статусу:1 - Активна/Нова2 - Заблоковано3 - Платіжна  
user_card рядокstring Номер картки учасника ПЛВикористовується для прив'язки додаткової карти Ідентифікатор учасника програми лояльності, використовувати при необхідності прив'язки нової карти до існуючого учасника. Потрібно передавати один із цих параметрів

user_phone

рядокstring Номер телефону учасника програми лояльності до якого буде прив'язана карта, вказана в параметрі card_number

Приклад відповіді при успішному запиті:

{

"success": true,

"status": 200,

"data": {

"card_number": "10000009"

}}

Продаж

Запросити передрахунок за чеком

POST /v2/partner/operation/pre-check

Якщо користувач - учасник програми лояльності, необхідно заповнити значення в полі card або phone. Якщо користувач не є учасником програми лояльності, дані card або phone не передавати.

Дані отримані в pre-check потрібно кешувати для подальшого друку чека та відправлення даних про продаж в облікову систему клієнта.

Дані параметра meta в receipt_details відповідають значенням товару опис деталей клієнт.

  • перевіряє наявність купона у системі, приналежність до партнера
  • можливість його погашення цим користувачем на даний момент часу
  • пов'язує код купона з номером транзакції, до якої буде застосовано купон
  • робить передрахунок чека з урахуванням купону (для купону знижок)

У запиті необхідно заповнювати наявний параметр"купон"

Перелік параметрів у запиті:

Назва Тип даних Опис Відповідає значенню у Клієнта
branch_id рядокstring Код (id) торгової точкиПопередньо має бути створений у CRM Лояльності  
card ціле числоinteger Номер картки учасника ПЛ  
coupon рядокstring Код купона, якщо купонів кілька, їх необхідно записати через кому  
offline логічнийboolean Визначає режим проведення операції: 1 – офлайн, 0-онлайнСписати бонуси у режимі офлайн неможливо  
operator_id рядокstring Код касираПопередньо має бути створений у CRM Лояльності  
phone рядокstring Номер телефону учасника ПЛ  
receipt_bonus_amount номерnumber Кількість бонусів за чек, які покупець хоче списати.  
receipt_currency рядокstring Валюта бонусів Передавати значення BON
receipt_datetime Ціле числоInteger (тип: 1470825537) Дата та час покупки за UTC(GMT) вформаті UNIX час (без часового поясу)  
receipt_description рядокstring Опис типу покупки Звичайний продаж 
receipt_details рядокstring Деталі покупки (повний список товарів та їх властивості у квитанції) у вигляді масиву JSON. "position" - позиція в чеку. "prod_cat" – код групи товарів. "prod_code" - код SKU. "prod_name" - повна назва продукту. "prod_price" - ціна товару. "prod_amount" – кількість товару. "prod_sum" - загальна вартість продукту (зазвичай дорівнює prod_amount * prod_price). bonus_restrict

“bonus_restrict”:true -  виключити позицію з розрахункунарахування бонусу,і несписання потрібно,бонусів ,

“bonus_accrual_restrict”:true -виключити позицію з нарахування  бонусів

“discount_restrict”:true -виключити позицію зі списання бонусів

,external_discount - рармер (у грошах) зовнішньої знижки"meta":"{\"параметр1\":\"значення\", \"параметр2\":\"значення\"}"
 
session_id ціле числоinteger Код сесії  
terminal_id рядокstring Код каси  
variables рядокstring Дод. св-тва товару у вигляді масиву JSON Приклад: {"key1":1, "key2":1}  

Важливо!!!:

1.bonus_restrict - Якщо товар продається за акцією, налаштованою в обліковій або касовій системі, передавати 1 до параметра bonus_restrict, щоб механіки лояльності по даному товару не спрацьовували.В інших позиціях цей параметр не передавати.

2. Якщо на продукт спрацьовує знижка, бонуси на цей продукт не нараховуються та не списуються.

Приклад відповіді при успішному запиті (значення в параметрі "pre_check_id" необхідно зберегти для передачі в операції підтвердження продажу )

{

"успіх"success": правда,true,

"статус"status": 201,

"даних"data": {

"pre_check": {

"pre_check_id": "1548149007.104900.03",// id якийкотре необхідно буде підтвердити методом check-confirm

"оплата"payment": {

"гроші"money":899, 899.03, // "чиста" сума до оплати (скільки грошей необхіднопокупець має заплатити користувачу,після завсіх вирахуванням дисконтнихзнижок та бонуснихсписання знижокбонусів 

"bonus_redeeded"bonus_redeemed": 1, // скільки бонусів використано на оплату покупки  

"знижка"discount":0/ 0/ /розмір знижки ув грошах

},

"валюта"currency": "ДОБРЕ"BON",// Валютавалюта нарахування бонусів

"купон"coupon": [// купон використані в цьому чеку

{

"код"code": "3863NUM6",// номер купона

"успіх"success": помилковий,false,// статус операції

"повідомлення"message": "КонфігураціяCoupon купонаconfiguration неактивна"is not active"// опис помилки

},

{

"код"code": "6556PRE",// Номерномер купона

"успіх"success": правда,true,// статус операції

"повідомлення"message": "",// назва купона

"reward_type": "1"// вид купону 1- бонус, 0 - знижка

}

], // купон використовуєнийвикористані зв цимцьому чекомчеку

"ідентифікатор_гілки"branch_id": "001", // id торгової точки

 "terminal_id": "термінал_1"terminal_1",// id каси

"operator_id": "оператор_1"operator_1",// id касира

"session_id": нуль,null, // id сесії

"receipt_amount": "сума_квитанції":900,900.03, // повна сума чека

"платіжний_бонус"payment_bonus":63, 63.86, // всього бонусів нараховано запо чекомчеку 

"базовий_бонус"base_bonus":63, 63.86, // Розміррозмір базового бонусу (кешбек)

"квитанція_опис"receipt_description":«Перевірочна перевірка»"Precheck test",// опис чека

"деньbirthday_bonus": народження_бонус":0, // бонус ув день народження

"userStatusFixBonus": 0, // бонус за статус (тількитолько фіксованафиксирована сума винагороди,нагороди, не%не %)

"реквізити_квитанції"receipt_details": [// деталі чеку

{

"положення"position": 1, // номер позиції ув чеку

"prod_cat": "20316",// категорія продуктупродукта (якщо товару немаєнема ув CRM, то повертається як "0")

"prod_code": "13997",// номерsku продуктупродукта

"prod_name": "КОНФ ВАГОВІВЕСОВЫЕ АСОРТІ"АССОРТИ",// назва продукту (якщо товару немаєнема ув CRM, то повертається як "no name product")

"prod_price": "100,100.01",// ціна товарупродукту

"prod_amount": "3",// /кількість Кількість продукту (продуктів(шт.)

"prod_sum":300, 300.03, // загальна вартість запо позицієюпозиції продуктупродуктів

"bonus_restrict": "в порядку"1",

"ліміт_знижки"discount_limit":300, 300.03, // максимально можлива знижка напо позиціюпозиції 

"знижка"discount": 0, // Розміррозмір застосованої знижкизнижкм на позицію

"параметри"parameters": [],// Додатковідодаткові параметри позиції, встановлені в налаштуваннях товарів (ціна, мрц, обмеження щодопо нарахуваннянарахуванню таі списаннясписанню бонусів)

"discount_success": [],// інформація щодопо успішно застосованихзастосованим дисконтнихзнижковим акційакціям 

"знижка_бонус"discount_bonus": 0, // розмір знижки наданийпредставленій бонусами в грошах 

"бонус"bonus": 0, // кількість бонусів,бонусів нарахована на позицію

"bonus_success": []// детальна інформація по бонусах нарахованих на позицію

 

"бонус_успіх": []// докладна інформація щодо бонусних нарахувань на позицію

},

{

"положення"position": 2,

"prod_cat": "20316",

"prod_code": "86163",

"prod_name":«Текіла Патрон"Tekila сріблоPatron 0,5»silver 0.5",

"prod_price": "100",

"prod_amount": "2",

"prod_sum": 200,

"ліміт_знижки"discount_limit": 0,

"знижка"discount": 0,

"параметри"parameters": {

"ціна"price": 100,

"мрп"mrp": нуль,null,

"знижка"discount": 0,

"max_calculation_bonus": 4,

"max_payment_bonus": 0

},

"discount_success": [ // докладнадетальна інформація ззнижкампро знижки на позицію

{

"правило"rule": "купон"coupon",// Типтип нарахування, вечіркакупон

"action_id": 0, // id акції (для нарахування зпо акції)

"назваaction_title": дії":"",// Названазва акції

"інформація"info": "6556PRE",//код купону

"знижка"discount": 7.11, // розмір знижки ув грошах 

"пріоритет"priority":1/ 1// Пріоритетпріорітет акції

}

],

"знижка_бонус"discount_bonus": 0,

"бонус"bonus": 4,

"бонус_успіх"bonus_success": [

{

"правило"rule": "кешбек"cashback",

"action_id": 0,

"назваaction_title": дії":"",

"бонус"bonus": 4,

"пріоритет"priority": 999998

}

]

},

{

"положення"position": 3,

"prod_cat": "20316",

"prod_code": "77765",

"prod_name": "ПАКЕТ МАЙКА ФІРМОВИЙФИРМЕННЫЙ ЄЛІСЕЙЕЛИСЕЙ 12КГ",

"prod_price": "100",

"prod_amount": "2",

"prod_sum": 200,

"ліміт_знижки"discount_limit": 200,

"знижка"discount": 0,

"параметри"parameters": [],

"discount_success": [],

"знижка_бонус"discount_bonus":0, 0.5,

"бонус"bonus": 29.93,

"бонус_успіх"bonus_success": [

{

"правило"rule": "кешбек"cashback",

"action_id": 0,

"назваaction_title": дії":"",

"бонус"bonus": 29.93,

"пріоритет"priority": 999998

}

]

},

{

"положення"position": 4,

"prod_cat": "20316",

"prod_code": "13997",

"prod_name": "КОНФ ВАГОВІВЕСОВЫЕ АСОРТІ"АССОРТИ",

"prod_price": "100",

"prod_amount": "2",

"prod_sum": 200,

"ліміт_знижки"discount_limit": 200,

"знижка"discount": 0,

"параметри"parameters": {

"ціна"price": 100,

"мрп"mrp": 95,

"знижка"discount": 0,

"max_calculation_bonus": 200,

"max_payment_bonus": 200

},

"discount_success": [],

"знижка_бонус"discount_bonus":0, 0.5,

"бонус"bonus": 29.93,

"бонус_успіх"bonus_success": [

{

"правило"rule": "кешбек"cashback",

"action_id": 0,

"назваaction_title": дії":"",

"бонус"bonus": 29.93,

"пріоритет"priority": 999998

}

]

}

],

"sms_id": 6756, // даний параметр приходить тільки після налаштування в системі АБМ - Підтвердження списання по смс

"max_payment_bonus_check":2264, 2264.5, // максимальна кількість бонусів для списання (ув бонусах)  

"max_payment_money_check":226, 226.45, // максимальна кількість бонусів для списання  (ув грошовій одиниці з коефіцієнтом переказу 1 бонус = бонус=10 копійок, у вас він може відрізнятися)відрізнятись )

"баланс_доступний"balance_available":100, 100 , //Доступнодоступно бонусів на рахункусрахунку в учасника програми лояльностіПЛ

"discount_fail": [],//інформація щодопро не застосованихзастосовані дисконтних акційдисконти (акція активна, але в чеку не дотриманодотримана умовиумова для її роботи) 

"bonus_fail": []//інформація щодопро не застосованихзастосовані бонуснихбонусні акційакції

}

}

}

Рекомендація:

- Отримані у відповіді на pre_check параметри "max_payment_bonus_check" і

-balance_available виводити на касі мінімальне з них, як «Максимально можлива кількість бонусів для списання:»

-"sms_id": 6756,- ідентифікатор смс підтвердження списання бонусів за кодом з смс

- pre_check_id – дійсний 10 днів

Приклади відповідей від АБМ під час використання купонів у чеку:

Приклад відповіді від лояльності Значення

"купон"coupon": [

{

"код"code": "1000896246",

"успіх"success": правда,true,

"повідомлення"message": "",

"template_name": "Купон на бонус Titan",

"reward_type": 0}0

}

]

Цей купон дійсний і його можна застосувати в даному чеку

"купон"coupon": [

{

"код"code": "1000110027",

"успіх"success": false,

"message": "КупонCoupon погашено"redeemed"

}

]

Цей купон вже погашено

"купон"coupon": [

{

"код"code": "1000358936",

"успіх"success": false,

"message": "КонфігураціяCoupon купонаconfiguration неактивна"is not active"

}

]

Термін дії вказаного купона минув

"купон"coupon": [

{

"код"code": "1000303888",

"успіх"success": false,

"message": "НеWrong тойuser",

користувач",

"template_name": "Купон на знижку"скидку"

}

]

Цей купон не належить зазначеному користувачеві

"купон"coupon": [

{

"код"code": "1000572007",

"успіх"success": false,

"message": "КупонCoupon застарів"is out of date"

}

]

Термін дії вказаного купона ще не настав

"купон"coupon":[

{

"код"code": "CUP20416079",

"успіх"success":false,

false,

"message":"Condition "СумаOrder замовленняsum неis виконана"not met"

}

]

Умови купона за сумою чека не виконані (сума чека менша, ніж задано в умовах купона)

Запит на підтвердження продажу

POST    /v2/partner/operation/check-confirm

  • підтверджує проведення чека, списання та нарахування бонусів (pre_check_id- дійсний 10 днів)
  • застосовує купон (ставить відмітку про використання)

Перелік параметрів у запиті:

Назва Тип даних Опис Відповідає значенню у Клієнта
коробкаbox номерnumber Кількість грошей, які будуть перераховані у бонуси згідно з коефіцієнтом списання. Має бути реалізований функціонал скарбнички.  
номер_чекcheck_number ціле числоinteger Номер перевіркиКод операції з продажу. При формуванні має бути унікальним у розрізі партнера Формат:Номер_чека_+_Дата_покупки
тип оплатиpayment_type рядокstring Массив с типами оплат. Пример: [{"type":1,"sum":899},{"type":2,"sum":0.00}]  
pre_check_id рядокstring Код (ID) операції отриманий у відповіді на запит POST /v2/partner/operation/pre-check  
sms_idintegerІдентифікатор смс при списанні бонусівсмс приходить тільки після налаштування в системі АБМ - Підтвердження списання по смс
codeintegerКод з смс відправнику

Приклад відповіді при успішному запиті

{

"успіх"success": правда,true,

"статус"status": 201,

"даних"data": {

"pre_check_id":"1548149007.104900.03",// ідентифікатор підтвердженого чека

"номер_чек"check_number":"100110",// Номер чека, переданий касою

"box_bonus":0,07, // бонуси передані у скарбничку

"бонус_нараховано"bonus_accrued":63,93, // нараховані бонуси

"bonus_redeeded":1,// списані бонуси, в рахунок оплати

"bonus_balance":288, //баланс бонусів у користувача після оплати чека

"c2b_result": {// відомості про журнальніоперації операціїсписання

"успіх"success": правда,true,// статус операції

"errorDescription":"",// опис у разі помилки

"process_transaction_datetime":1548150560,// час операції у unixtime

"c2b_check_number":"C2B-100110"// id операції списання

},

"b2c_результат": {// відомості про журнальніоперації операціїнарахування

"успіх"success": правда,true,// статус операції

"errorDescription":"",// опис у разі помилки

"process_transaction_datetime":1548150560,// час операції у unixtime

"b2c_check_number":"B2C-100110"// id операції нарахування бонусів

},

"купон"coupon": [// інформація про купон

{

"код"code": "6067ПОПЕРЕДНЯ6067PRECHECK",// ПЕРЕВІРКА",Код купону

"успіх"success": правда,true,

"повідомлення"message": "",

"параметри"options": {

"отримана_знижка"received_discount": "16,16.85",

"redemption_count": 1

},

"reward_type": "1"

}

]

}

}

Повернення товару

POST /партнер/операція/чек-поверненняpartner/operation/check-return

Перелік параметрів у запиті:

Назва Тип даних Опис Відповідає значенню у Клієнта
ідентифікатор_гілкиbranch_id рядокstring Код (id) торгової точки  
номер_чекcheck_number рядокstring Номер чека повернення  
operator_id номерnumber Код касира  
повернення_номер_чекуreturn_check_number рядокstring Номер продажу (чека), що підлягає поверненню  
повернення_датачасreturn_datetime ціле числоinteger (тип: 1550478564) Дата та час повернення  
return_details рядокstring Перелік кодів товарів та їх кількості, що підлягають поверненню. Приклад: [{"prod_code":"139974","prod_amount":1}]  
terminal_id номерnumber Код каси  

Приклад відповіді при успішному запиті

#Відгук#Відповідь для учасника програми лояльності

{

"успіх"success": правда,true,

"статус"status": 201,

"дані"data": {

"return_check_number":"471",// Номер чека продажу з якого зроблено повернення

"чек_номер"check_number":"4587",// Номер чека повернення

"branch_id":"001",// id торгової точки

"ідентифікатор_терміналу"terminal_id": нуль,null,// id каси

"ідентифікатор_оператора"operator_id": нуль,null,// id касира

"b2c_returned":15,// кількість бонусів повернутих на рахунок партнера

"b2c_transaction_id":471,// id транзакції повернення бонусів на рахунок партнера

"c2b_returned":0,5,// кількість бонусів повернутих на рахунок клієнта

"c2b_transaction_id":470,470,// id транзакції повернення бонусів на рахунок клієнта

"повідомлення"message": "b2c - усіall бонусиbonuses очищені"cleared" // повідомлення про бонуси, що повертаються на рахунок партнера (чи вдалося повернути бонуси, якщо так, то всі бонуси або тільки частина)

}

}

#Відповідь для анонімного клієнта

{

"успіх"success": правда,true,

"статус"status": 201,

"дані"data": {

"return_check_number":"CN-1570437820-db",// Номер чека продажу з якого зроблено повернення

"чек_номер"check_number":"CN-1570437820-ret",// Номер чека повернення

"branch_id":"1",// id торгової точки

"ідентифікатор_терміналу"terminal_id": нуль,null,// id каси

"ідентифікатор_оператора"operator_id": нуль,null,// id касира

"b2c_returned":0,// кількість бонусів повернутих на рахунок партнера

"b2c_transaction_id": нуль,null,// id транзакції повернення бонусів на рахунок партнера

"c2b_returned":0,0,// кількість бонусів повернутих на рахунок клієнта

"c2b_transaction_id": нуль,null,// id транзакції повернення бонусів на рахунок клієнта

"повідомлення"message":«Не потребує"Does виконанняnot транзакції»require transaction execution"// повідомлення про бонуси, що повертаються на рахунок партнера (чи вдалося повернути бонуси, якщо так, то всі бонуси або тільки частина)

}

}

Режим offline

Якщо немає можливості надіслати дані в CRM Лояльності, необхідно зберігати ці дані в окремому сховищі і вивантажити їх за регламентом рекомендується 1 - 2 рази на добу

Регламент налаштувати гнучкий, щоб клієнт міг за необхідності змінити час.

Виводити на касу в якому стані знаходиться каса – онлайн/оффлайн – списання бонусів неможливо.

Перелік операцій у режимі offline

- операції продажу

Дані з продажу анонімних покупців та учасників програми лояльності накопичуються на касі, при доступі до лояльності відправляються дані про купівлюслінним бонусам. Списати бонуси в режимі онлайннеможливо - Виводити на касу діалогове вікно: «Каса перебувати в offline режимі. Списання бонусів неможливе.».

POST /v2/partner/operation/pre-checkпередаватиcheck передавати до параметра offline – 1(офлайн),далі застосувати метод POST    /v2/partner/operation/check-confirm

- Операції повернення

Дані щодо повернення анонімних покупців та учасників програми лояльності накопичуються на касі, при доступі до лояльності надсилаються дані про повернення зі списанням нарахованих бонусів та нарахування списаних бонусів.

POST /партнер/операція/чек-поверненняpartner/operation/check-return

Рекомендація

Щоб ідентифікувати транзакцію offline у ​​звітах системи, рекомендуємо до номера чека додавати слово ”off”.

Приклад для POST   /v2/partner/operation/check-confirm

номер_чекcheck_number ціле числоinteger Номер перевіркиКодперевірки Код операції з продажу. При формуванні має бути унікальним у розрізі партнера off+Номер_чека_+_Дата_покупки

Приклад для POST /partner/operation/check-return

номер_чекcheck_number рядокstring Номер чека повернення off+Номер_чека

Реферальна програма

ОПУБЛІКУЙТЕ /партнера/реферал/посилання

Участь у РП не є обов'язковою. Частина учасників програми лояльності може бути в РП, тоді як інша частина учасників може бути звичайними власниками карт лояльності.

Немає постійної прив'язки Реферала до Реферера. Співвідношення Реферал-Реферер може змінюватись від операції до операції.

До одного реферера може бути прив'язано кілька рефералів. Реферал може змінити свого реферера, у своїй старий зв'язок не видаляється, а перетворюється на неактивний статус.

арбітр (реферер) – учасник програми лояльності, за рекомендацією якого реферали здійснюють операції.

Реферал (рефері) –учасник програми лояльності, який здійснює операцію за рекомендацією іншого учасника.

RP –реферальна програма

Зв'язок реферал -> реферер може бути створена двома способами:

  • при реєстрації, якщо майбутній учасник програми лояльності вказав ідентифікатор реферера і при цьому виконується подіяРеєстрація.
  • після реєстрації, якщо учасник програми лояльності вказав ідентифікатор реферера, при цьому подіяРеєстрація не виконується.

Ідентифікатор реферера може бути змінений рефералом будь-якої миті. У такому разі в системі створюється новий зв'язок реферер -> реферал, а старий зв'язок деактивується (зберігаємо для історії та звітності).

ПодіяРеєстрація вважати виконаним, якщо учасник програми лояльності заповнив всі обов'язкові поля анкети і вказав ідентифікатор свого реферера (зазначено посилання реферера на даний момент, коли користувачеві проставляється дата реєстрації в rtl_users.start_day). Після цього в системі створюється зв'язок реферер -> реферал та фіксується подіяРеєстрація.

Алгоритм:

  1. Створення користувача у системі
  2. Створення зв'язку реферер -> реферал методом /partner/referral/link
  3. Завершення реєстрації (заповнення всіх обов'язкових полів анкети)

ПодіяКупівля вважати виконаним, якщо на момент покупки учасник програми лояльності є рефералом (в системі існує активний зв'язок реферер -> реферал). Після цього у системі фіксується подіяКупівля.

Алгоритм:

  1. Розрахунок за чеком методом pre-check
  2. Створення зв'язку реферер -> реферал методом /partner/referral/link
  3. Підтвердження чека методом check-confirm

Або

  1. Створення зв'язку реферер -> реферал методом /partner/referral/link
  2. Розрахунок за чеком методом pre-check
  3. Підтвердження чека методом check-confirm

Алгоритм:

  1. Створення користувача у системі
  2. Створення зв'язку реферер -> реферал методом /partner/referral/link
  3. Завершення реєстрації (заповнення всіх обов'язкових полів анкети)
НазваТип данихОписВідповідає значенню у Клієнта
refereeTokenрядокТвікон (номер картки/телефону хто здійснює продаж) 
refereeTypeрядокТіп ідентифікації рефері(card/phone) 
referTokenрядокТокен (номер картки/телефонуза рекомендацією якого операція відбувається) 
refererTypeрядокТип ідентифікації реферера(card/phone) 

Приклад успішної відповіді:

{

"успіх": правда,

"статус":201,

"даних": {

"refererType":"карта",

"referToken":"20000000001",

"refereeType":"карта",

"refereeToken":"20000000001"

}

}

Помилки

Код помилки Текст відповіді від сервера АБМ Причина
попередня перевіркаpre-check (продаж)Продаж)    
401 "name": "Неавторизовано"Unauthorized", "message": "ВашYour запитrequest булоwas зробленоmade зwith недійснимиinvalid обліковими даними.credentials.", Помилка авторизації. Неправильно вказано токен.
404 "name": "НеNot знайдено"Found", "message": "СторінкаPage неnot знайдена.found.", Допущена помилка на адресі сервера
422 "field": "receipt_details", "message": "ДеталіReceipt квитанціїDetails неcannot можутьbe бути пустими.blank." Допущено помилку в деталях чека (розділювач, параметри тощо)
422 "field": "branch_id","message": "ПартнерськаPartner філіяbranch неnot знайдена"found" Торговельну точку з таким Id не знайдено
422 "field": "змінні"variables", "message": "НедійснийInvalid форматvariables змінних"format" Помилка у синтаксисі змінної для акції
422 "field": "картка"card", "message": "карткаCard неnot знайдена"found" Вказаної карти немає в програмі лояльності
422 "field": "помилки"errors", "message": "КористувачаUser неnot знайдено"found" Вказаного користувача немає в лояльності
422 "field": "receipt_bonus_amount", "message": "МаксимумMaximum 330 бонусів"bonuses" Перевищено ліміт зі списання бонусів
422 "field": "телефон"phone", "message": "КористувачUser заблоковано"is blocked" Якщо користувач заблоковано
422 "field": "terminal_id", "message": "ТерміналTerminal неnot знайдено"found" Каса з таким Id не знайдено
422 "field": "operator_id", "message": "ОператорOperator неnot знайдено"found" Касира з таким Id не знайдено
500 "ВнутрішняInternal помилкаServer сервера"Error" Зовнішня помилка сервера
check-confirm(Продаж)    
422 "field": "payment_type", "message": "СумаThe чекаamount неof збігаєтьсяthe зcheck сумоюdoes переказуnot вmatch and the amount transferred in the payment_type." Сума оплати не відповідає потрібній
422 "field": "payment_type", "message": "НеправильнийWrong типpayment платежу.type." Помилка синтаксису в "payment_type"
422 "field": "pre_check_id", "message": "ПопередняPre перевіркаcheck неnot знайдена.found." pre_check_id не знайдено
422 "field": "pre_check_id","message": "ІдентифікаторPre попередньоїCheck перевіркиId неcannot можеbe бути порожнім.blank." "pre_check_id" не передано
422 "field": "check_number", "message": "ТакийSuch номерcheck чекуnumber вжеalready існує"exists" Такий номер check_number вже зайнятий
422 "field": "payment_type", "message": "ТипPayment платежуType неcannot можеbe бути пустим.blank." "payment_type" не передано
422 "field": "pre_check_id", "message": "ЦюThis перевіркуcheck вжеhas підтверджено.already been confirmed." pre_check_id не правильний або був раніше підтверджений
500 "ВнутрішняInternal помилкаServer сервера"Error" Зовнішня помилка сервера
check-return (Повернення)    
422 "field":"return_details","message":"НеможливоUnable повернутиto товарreturn product 1930612 Неможливо повернути продукт із цим кодом, його нею у зазначеному чеку або повернення цього продукту вже здійснено
422

"field":"return_check_number","message":"ЧекCheck неnot знайдено"found"

Зазначений чек для повернення не знайдено у програмі лояльності
500 "ВнутрішняInternal помилкаServer сервера"Error" Зовнішня помилка сервера