Files
crm.clientright.ru/ticket_form/SESSION_LOG_2025-11-25.md
Fedor 52fe013375 feat(ticket_form): unified_id/contact_id передача, исправлен мерж сессии, новая сессия для жалобы
- Добавлены unified_id и contact_id в TicketFormDescriptionRequest
- Исправлен CODE_MERGE_PROJECT_TO_SESSION.js - теперь сохраняются ВСЕ данные из body.other
- Добавлен fallback на получение other из Webhook напрямую
- Генерация новой session_id при создании новой жалобы (сохраняя авторизацию)
- Добавлен SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql для CRM контактов
- Создан SESSION_LOG_2025-11-25.md с документацией сессии
2025-11-25 20:02:21 +03:00

5.4 KiB
Raw Permalink Blame History

Лог сессии 25.11.2025

Основные задачи

1. Передача unified_id и contact_id в описание проблемы

Файлы:

  • backend/app/api/models.py — добавлены поля unified_id и contact_id в TicketFormDescriptionRequest
  • backend/app/api/claims.py — добавлена передача unified_id и contact_id в Redis событие
  • frontend/src/components/form/StepDescription.tsx — добавлена передача unified_id и contact_id при отправке описания

Результат: При отправке описания проблемы теперь передаются unified_id и contact_id пользователя.


2. Структура таблиц CRM MySQL для контактов

Основные таблицы:

  • vtiger_contactdetails — основные данные (firstname, lastname, email, mobile, phone)
  • vtiger_contactscf — кастомные поля:
    • cf_1157 — Отчество (middle_name)
    • cf_1263 — Место рождения (birthplace)
    • cf_1257 — ИНН (inn)
    • cf_1849 — Реквизиты (requisites)
    • cf_1580 — Код (code)
  • vtiger_contactsubdetails — дополнительные данные (birthday, homephone)
  • vtiger_contactaddress — адреса (mailingstreet, mailingcity, и т.д.)

Создан файл: docs/SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql — правильный SQL запрос для получения всех данных контакта


3. Исправление Code Node: Мерж данных проекта в сессию

Проблема: Данные из body.other (sessionData) не сохранялись в Redis — терялись все данные пользователя.

Причина: К моменту выполнения Code Node структура данных менялась (body_keys: ["success", "result"]), и body.other был недоступен.

Решение: Добавлен fallback на получение other напрямую из Webhook:

// ✅ Пробуем также достать other из Webhook напрямую
if (!rawOther) {
  try {
    const webhookJson = $('Webhook').first()?.json;
    if (webhookJson?.body?.other) {
      rawOther = webhookJson.body.other;
    }
  } catch (e) {}
}

Файл: docs/CODE_MERGE_PROJECT_TO_SESSION.js

Результат: Теперь в Redis сохраняются ВСЕ данные:

  • session_id, phone, unified_id, contact_id
  • lastname, firstname, middle_name
  • birthday, birthplace, inn
  • mailingzip, mailingstreet, email, tg_id
  • description
  • claim_id, project_id, project_name
  • is_new_project, current_step

4. Генерация новой сессии для новой жалобы

Проблема: При создании новой жалобы использовалась та же сессия, что и для предыдущей.

Решение:

  • Добавлена функция generateUUIDv4() в ClaimForm.tsx
  • При создании новой жалобы генерируется новый session_id
  • session_token в localStorage (авторизация) остаётся прежним
  • unified_id, phone, contact_id сохраняются

Файл: frontend/src/pages/ClaimForm.tsx


Созданные/обновлённые файлы

Новые файлы:

  • docs/SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql — SQL запрос для контактов с кастомными полями

Обновлённые файлы:

  • backend/app/api/models.py — добавлены unified_id, contact_id
  • backend/app/api/claims.py — передача unified_id, contact_id в Redis
  • frontend/src/components/form/StepDescription.tsx — передача unified_id, contact_id
  • frontend/src/pages/ClaimForm.tsx — генерация новой сессии для новой жалобы
  • docs/CODE_MERGE_PROJECT_TO_SESSION.js — исправлен мерж данных в сессию

Технические детали

Redis канал для описания проблемы

  • Канал: ticket_form:description
  • Передаваемые данные: session_id, phone, email, unified_id, contact_id, problem_description

Redis канал для подтверждения формы

  • Канал: clientright:webform:approve
  • Включает SMS код для верификации

Структура сессии в Redis

{
  "session_id": "sess_...",
  "phone": "79262306381",
  "unified_id": "usr_...",
  "contact_id": "320096",
  "lastname": "Коробков",
  "firstname": "Федор",
  "middle_name": "Владимирович",
  "birthday": "1981-09-18",
  "birthplace": "Москва",
  "inn": "123456789012",
  "mailingstreet": "...",
  "email": "help@clientright.ru",
  "tg_id": "295410106",
  "description": "...",
  "claim_id": "...",
  "project_id": "399171",
  "project_name": "Коробков_КлиентПрав",
  "is_new_project": false,
  "current_step": 2
}

Статус

Все задачи выполнены Backend пересобран и перезапущен Frontend обновлён через HMR Тестирование успешно