Files
aiform_prod/docs/N8N_FLIGHTS_WORKING_SOLUTION.md
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

3.7 KiB
Raw Permalink Blame History

Рабочее решение: Обработка данных о рейсах → PDF

Структура Workflow

[Входные данные: FlightAware + FlightRadar24]
    ↓
[Code: причесываем данные]  ← Генерирует HTML и конвертирует в base64
    ↓
[HTTP Request: Browserless PDF]  ← Конвертирует HTML в PDF через браузер
    ↓
[Результат: PDF binary]

Нода 1: Code - "причесываем данные"

Тип: Code (JavaScript)

Код: См. файл N8N_FLIGHTS_TO_BASE64.js

Что делает:

  1. Извлекает данные из структуры [{ data: [{ body: { flights: [...] }}, { body: { data: [...] }}] }]
  2. Объединяет рейсы по registration (номер самолёта)
  3. Генерирует красивый HTML с CSS
  4. Конвертирует 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 (формат, отступы)


Отладка

Если что-то не работает:

  1. Проверьте HTML - в Code Node добавьте:

    console.log('HTML length:', html.length);
    console.log('HTML preview:', html.substring(0, 200));
    
  2. Проверьте base64 - в Code Node добавьте:

    console.log('Base64 length:', htmlBase64.length);
    
  3. Проверьте ответ Browserless - в HTTP Request включите "Always Output Data" и проверьте ответ


Готово! 🎉

Workflow работает и генерирует красивые PDF отчёты о рейсах!