| Следующая версия | Предыдущая версия |
| external:pro_bonus:10_probonus_api:55_primer [2026/10/20 14:22] – создано Алексей Коробов | external:pro_bonus:10_probonus_api:55_primer [2026/10/22 10:07] (текущий) – Для N последних транзакций указан метод get_last_raw_transactions Алексей Коробов |
|---|
| ====== Типовые сценарии ====== | ====== Типовые сценарии ====== |
| В зависимости от целей и задач которые преследует внешняя система во взаимодействии с системой лояльности ProBonus можно выделить несколько типовых сценариев интеграции. | |
| |
| В данном разделе описаны базовые кейсы и указаны конкретные методы API необходимые для их реализации. | В зависимости от целей и задач, которые преследует внешняя система во взаимодействии с системой лояльности ProBonus, можно выделить несколько типовых сценариев интеграции. |
| |
| Если требуемая вам логика взаимодействия не описана в данном разделе, вы можете написать нам на [[soft@carbis.ru]] и мы обязательно поможем найти решение. | В данном разделе описаны базовые кейсы и указаны конкретные методы API, необходимые для их реализации. |
| | |
| | Если требуемая вам логика взаимодействия не описана в данном разделе, вы можете написать нам на <soft@carbis.ru>, и мы обязательно поможем найти решение. |
| |
| ===== Авторизация для работы с API ===== | ===== Авторизация для работы с API ===== |
| | |
| API ProBonus предусматривает два различных способа авторизации: | API ProBonus предусматривает два различных способа авторизации: |
| - Получение bearer токена через авторизацию (/api/v0/auth/login) и его дальнейшее обновление (/api/v0/auth/refresh_token). | |
| - Работа через токен для API. Все запросы в заголовках содержат постоянный токен. | |
| |
| Поддерживаются оба варианта. Но вариант 2 проще и удобнее. В сваггере доступны оба варианта. | - Получение bearer-токена через авторизацию (''/api/v0/auth/login'') и его дальнейшее обновление (''/api/v0/auth/refresh_token''). |
| | - Работа через токен для API. Все запросы в заголовках содержат постоянный токен. |
| | |
| | Поддерживаются оба варианта, но вариант 2 проще и удобнее. В Swagger доступны оба варианта. |
| {{:external:pro_bonus:10_probonus_api:pasted:20260216-093451.png}} | {{:external:pro_bonus:10_probonus_api:pasted:20260216-093451.png}} |
| |
| ===== Работа с анкетными данными на уровне личного кабинета внешней системы ===== | ===== Работа с анкетными данными на уровне личного кабинета внешней системы ===== |
| - В качестве сквозного идентификатора гостя используем номер телефона. | |
| - Если бизнес-логика подразумевает создание новых счетов из внешней системы, тогда каждого нового гостя вы создаете в ProBonus методом **/api/v0/accounts/insert_by_template**. \\ По минимуму нужно передать только анкетные данные и телефон (email и доп. идентификаторы - по желанию). Счет для гостя будет создан в группу accountGroupId и данному гостю будет автоматически назначена лояльность по шаблону настроенному для этой группы в рамках системы ProBonus (уровень, приветственные бонусы, установлено сгорание и т. п.) \\ Id нужной группы мы можете получить по API методом **/api/v0/account_groups/list**, или просто посмотреть в админке (http://probonus.pro:6896/account-groups/) и вынести в настройки на своей стороне. \\ **ВАЖНО:** Для корректного создания новых счетов по шаблону нужна группа с признаком «Шаблон для API» (haveTemplate=true). В тестовой БД это «Самостоятельно зарегистрировавшиеся» (id=3). | * В качестве сквозного идентификатора гостя используем номер телефона. |
| - Проверить гостя на существование в системе лояльности можно при помощи метода **/api/v0/accounts/find_by_phone**. Ищет гостя по номеру телефона. Если гость с указанным номером телефона существует, то в ответ вернется практически вся информация о нем: анкета, текущий остаток на счете, текущий уровень, купоны и так далее. | * Если бизнес-логика подразумевает создание новых счетов из внешней системы, тогда каждого нового гостя вы создаёте в ProBonus методом **''/api/v0/accounts/insert_by_template''**. \\ По минимуму нужно передать только анкетные данные и телефон (email и доп. идентификаторы — по желанию). Счёт для гостя будет создан в группе ''accountGroupId'', и данному гостю будет автоматически назначена лояльность по шаблону, настроенному для этой группы в рамках системы ProBonus (уровень, приветственные бонусы, установлено сгорание и т. п.). \\ ID нужной группы вы можете получить по API методом **''/api/v0/account_groups/list''** или просто посмотреть в админке (http://probonus.pro:6896/account-groups/) и вынести в настройки на своей стороне. \\ **Важно!** Для корректного создания новых счетов по шаблону нужна группа с признаком «Шаблон для API» (''haveTemplate=true''). В тестовой БД это «Самостоятельно зарегистрировавшиеся» (''id=3''). |
| | * Проверить гостя на существование в системе лояльности можно с помощью метода **''/api/v0/accounts/find_by_phone''**. Он ищет гостя по номеру телефона. Если гость с указанным номером телефона существует, то в ответ вернётся практически вся информация о нём: анкета, текущий остаток на счёте, текущий уровень, купоны и так далее. |
| |
| ===== Дополнительные методы API ProBonus ===== | ===== Дополнительные методы API ProBonus ===== |
| - **Начисление бонусов гостю** по инициативе внешней системы (например за какую то активность в вашем приложении). \\ /api/v0/accounts/refill. | |
| - **Транзакции по счету** (показать в ЛК гостю его транзакции). \\ /api/v0/accounts/transactions – вернет все транзакции по счету за указанный период. \\ /api/v0/accounts/transactions – вернет N последних транзакций. | |
| - **Обновить данные счета** (изменить анкету, изменить скидку/бонус, срок жизни бонусов и т.п.) \\ /api/v0/accounts/update | |
| - **Получить данные конкретного чека** гостя (вплоть до блюд) \\ /api/v0/checks/get_by_id | |
| - **Если используются сгорающие бонусы**. \\ /api/v0/accounts/get_balance_extended – вернет детализацию баланса счета, с указанием когда и сколько сгорит. | |
| |
| ===== Начисление лояльности за покупки во внешней системе ===== | * **Начисление бонусов гостю** по инициативе внешней системы (например, за какую-то активность в вашем приложении). \\ ''/api/v0/accounts/refill'' |
| Учет лояльности (скидки/бонусы/потраты) за все покупки совершенные гостем через систему r_keeper происходит автоматически и все данные об этих транзакциях попадают в базу ProBonus. | * **Транзакции по счёту** (показать в ЛК гостю его транзакции). \\ ''/api/v0/accounts/transactions'' — вернёт все транзакции по счёту за указанный период. \\ ''/api/v0/accounts/get_last_raw_transactions'' — вернёт N последних транзакций. |
| В некоторых случаях транзакция (которую нужно учесть в рамках ProBonus) происходит за рамками контура r_keeper (например, заказ на доставку который по итогу не будет создан в r_keeper, т.к. внешний модуль доставки не имеет интеграции с кассовой системой и существует отдельно). При этом сумма покупки должна быть учтена в оборотах по счету гостя (учет потрат для расчета лестницы, начисление/списание бонусов за внешнюю покупку и т.п.). | * **Обновить данные счёта** (изменить анкету, изменить скидку/бонус, срок жизни бонусов и т. п.). \\ ''/api/v0/accounts/update'' |
| Для этой цели используется метод **/api/v0/external/register_check**. | * **Получить данные конкретного чека** гостя (вплоть до блюд). \\ ''/api/v0/checks/get_by_id'' |
| | * **Если используются сгорающие бонусы.** \\ ''/api/v0/accounts/get_balance_extended'' — вернёт детализацию баланса счёта с указанием, когда и сколько сгорит. |
| |
| **Описание переменных** | ===== Начисление лояльности за покупки во внешней системе ===== |
| **restCode** - Код ресторана (из справочника Настройки-Рестораны), к которому нужно отнести данную транзакцию для отчетов. | |
| **checkGuid** - Уникальный номер внешней транзакции (в формате GUID). Важно! Система ProBonus не контролирует уникальность переданного GUID в рамках своей БД. Контроль уникальности лежит на внешней системе. | |
| **accountId** - id счета по которому совершена транзакция. | |
| **rkUnit** - Код станции (рабочего места) в ресторане, к которому нужно отнести данную транзакцию для отчетов. Рекомендуем указывать код, заведомо определяющий что это не настоящая станция в ресторане. Например, 999 или 888 или любой другой трёхзначный. | |
| **externalCheck** - Номер транзакции во внешней системе (может использоваться для дальнейшей сверки транзакций между двумя отчетами). | |
| **bonusSpentSum** - Сумма (в копейках), которую нужно списать со счета в оплату транзакции. | |
| **discountSum** - Сумма скидки (в копейках), которую гость получил во внешней системе | |
| **bonusAccruedSum** - Сумма (в копейках), которую нужно начислить на счет за данную транзакцию. | |
| **moneySpentSum** - Сумма (в копейках), которую гость потратил (оплатил) в рамках данной транзакции. | |
| **checkData** - Любая текстовая информация о содержимом внешнего чека. | |
| |
| Метод **/api/v0/external/return_check** используется для отката всех начислений сделанных в ProBonus в случае отмены покупки во внешней системе. | Учёт лояльности (скидки/бонусы/потраты) за все покупки, совершённые гостем через систему r_keeper, происходит автоматически, и все данные об этих транзакциях попадают в базу ProBonus. |
| |
| | В некоторых случаях транзакция (которую нужно учесть в рамках ProBonus) происходит за рамками контура r_keeper (например, заказ на доставку, который по итогу не будет создан в r_keeper, т. к. внешний модуль доставки не имеет интеграции с кассовой системой и существует отдельно). При этом сумма покупки должна быть учтена в оборотах по счёту гостя (учёт потрат для расчёта лестницы, начисление/списание бонусов за внешнюю покупку и т. п.). |
| |
| | Для этой цели используется метод **''/api/v0/external/register_check''**. |
| |
| | **Описание переменных:** |
| |
| | ^ Переменная ^ Описание ^ |
| | | ''restCode'' | Код ресторана (из справочника **Настройки → Рестораны**), к которому нужно отнести данную транзакцию для отчётов. | |
| | | ''checkGuid'' | Уникальный номер внешней транзакции (в формате GUID). **Важно!** Система ProBonus не контролирует уникальность переданного GUID в рамках своей БД. Контроль уникальности лежит на внешней системе. | |
| | | ''accountId'' | ID счёта, по которому совершена транзакция. | |
| | | ''rkUnit'' | Код станции (рабочего места) в ресторане, к которому нужно отнести данную транзакцию для отчётов. Рекомендуем указывать код, заведомо определяющий, что это не настоящая станция в ресторане. Например, 999 или 888 или любой другой трёхзначный. | |
| | | ''externalCheck'' | Номер транзакции во внешней системе (может использоваться для дальнейшей сверки транзакций между двумя отчётами). | |
| | | ''bonusSpentSum'' | Сумма (в копейках), которую нужно списать со счёта в оплату транзакции. | |
| | | ''discountSum'' | Сумма скидки (в копейках), которую гость получил во внешней системе. | |
| | | ''bonusAccruedSum'' | Сумма (в копейках), которую нужно начислить на счёт за данную транзакцию. | |
| | | ''moneySpentSum'' | Сумма (в копейках), которую гость потратил (оплатил) в рамках данной транзакции. | |
| | | ''checkData'' | Любая текстовая информация о содержимом внешнего чека. | |
| |
| | Метод **''/api/v0/external/return_check''** используется для отката всех начислений, сделанных в ProBonus, в случае отмены покупки во внешней системе. |
| |