- Добавлен рабочий код для подготовки бинарных данных и вложений для узла Send email - Реализовано форматирование form_data в читаемый текст с разделами: * Личные данные (с автоматическим расчетом возраста, код документа, серия и номер) * Контактная информация * Страховщик (с телефоном страховой компании) * Банковские реквизиты (с получателем платежа) * Информация о страховом случае * Описание ситуации - Добавлена документация по использованию и устранению неполадок - Созданы альтернативные версии кода (простая версия, Function Node версия)
114 lines
5.3 KiB
JavaScript
114 lines
5.3 KiB
JavaScript
// ============================================================================
|
||
// 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];
|
||
|