136 lines
5.4 KiB
Markdown
136 lines
5.4 KiB
Markdown
|
|
# Лог сессии 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
|
|||
|
|
✅ Тестирование успешно
|
|||
|
|
|