# Обновление 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 } } ```