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

194 lines
6.8 KiB
Markdown
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
## Описание
Код для обработки данных о рейсах из двух источников (FlightAware и FlightRadar24), объединения их и генерации красивого HTML для последующей конвертации в PDF.
## Структура входных данных
Workflow должен получать данные в следующем формате:
```json
[
{
"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. Выполните команду:
```bash
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
```
3. Получите 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`:
```javascript
console.log('FlightAware:', JSON.stringify(flightAwareData, null, 2));
console.log('FlightRadar24:', JSON.stringify(flightRadar24Data, null, 2));
```
2. Убедитесь, что данные приходят в правильном порядке:
- Первый элемент = FlightAware
- Второй элемент = FlightRadar24
3. Проверьте наличие полей `body.flights` и `body.data`
## Дополнительные возможности
### Кастомизация HTML
Вы можете изменить стили в функции `generateFullHTML()`:
- Цвета
- Шрифты
- Размеры
- Расположение элементов
### Добавление дополнительных полей
В функции `generateFlightCard()` можно добавить отображение дополнительных полей из API.
### Фильтрация рейсов
Перед генерацией HTML можно отфильтровать рейсы:
```javascript
const filteredFlights = mergedFlights.filter(flight => {
// Ваша логика фильтрации
return flight.flightAware || flight.flightRadar24;
});
```