Концепции, ценность и типичные сценарии клонирования — меньше кода.
Концепции, ценность и типичные сценарии клонирования — меньше кода.
Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
EN canonical: полная диаграмма, индексы JSONB и режимы cron/IDLE — Email AI-CRM architecture (EN)
| Путь | Роль |
|---|---|
services/email/email-processor.ts | Оркестратор: dedup, poll, ingest |
services/email/imap/ | pollBatch() для cron |
services/email/smtp/email-sender.ts | Исходящие ответы |
features/email-crm/repositories/ | JSONB Contact / Task / Draft |
features/email-crm/services/ | Thread, message, analytics, send |
Строка платформы: id, data, created_at, updated_at.
| Коллекция | Id документа |
|---|---|
email_threads | RFC thread root / Message-ID |
email_contacts | contact_<sha256(email)> |
email_messages | RFC Message-ID |
email_drafts | draft_<uuid> |
email_tasks | task_<uuid> |
email_api_usage | req_<timestamp>_<random> |
Миграции: 009_email_crm_jsonb.sql, 010_email_crm_tasks_jsonb.sql.
EMAIL_CRM_PERSISTENCE=memory — только dev/tests; иначе Postgres через фабрики сервисов.
| Механизм | Поведение |
|---|---|
| DB dedup | EmailMessageService.exists(messageId) |
| Poll mutex | Параллельный pollInboundBatch → { skipped: true } |
| pollBatch | Ждёт все handleEmail перед disconnect |
| Webhook | uid: 0 — без IMAP mark-seen |
| Режим | Когда |
|---|---|
| poll (рекомендуется) | k8s CronJob, serverless |
| start | Dedicated Node + instrumentation.ts |
| HTTP start | Debug: EMAIL_PROCESSOR_ALLOW_HTTP_START=true |
Bearer $CRON_SECRET или HMAC X-Email-Webhook-Signature.isPlatformAdmin.EN canonical: полная диаграмма, индексы JSONB и режимы cron/IDLE — Email AI-CRM architecture (EN)
| Путь | Роль |
|---|---|
services/email/email-processor.ts | Оркестратор: dedup, poll, ingest |
services/email/imap/ | pollBatch() для cron |
services/email/smtp/email-sender.ts | Исходящие ответы |
features/email-crm/repositories/ | JSONB Contact / Task / Draft |
features/email-crm/services/ | Thread, message, analytics, send |
Строка платформы: id, data, created_at, updated_at.
| Коллекция | Id документа |
|---|---|
email_threads | RFC thread root / Message-ID |
email_contacts | contact_<sha256(email)> |
email_messages | RFC Message-ID |
email_drafts | draft_<uuid> |
email_tasks | task_<uuid> |
email_api_usage | req_<timestamp>_<random> |
Миграции: 009_email_crm_jsonb.sql, 010_email_crm_tasks_jsonb.sql.
EMAIL_CRM_PERSISTENCE=memory — только dev/tests; иначе Postgres через фабрики сервисов.
| Механизм | Поведение |
|---|---|
| DB dedup | EmailMessageService.exists(messageId) |
| Poll mutex | Параллельный pollInboundBatch → { skipped: true } |
| pollBatch | Ждёт все handleEmail перед disconnect |
| Webhook | uid: 0 — без IMAP mark-seen |
| Режим | Когда |
|---|---|
| poll (рекомендуется) | k8s CronJob, serverless |
| start | Dedicated Node + instrumentation.ts |
| HTTP start | Debug: EMAIL_PROCESSOR_ALLOW_HTTP_START=true |
Bearer $CRON_SECRET или HMAC X-Email-Webhook-Signature.isPlatformAdmin.EN canonical: полная диаграмма, индексы JSONB и режимы cron/IDLE — Email AI-CRM architecture (EN)
| Путь | Роль |
|---|---|
services/email/email-processor.ts | Оркестратор: dedup, poll, ingest |
services/email/imap/ | pollBatch() для cron |
services/email/smtp/email-sender.ts | Исходящие ответы |
features/email-crm/repositories/ | JSONB Contact / Task / Draft |
features/email-crm/services/ | Thread, message, analytics, send |
Строка платформы: id, data, created_at, updated_at.
| Коллекция | Id документа |
|---|---|
email_threads | RFC thread root / Message-ID |
email_contacts | contact_<sha256(email)> |
email_messages | RFC Message-ID |
email_drafts | draft_<uuid> |
email_tasks | task_<uuid> |
email_api_usage | req_<timestamp>_<random> |
Миграции: 009_email_crm_jsonb.sql, 010_email_crm_tasks_jsonb.sql.
EMAIL_CRM_PERSISTENCE=memory — только dev/tests; иначе Postgres через фабрики сервисов.
| Механизм | Поведение |
|---|---|
| DB dedup | EmailMessageService.exists(messageId) |
| Poll mutex | Параллельный pollInboundBatch → { skipped: true } |
| pollBatch | Ждёт все handleEmail перед disconnect |
| Webhook | uid: 0 — без IMAP mark-seen |
| Режим | Когда |
|---|---|
| poll (рекомендуется) | k8s CronJob, serverless |
| start | Dedicated Node + instrumentation.ts |
| HTTP start | Debug: EMAIL_PROCESSOR_ALLOW_HTTP_START=true |
Bearer $CRON_SECRET или HMAC X-Email-Webhook-Signature.isPlatformAdmin.