feat: Получение cf_2624 из MySQL и блокировка полей при подтверждении данных
- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM - Обновлён метод get_draft() для получения cf_2624 напрямую из БД - Реализована блокировка полей (readonly) при contact_data_confirmed = true - Добавлен выбор банка для СБП выплат с динамической загрузкой из API - Обновлена документация по работе с cf_2624 и MySQL - Добавлен network_mode: host в docker-compose для доступа к MySQL - Обновлены компоненты формы для поддержки блокировки полей
This commit is contained in:
112
docs/N8N_SQL_PARAMETERS_DOCUMENT_SKIP.md
Normal file
112
docs/N8N_SQL_PARAMETERS_DOCUMENT_SKIP.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Параметры для SQL при пропуске документа
|
||||
|
||||
## Входные данные n8n
|
||||
|
||||
Массив с объектом:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"propertyName": {
|
||||
"session_id": "sess_f47c9f47-a727-4176-bf3d-26a02bb2fe24",
|
||||
"phone": "79262306381",
|
||||
"unified_id": "usr_90599ff2-ac79-4236-b950-0df85395096c",
|
||||
"contact_id": "320096",
|
||||
"claim_id": "bddb6815-8e17-4d54-a721-5e94382942c7",
|
||||
"description": "...",
|
||||
"email": "help@clientright.ru",
|
||||
...
|
||||
},
|
||||
"body": {
|
||||
"form_id": "ticket_form",
|
||||
"stage": "document_skip",
|
||||
"session_id": "sess_f47c9f47-a727-4176-bf3d-26a02bb2fe24",
|
||||
"claim_id": "bddb6815-8e17-4d54-a721-5e94382942c7",
|
||||
"unified_id": "usr_90599ff2-ac79-4236-b950-0df85395096c",
|
||||
"contact_id": "320096",
|
||||
"phone": "79262306381",
|
||||
"document_type": "correspondence",
|
||||
"document_name": "Переписка",
|
||||
"skipped": "true",
|
||||
"action": "skip",
|
||||
"skip_timestamp": "2025-11-27T12:35:46.915646",
|
||||
"group_index": "2"
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## Параметры для SQL
|
||||
|
||||
### $1 (JSONB payload)
|
||||
|
||||
Структура payload должна содержать данные в разных местах для совместимости с SQL:
|
||||
|
||||
```json
|
||||
{
|
||||
// В корне (для быстрого доступа)
|
||||
"session_id": "sess_f47c9f47-a727-4176-bf3d-26a02bb2fe24",
|
||||
"claim_id": "bddb6815-8e17-4d54-a721-5e94382942c7",
|
||||
"unified_id": "usr_90599ff2-ac79-4236-b950-0df85395096c",
|
||||
"contact_id": "320096",
|
||||
"phone": "79262306381",
|
||||
"document_type": "correspondence",
|
||||
"document_name": "Переписка",
|
||||
"group_index": 2,
|
||||
|
||||
// В body (SQL ищет здесь: p->'body'->>'document_type')
|
||||
"body": {
|
||||
"document_type": "correspondence",
|
||||
"document_name": "Переписка",
|
||||
"group_index": 2,
|
||||
"session_id": "sess_f47c9f47-a727-4176-bf3d-26a02bb2fe24",
|
||||
"claim_id": "bddb6815-8e17-4d54-a721-5e94382942c7",
|
||||
"unified_id": "usr_90599ff2-ac79-4236-b950-0df85395096c",
|
||||
"contact_id": "320096",
|
||||
"phone": "79262306381"
|
||||
},
|
||||
|
||||
// В edit_fields_raw (SQL ищет здесь: p->'edit_fields_raw'->'body'->>'document_type')
|
||||
"edit_fields_raw": {
|
||||
"propertyName": { ... },
|
||||
"body": { ... }
|
||||
},
|
||||
|
||||
// В edit_fields_parsed (SQL ищет здесь: p->'edit_fields_parsed'->'body'->>'document_type')
|
||||
"edit_fields_parsed": {
|
||||
"propertyName": { ... },
|
||||
"body": { ... }
|
||||
},
|
||||
|
||||
// Дополнительные поля
|
||||
"problem_description": "...",
|
||||
"email": "help@clientright.ru",
|
||||
"skipped": "true",
|
||||
"action": "skip",
|
||||
"skip_timestamp": "2025-11-27T12:35:46.915646"
|
||||
}
|
||||
```
|
||||
|
||||
### $2 (TEXT claim_id)
|
||||
|
||||
Просто строка с claim_id:
|
||||
```
|
||||
"bddb6815-8e17-4d54-a721-5e94382942c7"
|
||||
```
|
||||
|
||||
## Использование в n8n
|
||||
|
||||
1. **Code Node** (`N8N_CODE_PREPARE_DOCUMENT_SKIP_SQL.js`) - подготавливает параметры
|
||||
2. **PostgreSQL Node** - выполняет SQL запрос `SQL_CLAIMSAVE_DOCUMENT_SKIP.sql` с параметрами:
|
||||
- Parameter Name: `$1`, Value: `={{ $json.$1 }}` (JSON)
|
||||
- Parameter Name: `$2`, Value: `={{ $json.$2 }}` (String)
|
||||
|
||||
## Важно
|
||||
|
||||
SQL запрос ищет данные в следующем порядке:
|
||||
1. `partial.p->>'document_type'` - в корне payload
|
||||
2. `partial.p->'body'->>'document_type'` - в body
|
||||
3. `partial.p->'edit_fields_raw'->'body'->>'document_type'` - в edit_fields_raw.body
|
||||
4. `partial.p->'edit_fields_parsed'->'body'->>'document_type'` - в edit_fields_parsed.body
|
||||
|
||||
Поэтому payload должен содержать данные во всех этих местах для надёжности.
|
||||
|
||||
Reference in New Issue
Block a user