Files
crm.clientright.ru/ticket_form/docs/N8N_CODE_PREPARE_EMAIL_ATTACHMENTS.js
Fedor ea0edafba5 Добавлена обработка бинарных данных и форматирование email для n8n workflow
- Добавлен рабочий код для подготовки бинарных данных и вложений для узла Send email
- Реализовано форматирование form_data в читаемый текст с разделами:
  * Личные данные (с автоматическим расчетом возраста, код документа, серия и номер)
  * Контактная информация
  * Страховщик (с телефоном страховой компании)
  * Банковские реквизиты (с получателем платежа)
  * Информация о страховом случае
  * Описание ситуации
- Добавлена документация по использованию и устранению неполадок
- Созданы альтернативные версии кода (простая версия, Function Node версия)
2025-12-26 14:51:58 +03:00

114 lines
5.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ============================================================================
// n8n Code Node: Подготовка бинарных данных для отправки email с вложениями
// ============================================================================
// Согласно документации n8n, поле "Attachments" в узле "Send email" ожидает:
// "Enter the name of the binary properties that contain data to add as an attachment"
// "Add multiple attachments by entering a comma-separated list of binary properties"
//
// ИСПОЛЬЗОВАНИЕ В УЗЛЕ "Send email":
// В поле "Attachments" используйте: {{ $json.attachment_field }}
//
// Это строка с именами бинарных свойств через запятую, например:
// "file_0,file_1,file_2,file_3"
//
// ⚠️ ВАЖНО:
// - Это должны быть ИМЕНА бинарных свойств (ключи из объекта binary), а не сами данные
// - Формат: строка через запятую, НЕ массив
// - Бинарные данные должны быть в объекте binary с соответствующими ключами
//
// ❌ НЕ используйте:
// - {{ $json.attachments }} (это массив объектов!)
// - {{ $json.attachment_keys }} (это массив строк!)
// - {{ Object.keys($binary) }} (это массив!)
// ============================================================================
// Проверяем наличие бинарных данных
// В n8n бинарные данные доступны через $binary или $input.item.binary
// Пробуем разные способы доступа к бинарным данным
let inputBinary = $binary;
if (!inputBinary || Object.keys(inputBinary).length === 0) {
// Пробуем через $input
try {
inputBinary = $input.item?.binary || $input?.binary || $binary;
} catch (e) {
inputBinary = $binary;
}
}
if (!inputBinary || Object.keys(inputBinary).length === 0) {
// Если бинарных данных нет, возвращаем данные без изменений
return [{
json: {
...$json,
attachment_field: '',
attachments: [],
attachment_keys: [],
error: 'No binary data found',
debug: {
binaryKeys: Object.keys(inputBinary || {}),
hasBinary: !!inputBinary,
hasDollarBinary: !!$binary,
dollarBinaryKeys: Object.keys($binary || {})
}
}
}];
}
// Создаем объект для бинарных данных и массивы для разных форматов
const binary = {};
const attachmentString = [];
const attachmentArray = []; // Массив объектов для поля Attachments
const attachmentKeys = []; // Простой массив ключей (альтернативный формат)
let i = 0;
// Преобразуем все бинарные данные в формат file_0, file_1, etc.
for (const key of Object.keys(inputBinary)) {
const newKey = `file_${i}`;
const fileData = inputBinary[key];
// Копируем бинарные данные с сохранением всех свойств
binary[newKey] = {
...fileData,
fileName: fileData.fileName || fileData.name || `file_${i}.pdf`,
name: fileData.name || fileData.fileName || `file_${i}.pdf`
};
attachmentString.push(newKey);
attachmentKeys.push(newKey);
// Создаем объект для поля Attachments узла "Send email"
// ВАЖНО: data должен быть строкой с ключом, а не объектом
attachmentArray.push({
name: fileData.fileName || fileData.name || `file_${i}.pdf`,
data: newKey // Строка-ключ для ссылки на бинарные данные
});
i++;
}
// ⚠️ КРИТИЧНО: Бинарные данные должны быть переданы в объекте binary
// Ключи в binary должны совпадать с именами в attachment_field!
// В n8n Code Node нужно явно указать binary в возвращаемом объекте
const result = {
json: {
...$json,
// ⚠️ ВАЖНО: Строка с именами бинарных свойств через запятую БЕЗ ПРОБЕЛОВ
// Это именно то, что ожидает узел "Send email" согласно документации:
// "Enter the name of the binary properties... comma-separated list of binary properties"
// Формат: "file_0,file_1,file_2" - имена ключей из объекта binary
// ⚠️ Убираем все пробелы, чтобы имена точно совпадали с ключами в binary
attachment_field: attachmentString.join(',').replace(/\s+/g, ''),
// Массив объектов (для других целей, если нужно)
attachments: attachmentArray,
// Простой массив ключей (для отладки или других целей)
attachment_keys: attachmentKeys
},
// ⚠️ КРИТИЧНО: Бинарные данные должны быть переданы в объекте binary
binary: binary
};
// Возвращаем данные с бинарными файлами
return [result];