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

136 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лог сессии 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:
```javascript
// ✅ Пробуем также достать 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
```json
{
"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
✅ Тестирование успешно