- Исправлена потеря документов при обновлении черновика (SQL объединяет вместо перезаписи) - Исправлено определение типа документа (приоритет field_label над field_name) - Исправлены дубликаты в documents_meta и documents_uploaded - Добавлена передача group_index с фронтенда для правильного field_name - Исправлены все документы в таблице clpr_claim_documents с правильными field_name - Обновлены SQL запросы: claimsave и claimsave_final для нового флоу - Добавлена поддержка multi-file upload для одного документа - Исправлены дубликаты в списке загруженных документов на фронтенде Файлы: - SQL: SQL_CLAIMSAVE_FIXED_NEW_FLOW.sql, SQL_CLAIMSAVE_FINAL_FIXED_NEW_FLOW_WITH_UPLOADED.sql - n8n: N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js (поддержка group_index) - Backend: documents.py (передача group_index в n8n) - Frontend: StepWizardPlan.tsx (передача group_index, исправление дубликатов) - Скрипты: fix_claim_documents_field_names.py, fix_documents_meta_duplicates.py Результат: документы больше не теряются, имеют правильные типы и field_name
5.4 KiB
Лог сессии 25.11.2025
Основные задачи
1. Передача unified_id и contact_id в описание проблемы
Файлы:
backend/app/api/models.py— добавлены поляunified_idиcontact_idвTicketFormDescriptionRequestbackend/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_idbackend/app/api/claims.py— передача unified_id, contact_id в Redisfrontend/src/components/form/StepDescription.tsx— передача unified_id, contact_idfrontend/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 ✅ Тестирование успешно