Files
aiform_prod/docs/N8N_UPDATE_CF_2624_IN_RESPONSE.md

148 lines
4.8 KiB
Markdown
Raw Normal View History

# Обновление n8n workflow: Использование cf_2624 из CreateWebContact
## Задача
При формировании заявления проверять значение `cf_2624` из ответа `CreateWebContact`:
- Если `cf_2624 = "0"` → данные можно редактировать
- Если `cf_2624 = "1"` → данные только для просмотра (readonly)
## Изменения в workflow 6mxRJ2LLHmQXyaDz
### 1. После ноды `CreateWebContacКлиентправ`
**Название ноды:** `Code: Extract Contact Data Confirmed`
**Код:**
```javascript
// Парсим результат CreateWebContact
const rawResult = $node["CreateWebContacКлиентправ"].json.result;
const contactData = JSON.parse(rawResult);
// Извлекаем cf_2624 (Данные подтверждены)
// "1" = данные подтверждены, "0" = не подтверждены
const cf_2624 = contactData.cf_2624 || "0";
const contact_data_confirmed = cf_2624 === "1";
console.log('🔒 Статус данных контакта:', {
contact_id: contactData.contact_id,
is_new: contactData.is_new,
cf_2624: cf_2624,
contact_data_confirmed: contact_data_confirmed
});
return {
contact_id: contactData.contact_id,
is_new_contact: contactData.is_new,
cf_2624: cf_2624,
contact_data_confirmed: contact_data_confirmed,
contact_data_can_edit: !contact_data_confirmed
};
```
---
### 2. В ноде `Code in JavaScriptКлиентправ` (формирование ответа для фронтенда)
**Добавить в return:**
```javascript
// Получаем данные о подтверждении из предыдущей ноды
const contactStatus = $('Code: Extract Contact Data Confirmed').first().json;
return {
// ... существующие поля ...
session: session_id,
session_id: session_id,
unified_id: unified_id,
contact_id: contactStatus.contact_id,
is_new_contact: contactStatus.is_new_contact,
// ✅ Флаги подтверждения данных контакта (из cf_2624)
contact_data_confirmed: contactStatus.contact_data_confirmed || false,
contact_data_can_edit: contactStatus.contact_data_can_edit !== false,
cf_2624: contactStatus.cf_2624 || "0",
// ... остальные поля ...
};
```
---
### 3. При загрузке черновика (если используется отдельный workflow)
**Если есть нода для загрузки черновика:**
```javascript
// Получаем contact_id из черновика
const contact_id = $json.contact_id || $json.payload?.contact_id;
if (contact_id) {
// Вызываем CreateWebContact для получения cf_2624
// (или используем retrieve из CRM)
// Для простоты можно использовать retrieve:
const retrieveResult = await $http.post('{{ $env.CRM_WEBSERVICE_URL }}', {
operation: 'retrieve',
sessionName: $('Login to CRM').json.sessionName,
id: `12x${contact_id}`
});
const cf_2624 = retrieveResult.result?.cf_2624 || "0";
const contact_data_confirmed = cf_2624 === "1";
return {
// ... данные черновика ...
contact_data_confirmed: contact_data_confirmed,
contact_data_can_edit: !contact_data_confirmed,
cf_2624: cf_2624
};
}
```
---
## Логика работы
1. **При создании/поиске контакта:**
- `CreateWebContact` возвращает `cf_2624` в ответе
- Извлекаем значение и передаём в ответе для фронтенда
2. **При загрузке черновика:**
- Backend API `/drafts/{claim_id}` уже получает `cf_2624` из CRM
- Фронтенд получает `contact_data_confirmed` из ответа API
- Передаёт в `StepClaimConfirmation``generateConfirmationFormHTML`
3. **При формировании заявления:**
- Если `cf_2624 = "1"` → поля персональных данных блокируются (readonly)
- Если `cf_2624 = "0"` → поля можно редактировать
---
## Проверка
1.`CreateWebContact` возвращает `cf_2624` в ответе
2. ⏳ n8n workflow извлекает `cf_2624` и передаёт в ответе
3. ⏳ Фронтенд получает `contact_data_confirmed` и блокирует поля
4. ⏳ Backend API `/drafts/{claim_id}` получает `cf_2624` из CRM
---
## Пример ответа от n8n:
```json
{
"success": true,
"result": {
"session": "sess_...",
"contact_id": "399542",
"unified_id": "usr_...",
"contact_data_confirmed": true,
"contact_data_can_edit": false,
"cf_2624": "1",
"is_new_contact": false
}
}
```