Перейти к основному содержимому

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

  1. Получив событие, CRM создаёт crm_lead.
  2. Если уже существует лид с таким idempotencyKey — игнорирует.
  3. Если по контакту найден существующий crm_account — связывает.
  4. Публикует 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.

Связанные ADR

Связанные документы