148 lines
4.8 KiB
Markdown
148 lines
4.8 KiB
Markdown
|
|
# Обновление 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
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|