- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM - Обновлён метод get_draft() для получения cf_2624 напрямую из БД - Реализована блокировка полей (readonly) при contact_data_confirmed = true - Добавлен выбор банка для СБП выплат с динамической загрузкой из API - Обновлена документация по работе с cf_2624 и MySQL - Добавлен network_mode: host в docker-compose для доступа к MySQL - Обновлены компоненты формы для поддержки блокировки полей
4.8 KiB
4.8 KiB
Обновление 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
};
}
Логика работы
-
При создании/поиске контакта:
CreateWebContactвозвращаетcf_2624в ответе- Извлекаем значение и передаём в ответе для фронтенда
-
При загрузке черновика:
- Backend API
/drafts/{claim_id}уже получаетcf_2624из CRM - Фронтенд получает
contact_data_confirmedиз ответа API - Передаёт в
StepClaimConfirmation→generateConfirmationFormHTML
- Backend API
-
При формировании заявления:
- Если
cf_2624 = "1"→ поля персональных данных блокируются (readonly) - Если
cf_2624 = "0"→ поля можно редактировать
- Если
Проверка
- ✅
CreateWebContactвозвращаетcf_2624в ответе - ⏳ n8n workflow извлекает
cf_2624и передаёт в ответе - ⏳ Фронтенд получает
contact_data_confirmedи блокирует поля - ⏳ 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
}
}