storefront → crm
Зачем нужно
Витрина передаёт лиды из публичных форм в CRM. CRM создаёт crm_lead и продолжает воронку.
Для каталога и product_trajectory_block storefront также читает CRM public product/product run/price/availability projection. Storefront не становится владельцем продукта и не меняет product -> roadmap refs без канонических source refs из CRM/LMS.
Стороны
- источник: storefront
- потребитель: crm
- вид: event-driven + резерв domain command
События
| messageType | Когда |
|---|---|
storefront.lead.submitted | заполнена публичная форма |
Read-model CRM для витрины
Витрина использует CRM projection:
product_ref;product_run_ref;- price или публичный price range;
- availability;
- capacity summary без приватных данных;
- CTA state;
- LMS roadmap refs, если продукт связан с program/module/topic/pathway.
Ручная подмена связи product -> roadmap на лендинге запрещена. Если нужно изменить связь, правка должна пройти через CRM product/product run refs или LMS roadmap projection.
Payload storefront.lead.submitted
{
"leadId": "uuid",
"formKey": "string",
"submittedAt": "ISO 8601",
"subjectKey": "string?",
"productRef": "string?",
"campaign": "string?",
"utm": { "source": "...", "medium": "...", "campaign": "...", "content": "...", "term": "..." },
"contact": {
"name": "string?",
"email": "string?",
"phone": "string?",
"telegram": "string?"
},
"message": "string?",
"consent": {
"personalData": true,
"marketing": false
},
"ipHash": "string?",
"userAgent": "string?",
"idempotencyKey": "string"
}
Идемпотентность
idempotencyKey=leadIdисточника;- CRM пишет в
crm_lead.source_idempotency_key UNIQUE.
Поведение CRM
- Получив событие, CRM создаёт
crm_lead. - Если уже существует лид с таким
idempotencyKey— игнорирует. - Если по контакту найден существующий
crm_account— связывает. - Публикует
crm.lead.created.
Ошибки
| Сценарий | Поведение |
|---|---|
| невалидные контактные данные | CRM создаёт лид со статусом invalid_contacts, событие в management |
| дубль по idempotencyKey | игнор |
| ошибка сохранения | retry через шину, после N — DLQ |
Права и scopes
- storefront-api публикует событие как сервис, нет пользовательской авторизации;
- consent подтверждается формой и хранится в payload.
Retention
- события 30 дней;
- лиды в CRM — по политике CRM (минимум 3 года).
Безопасность
- персональные данные шифруются at-rest в crm БД;
- IP хешируется уже в storefront, ни один сервис не хранит чистый IP;
- storefront валидирует формы и применяет rate limit + honeypot/captcha.