Files
crm.clientright.ru/ticket_form/docs/CODE1_FIX.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

106 lines
3.1 KiB
Markdown
Raw 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.

# Исправление ошибки в Code1: mapDialogHistory
## Проблема
**Ошибка:**
```
Cannot read properties of null (reading 'map') [line 69]
```
**Причина:**
Функция `mapDialogHistory` получает `null` вместо массива, когда `src.dialog_history` равен `null`.
## Исправление
### Текущий код (строка 69):
```javascript
function mapDialogHistory(h = []) {
return h.map(m => ({
id: toNullish(m.id),
role: toNullish(m.role),
message: toNullish(m.message),
message_type: toNullish(m.message_type),
tg_message_id: toNullish(m.tg_message_id),
created_at: toNullish(m.created_at),
}));
}
```
### Исправленный код:
```javascript
function mapDialogHistory(h = []) {
// Проверяем, что h не null и является массивом
if (!h || !Array.isArray(h)) return [];
return h.map(m => ({
id: toNullish(m.id),
role: toNullish(m.role),
message: toNullish(m.message),
message_type: toNullish(m.message_type),
tg_message_id: toNullish(m.tg_message_id),
created_at: toNullish(m.created_at),
}));
}
```
## Альтернативное решение
Можно также исправить в месте вызова:
```javascript
// В функции normalizeOne, строка ~172
dialog_history: mapDialogHistory(src.dialog_history || []),
```
Но лучше исправить саму функцию, чтобы она была более устойчивой.
## Полный исправленный код функции mapDialogHistory
```javascript
function mapDialogHistory(h = []) {
// Проверяем, что h не null и является массивом
if (!h || !Array.isArray(h)) return [];
return h.map(m => ({
id: toNullish(m.id),
role: toNullish(m.role),
message: toNullish(m.message),
message_type: toNullish(m.message_type),
tg_message_id: toNullish(m.tg_message_id),
created_at: toNullish(m.created_at),
}));
}
```
## Почему это происходит
Когда SQL запрос в ноде `give_data1` возвращает `null` для `dialog_history` (если нет записей в `clpr_dialog_history_tg`), функция `mapDialogHistory` получает `null` вместо массива.
PostgreSQL `jsonb_agg` возвращает `null`, если нет строк для агрегации, а не пустой массив `[]`.
## Дополнительные проверки
Можно также добавить проверки для других функций, которые работают с массивами:
```javascript
function mapDocuments(docs = []) {
if (!docs || !Array.isArray(docs)) return [];
return docs.map(d => ({...}));
}
function mapVisionDocs(vds = []) {
if (!vds || !Array.isArray(vds)) return [];
return vds.map(v => ({...}));
}
function mapCombinedDocs(cds = []) {
if (!cds || !Array.isArray(cds)) return [];
return cds.map(c => ({...}));
}
```
Но для `mapDialogHistory` это критично, т.к. она вызывается первой и падает.