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

6.8 KiB
Raw Blame History

Обработка данных о рейсах в n8n

Описание

Код для обработки данных о рейсах из двух источников (FlightAware и FlightRadar24), объединения их и генерации красивого HTML для последующей конвертации в PDF.

Структура входных данных

Workflow должен получать данные в следующем формате:

[
  {
    "body": {
      "flights": [
        {
          "ident": "CES747",
          "registration": "B-1308",
          "origin": { "code_iata": "KMG", "name": "Kunming Changshui Int'l" },
          "destination": { "code_iata": "PVG", "name": "Shanghai Pudong Int'l" },
          ...
        }
      ]
    }
  },
  {
    "body": {
      "data": [
        {
          "flight": "MU747",
          "reg": "B-1308",
          "orig_iata": "KMG",
          "dest_iata": "PVG",
          ...
        }
      ]
    }
  }
]

Установка в n8n

Шаг 1: Добавить Code Node

  1. В вашем workflow после получения данных из FlightAware и FlightRadar24
  2. Добавьте ноду Code (JavaScript)
  3. Назовите её: Code: Process Flights Data

Шаг 2: Вставить код

Скопируйте содержимое файла N8N_CODE_PROCESS_FLIGHTS_DATA.js в Code Node.

Шаг 3: Настройка выхода

Code Node вернёт объект с полями:

  • html - готовый HTML для конвертации в PDF
  • flights - массив объединённых данных о рейсах
  • flights_count - количество рейсов
  • sources - информация о доступности источников
  • generated_at - время генерации

Конвертация HTML в Base64 PDF

Вариант 1: HTTP Request → Base64 PDF (Рекомендуется)

Шаг 1: После Code Node добавьте Code Node с кодом из N8N_FLIGHTS_PDF_BASE64_COMPLETE.js

  • Этот код подготавливает запрос для HTTP Request

Шаг 2: Добавьте HTTP Request ноду:

  • Method: POST
  • URL: {{ $json.http_url }} (например, https://api.htmlpdfapi.com/v1/pdf)
  • Headers: {{ $json.http_headers }}
  • Body: {{ $json.http_body }}
  • Response Format: JSON или Binary (в зависимости от сервиса)

Шаг 3: После HTTP Request добавьте Code Node с кодом из N8N_FLIGHTS_PDF_BASE64_FULL.js

  • Этот код извлекает base64 из ответа сервиса

Результат: В выходных данных будет поле pdf_base64 с готовым PDF в формате base64

Вариант 2: Прямой запрос к сервису

Используйте код из N8N_FLIGHTS_HTML_TO_PDF_EXAMPLE.js для подготовки запроса к сервису конвертации.

Популярные сервисы:

  • htmlpdfapi.com - возвращает base64 в JSON
  • pdfshift.io - поддерживает base64
  • api2pdf.com - возвращает base64
  • gotenberg.dev - бесплатный self-hosted вариант

Вариант 3: Execute Command с wkhtmltopdf

Если на сервере n8n установлен wkhtmltopdf:

  1. Сохраните HTML во временный файл
  2. Выполните команду:
wkhtmltopdf --page-size A4 \
  --margin-top 20mm --margin-right 15mm \
  --margin-bottom 20mm --margin-left 15mm \
  --print-media-type input.html output.pdf && \
cat output.pdf | base64
  1. Получите base64 из вывода команды

Использование base64 PDF

После получения base64 вы можете:

  • Сохранить в файл
  • Отправить по email
  • Загрузить в S3/Nextcloud
  • Вернуть в API response
  • Использовать в других workflow

Особенности обработки

Объединение данных

Данные объединяются по полю registration (номер самолёта):

  • FlightAware: flight.registration
  • FlightRadar24: flight.reg

Если для рейса есть данные только из одного источника, они всё равно будут отображены.

Обработка отсутствующих данных

  • Если данные из источника отсутствуют, показывается сообщение "Данные не получены"
  • Пустые значения отображаются как "—"
  • Даты форматируются в читаемый формат

Форматирование

HTML включает:

  • Красивый дизайн с градиентами и карточками
  • Адаптивную вёрстку
  • Стили для печати (media queries для print)
  • Цветовую индикацию источников данных
  • Информацию о задержках (зелёный/красный)

Пример workflow

HTTP Request (FlightAware) 
    ↓
HTTP Request (FlightRadar24)
    ↓
Code: Process Flights Data  ← Вставить код отсюда
    ↓
HTML/CSS to PDF (или HTTP Request для конвертации)
    ↓
Save File / Send Email / etc.

Отладка

Если данные не обрабатываются:

  1. Проверьте структуру входных данных через console.log:
console.log('FlightAware:', JSON.stringify(flightAwareData, null, 2));
console.log('FlightRadar24:', JSON.stringify(flightRadar24Data, null, 2));
  1. Убедитесь, что данные приходят в правильном порядке:

    • Первый элемент = FlightAware
    • Второй элемент = FlightRadar24
  2. Проверьте наличие полей body.flights и body.data

Дополнительные возможности

Кастомизация HTML

Вы можете изменить стили в функции generateFullHTML():

  • Цвета
  • Шрифты
  • Размеры
  • Расположение элементов

Добавление дополнительных полей

В функции generateFlightCard() можно добавить отображение дополнительных полей из API.

Фильтрация рейсов

Перед генерацией HTML можно отфильтровать рейсы:

const filteredFlights = mergedFlights.filter(flight => {
  // Ваша логика фильтрации
  return flight.flightAware || flight.flightRadar24;
});