- Добавлена полная интеграция с 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 интеграции
3.7 KiB
✅ Рабочее решение: Обработка данных о рейсах → PDF
Структура Workflow
[Входные данные: FlightAware + FlightRadar24]
↓
[Code: причесываем данные] ← Генерирует HTML и конвертирует в base64
↓
[HTTP Request: Browserless PDF] ← Конвертирует HTML в PDF через браузер
↓
[Результат: PDF binary]
Нода 1: Code - "причесываем данные"
Тип: Code (JavaScript)
Код: См. файл N8N_FLIGHTS_TO_BASE64.js
Что делает:
- Извлекает данные из структуры
[{ data: [{ body: { flights: [...] }}, { body: { data: [...] }}] }] - Объединяет рейсы по
registration(номер самолёта) - Генерирует красивый HTML с CSS
- Конвертирует HTML в base64
Выходные данные:
{
"html_base64": "PCFET0NUWVBFIGh0bWw+...",
"html": "<!DOCTYPE html>...",
"flights_count": 2,
"sources": {
"flightaware": { "available": true, "count": 2 },
"flightradar24": { "available": true, "count": 2 }
},
"generated_at": "2026-01-16T07:23:00.000Z"
}
Нода 2: HTTP Request - "Browserless PDF"
Тип: HTTP Request
Настройки:
- Method:
POST - URL:
http://147.45.146.17:3000/pdf?token=9ahhnpjkchxtcho9 - Send Body: ✅ Да
- Specify Body:
JSON - JSON Body:
{
"url": "data:text/html;base64, {{ $json.html_base64 }}",
"options": {
"format": "A4",
"printBackground": true,
"margin": {
"top": "20mm",
"right": "15mm",
"bottom": "20mm",
"left": "20mm"
}
}
}
Response Format: Binary (или JSON, если Browserless возвращает JSON)
Результат
HTTP Request нода вернёт PDF в binary формате, который можно:
- Сохранить в файл
- Отправить по email
- Загрузить в S3/Nextcloud
- Конвертировать в base64 для API response
Конвертация Binary PDF → Base64 (опционально)
Если нужен base64 PDF, добавьте Code Node после HTTP Request:
const pdfBinary = $binary.data;
const base64 = Buffer.isBuffer(pdfBinary)
? pdfBinary.toString('base64')
: Buffer.from(pdfBinary).toString('base64');
const sizeBytes = Buffer.from(base64, 'base64').length;
return [{
json: {
pdf_base64: base64,
pdf_size_bytes: sizeBytes,
pdf_size_mb: (sizeBytes / (1024 * 1024)).toFixed(2),
success: true
}
}];
Преимущества решения
✅ Простота - всего 2 ноды
✅ Надёжность - Browserless использует реальный браузер
✅ Качество - PDF с правильным форматированием и стилями
✅ Гибкость - можно легко изменить параметры PDF (формат, отступы)
Отладка
Если что-то не работает:
-
Проверьте HTML - в Code Node добавьте:
console.log('HTML length:', html.length); console.log('HTML preview:', html.substring(0, 200)); -
Проверьте base64 - в Code Node добавьте:
console.log('Base64 length:', htmlBase64.length); -
Проверьте ответ Browserless - в HTTP Request включите "Always Output Data" и проверьте ответ
Готово! 🎉
Workflow работает и генерирует красивые PDF отчёты о рейсах!