crm → lms
Зачем нужно
CRM выдаёт коммерческие права доступа (entitlements) и сообщает LMS, какие учебные subjects имеют право учиться по каким продуктам. Покупатель/плательщик и получатель продукта не обязаны совпадать.
Стороны
- источник: crm
- потребитель: lms
- вид: event-driven
События
| messageType | Когда |
|---|---|
crm.entitlement.activated | право доступа активно |
crm.entitlement.suspended | временно приостановлено |
crm.entitlement.resumed | возобновлено |
crm.entitlement.expired | срок истёк |
crm.entitlement.revoked | отозвано (рефанд, ручная отмена) |
Payload crm.entitlement.activated
{
"entitlementId": "uuid",
"accountId": "uuid",
"purchaserUserId": "uuid?",
"beneficiary": {
"type": "student_profile|user|family_group|organization|manual",
"ref": "uuid?"
},
"enrollmentSubject": {
"type": "student_profile|user|organization_student|manual",
"ref": "uuid"
},
"productRef": "string",
"productRunId": "uuid?",
"targetDomain": "lms",
"scope": {
"courseRef": "string?",
"groupId": "uuid?",
"topicRefs": ["string"]
},
"startsAt": "ISO 8601",
"endsAt": "ISO 8601?",
"limits": {
"sessionsTotal": 12,
"sessionsRemaining": 12
},
"reason": "purchase|gift|manual|migration",
"idempotencyKey": "string"
}
Поведение LMS
- По активации — создать или обновить
lms_enrollmentдляenrollmentSubject. - По suspended/resumed — менять статус enrollment.
- По revoked/expired — закрывать enrollment, не удаляя историю.
- Учебные данные (прогресс, evidence) сохраняются.
Идемпотентность
- по
entitlementId+messageVersion; idempotencyKeyгарантирует дубль не приведёт к двум enrollments.
Ошибки
| Сценарий | Поведение |
|---|---|
| LMS не находит пользователя | retry с backoff; после N — DLQ + алерт |
| productRef неизвестен LMS | DLQ + операционный алерт |
| user заблокирован | enrollment в статусе blocked |
Права и scopes
- CRM публикует как сервис;
- LMS подписан с consumer group
lms-api.
Retention
- события 90 дней (финансово-связанные);
- enrollment в LMS — пока активен и 6 месяцев после revoke (затем агрегируется в audit).