Files
aiform_prod/docs/N8N_UPDATE_CF_2624_IN_RESPONSE.md
AI Assistant 080e7ec105 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
- Обновлены компоненты формы для поддержки блокировки полей
2025-12-04 12:22:23 +03:00

4.8 KiB
Raw Blame 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

Код:

// Парсим результат 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:

// Получаем данные о подтверждении из предыдущей ноды
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)

Если есть нода для загрузки черновика:

// Получаем 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
    • Передаёт в StepClaimConfirmationgenerateConfirmationFormHTML
  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:

{
  "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
  }
}