Данное техническое задание описывает общую архитектуру интеграции между сайтом , CRM-системами и программой лояльности.
:Система реализует распределенную Event-Driven архитектуру, где CRM-система выступает в качестве модератора бизнес-процессов, координируя взаимодействие между точкой продажи (InSales) и сервисом лояльности (MAXMA).
:CRM выполняет функции центра управления жизненным циклом заказа, включая:
- Модерацию и валидацию заказов
- Управление статусами и workflow
- Координацию бонусных операций
- Синхронизацию данных между системами
:Представленная архитектура является платформенно-независимой и может быть реализована с использованием различных CRM-систем, включая:
- (любые конфигурации с модулем заказов)
- (с активированным e-commerce модулем)
- Другие системы с REST API и возможностями workflow
:Процесс предполагает человеко-ориентированную модерацию заказов, где менеджер в CRM-системе принимает решения по:
- Подтверждению/отклонению заказов
- Корректировке состава заказа
- Управлению бонусными операциями
- Обработке возвратов
: Синхронизация данных о заказах между InSales, 1С и платформой лояльности MAXMA.:
- : CMS интернет-магазина.
- : Система управления заказами и складом.
- : SaaS-платформа для управления программой лояльности.
:
- Все операции в MAXMA используют уникальный индификатор
orderId, полученный при создании заказа. - ID товаров в MAXMA передаются в поле
externalId. - Данные в 1С передаются с учётом финальных скидок после применения баллов лояльности.
Клиент оформляет заказ в InSales.
InSales отправляет в 1С данные заказа с рассчитанными скидками и orderId.
InSales передаёт в MAXMA запрос:
{
"calculationQuery": {
"applyBonuses": 0,
"client": {
"phoneNumber": "+79000000000"
},
"collectBonuses": "auto",
"discountRoundStep": 0,
"executedAt": "2025-01-14T16:36:04+03:00",
"rows": [
{
"autoDiscount": 0,
"id": "266233",
"manualDiscount": 0,
"noApplyBonuses": false,
"noCollectBonuses": false,
"noOffer": false,
"noPromocode": false,
"product": {
"blackPrice": 2790,
"externalId": "131135",
"minPrice": 0,
"redPrice": 3290,
"sku": "3bb4fce9-18bc-11ed-9ec2-000c292cefe1",
"title": "Название товара"
},
"qty": 1
}
],
"shop": {
"code": "site",
"name": "site"
}
},
"orderId": "85333"
}
Если менеджер изменяет заказ (добавляет/удаляет товары, списывает баллы):
1С выполняет перерасчет данных.
1C отправляет в MAXMA запрос:
- :
POST /v2/calculate-purchase - :
{
"calculationQuery": {
"applyBonuses": 100,
"client": {
"phoneNumber": "+79000000000"
},
"collectBonuses": "auto",
"discountRoundStep": 0,
"rows": [
{
"autoDiscount": 0,
"id": "266233",
"manualDiscount": 0,
"noApplyBonuses": false,
"noCollectBonuses": false,
"noOffer": false,
"noPromocode": false,
"product": {
"blackPrice": 2790,
"externalId": "131135",
"minPrice": 0,
"redPrice": 3290,
"sku": "3bb4fce9-18bc-11ed-9ec2-000c292cefe1",
"title": "Название товара"
},
"qty": 1
}
],
"shop": {
"code": "site",
"name": "site"
}
}
}
После успешного ответа от MAXMA 1С отправляет обновлённый заказ:
- :
POST /v2/set-order - : Аналогично п.2, но с обновлёнными позициями и тем же
orderId.
- : Только до подтверждения заказа.
- :
POST /cancel-order - :
{
"orderId": "85333",
"executedAt": "2025-01-14T16:36:04+03:00"
}
{
"orderId": "85333",
"executedAt": "2025-01-14T16:36:04+03:00"
}
{
"transaction": {
"id": "l23093295329",
"executedAt": "2025-01-14T16:36:04+03:00",
"purchaseId": "85333",
"refundAmount": 3290,
"shopCode": "site",
"shopName": "site",
"cashier": "Иванов Иван Иванович",
"cashierId": "A0000275",
"items": [
{
"sku": "3bb4fce9-18bc-11ed-9ec2-000c292cefe1",
"itemCount": 1
}
]
}
}
- : Уникальный номер заказа, неизменный на всех этапах.
- : ID товара в MAXMA. Должен совпадать с ID в InSales/1C.
- : Артикул товара в системе магазина.
- : Телефон клиента для идентификации в программе лояльности.
- : Дата и время операции в формате ISO 8601 с часовым поясом.
- : Код и название магазина.
- : Цена без скидки.
- : Цена с переоценкой, всегда идет в приоритете чем .
- При изменении заказа обязательно передавать тот же
orderId. - Поле
applyBonuses в calculate-purchase указывает количество списываемых бонусов. - Для возвратов генерировать уникальный
transaction.id. - Все временные метки должны быть актуальными и соответствовать времени операции.
- Если происходит перерасчет, важно что бы 1С отправляла исходные суммы товаров без скидок.
: Перед реализацией проверить тестовое окружение MAXMA для валидации сценариев.