CRM и Модуль Лидогенерации

Модуль интеграции с CRM (app/services/crm.py и app/services/crm_providers/) предназначен для автоматического экспорта контактов, ответов на лид-формы и саммари диалогов во внешние отделы продаж.

sequenceDiagram autonumber actor User as Пользователь (WebChat / TG) participant Form as Лид-Форма / Диалог participant Service as CRM Exporter (export_user_to_crm) participant LLM as LLM Summarizer (_build_chat_summary) participant Factory as CRM Provider Factory participant CRM as AmoCRM / Bitrix24 / Custom Webhook User->>Form: Заполнение контактов (Имя, Телефон, Email) Form->>Form: Проверка согласия (user.crm_consent_granted) alt Согласие Получено (crm_consent_granted = True) Service->>LLM: Формирование саммари диалога (_build_chat_summary) LLM-->>Service: Выжимка потребностей клиента Service->>Factory: get_crm_provider(crm_config) Factory->>CRM: Отправка CrmLeadPayload (Имя, Телефон, Email, CustomVars, Summary) CRM-->>Service: Успешное создание сделки/контакта (200 OK) else Согласие Не Предоставлено Service->>Service: Запись события аудита (crm.export_refused_no_consent) Note over Service: Экспорт отменяется (Fail-Safe Consent Gate) end

Поддерживаемые Провайдеры CRM

Провайдер Класс Способ Интеграции Передаваемые Данные
AmoCRM AmoCrmProvider OAuth API v4 / Lead Pipelines Сделка, Контакт, Примечание с саммари диалога, Пользовательские поля
Bitrix24 Bitrix24Provider REST API Webhook (crm.lead.add) Лид, Телефон, Email, Описание задачи
Custom Webhook WebhookCrmProvider POST JSON Webhook Полный payload CrmLeadPayload с HMAC-подписью

Структура Передаваемых Данных (CrmLeadPayload)

class CrmLeadPayload(BaseModel):
    name: str | None
    phone: str | None
    email: str | None
    chat_summary: str | None
    metric_score: int | None
    referral_code: str | None
    custom_vars: dict[str, Any] | None

Безопасность и Аудит

  1. Шифрование Ключей (CrmConfig.api_key): API-ключи и вебхуки CRM хранятся в БД зашифрованными методом Fernet (EncryptedString).
  2. Маскирование в Админ-Панели: В интерфейсе настройки CRM ключи скрыты маской SECRET_MASK (******).
  3. Журнал Аудита: Каждая попытка отправки или отказ из-за отсутствия согласия фиксируются в аудит-логе (log_audit_event).