- Добавлена полная интеграция с 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 интеграции
6.8 KiB
Обработка данных о рейсах в 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
- В вашем workflow после получения данных из FlightAware и FlightRadar24
- Добавьте ноду Code (JavaScript)
- Назовите её:
Code: Process Flights Data
Шаг 2: Вставить код
Скопируйте содержимое файла N8N_CODE_PROCESS_FLIGHTS_DATA.js в Code Node.
Шаг 3: Настройка выхода
Code Node вернёт объект с полями:
html- готовый HTML для конвертации в PDFflights- массив объединённых данных о рейсах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:
- Сохраните HTML во временный файл
- Выполните команду:
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
- Получите 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.
Отладка
Если данные не обрабатываются:
- Проверьте структуру входных данных через
console.log:
console.log('FlightAware:', JSON.stringify(flightAwareData, null, 2));
console.log('FlightRadar24:', JSON.stringify(flightRadar24Data, null, 2));
-
Убедитесь, что данные приходят в правильном порядке:
- Первый элемент = FlightAware
- Второй элемент = FlightRadar24
-
Проверьте наличие полей
body.flightsиbody.data
Дополнительные возможности
Кастомизация HTML
Вы можете изменить стили в функции generateFullHTML():
- Цвета
- Шрифты
- Размеры
- Расположение элементов
Добавление дополнительных полей
В функции generateFlightCard() можно добавить отображение дополнительных полей из API.
Фильтрация рейсов
Перед генерацией HTML можно отфильтровать рейсы:
const filteredFlights = mergedFlights.filter(flight => {
// Ваша логика фильтрации
return flight.flightAware || flight.flightRadar24;
});