Files
aiform_prod/docs/N8N_FLIGHTS_HTML_TO_PDF_EXAMPLE.js
AI Assistant 2e45786e46 feat: Telegram Mini App integration and UX improvements
- Добавлена полная интеграция с Telegram Mini App (динамическая загрузка SDK)
- Отдельный компактный дизайн для Telegram Mini App
- Добавлен loader при инициализации (предотвращает мелькание SMS-авторизации)
- Улучшена навигация: кнопки "Назад" и "К списку заявок" теперь сохраняют авторизацию
- Telegram Mini App: кнопка "Выход" просто закрывает приложение
- Telegram Mini App: заявки "В работе" скрыты из списка
- Веб-версия: для заявок "В работе" добавлена кнопка "Просмотреть в Telegram" (ссылка на @klientprav_bot)
- Telegram Mini App: кнопки действий в черновиках расположены вертикально
- Веб-версия: убрано отображение номера телефона в приветствии
- Исправлена проблема с возвратом к списку черновиков (не требует повторной SMS-авторизации)
- Заблокировано удаление и редактирование заявок со статусом "В работе"
- Добавлена документация по Telegram Mini App интеграции
2026-01-29 16:12:48 +03:00

97 lines
3.5 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: Конвертация HTML в Base64 PDF
// ============================================================================
// Используйте этот код после "Code: Process Flights Data"
// для подготовки данных для конвертации в PDF и получения base64
// ============================================================================
// Получаем HTML из предыдущей ноды
const processedData = $('Code: Process Flights Data').first().json;
if (!processedData || !processedData.html) {
throw new Error('HTML не получен из предыдущей ноды');
}
const html = processedData.html;
// ==== ВАРИАНТ 1: HTTP Request к сервису, который возвращает base64 PDF ====
// Используйте этот вариант с HTTP Request нодой после этого Code Node
// Сервисы, которые поддерживают base64:
// - htmlpdfapi.com
// - pdfshift.io
// - api2pdf.com
// - и другие
return [{
json: {
method: 'POST',
url: 'https://api.htmlpdfapi.com/v1/pdf', // Замените на ваш сервис
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY' // Замените на ваш API ключ
},
body: JSON.stringify({
html: html,
options: {
format: 'A4',
printBackground: true,
margin: {
top: '20mm',
right: '15mm',
bottom: '20mm',
left: '15mm'
}
},
// Если сервис поддерживает прямое возвращение base64
base64: true
})
}
}];
// ==== ВАРИАНТ 2: Если сервис возвращает binary, конвертируем в base64 ====
// Используйте этот код в Code Node ПОСЛЕ HTTP Request ноды
// (когда получили PDF в binary формате)
/*
const pdfBinary = $binary.data; // Получаем binary данные из HTTP Request
// Конвертируем binary в base64
const base64 = pdfBinary.toString('base64');
return [{
json: {
pdf_base64: base64,
pdf_size_bytes: pdfBinary.length,
pdf_size_mb: (pdfBinary.length / (1024 * 1024)).toFixed(2),
flights_count: processedData.flights_count,
generated_at: processedData.generated_at,
filename: `flights-report-${new Date().toISOString().split('T')[0]}.pdf`
}
}];
*/
// ==== ВАРИАНТ 3: Использование Execute Command с wkhtmltopdf ====
// Если у вас установлен wkhtmltopdf на сервере n8n
// Раскомментируйте и используйте в Execute Command ноде
/*
// Сохраняем HTML во временный файл
const htmlBase64 = Buffer.from(html, 'utf8').toString('base64');
const timestamp = Date.now();
const htmlFile = `/tmp/flights-${timestamp}.html`;
const pdfFile = `/tmp/flights-${timestamp}.pdf`;
// Команда для Execute Command ноды:
// echo '{{ $json.html_base64 }}' | base64 -d > {{ $json.html_file }} && \
// wkhtmltopdf --page-size A4 --margin-top 20mm --margin-right 15mm --margin-bottom 20mm --margin-left 15mm \
// --print-media-type {{ $json.html_file }} {{ $json.pdf_file }} && \
// cat {{ $json.pdf_file }} | base64 && \
// rm -f {{ $json.html_file }} {{ $json.pdf_file }}
return [{
json: {
html_base64: htmlBase64,
html_file: htmlFile,
pdf_file: pdfFile
}
}];
*/