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

141 lines
3.7 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.

# ✅ Рабочее решение: Обработка данных о рейсах → 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
**Выходные данные:**
```json
{
"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:**
```json
{
"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:
```javascript
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 добавьте:
```javascript
console.log('HTML length:', html.length);
console.log('HTML preview:', html.substring(0, 200));
```
2. **Проверьте base64** - в Code Node добавьте:
```javascript
console.log('Base64 length:', htmlBase64.length);
```
3. **Проверьте ответ Browserless** - в HTTP Request включите "Always Output Data" и проверьте ответ
---
## Готово! 🎉
Workflow работает и генерирует красивые PDF отчёты о рейсах!