Files
aiform_prod/docs/N8N_FLIGHTS_QUICK_START.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.0 KiB
Raw Permalink Blame History

Быстрый старт: HTML → Base64 PDF в n8n

Проблема

У вас есть HTML в формате:

{
  "html": "<!DOCTYPE html>..."
}

Нужно получить base64 PDF.

Решение: 3 ноды

Шаг 1: Code Node - Подготовка запроса

Название: Code: Prepare PDF Request

Код: Скопируйте из N8N_HTML_TO_BASE64_PDF_SIMPLE.js

Важно:

  • Замените YOUR_API_KEY на ваш реальный API ключ
  • Выберите сервис конвертации (htmlpdfapi.com, pdfshift.io и т.д.)

Выходные данные:

{
  "method": "POST",
  "url": "https://api.htmlpdfapi.com/v1/pdf",
  "headers": {...},
  "body": "{...}"
}

Шаг 2: HTTP Request - Конвертация

Название: HTTP Request: Convert to PDF

Настройка:

  • Method: {{ $json.method }}
  • URL: {{ $json.url }}
  • Authentication: None (или Basic, если требуется)
  • Headers:
    {{ $json.headers }}
    
  • Body:
    {{ $json.body }}
    
  • Response Format: JSON (или Binary, если сервис возвращает binary)

Что делает: Отправляет HTML в сервис конвертации и получает PDF


Шаг 3: Code Node - Извлечение Base64

Название: Code: Extract Base64 PDF

Код: Скопируйте из N8N_EXTRACT_BASE64_FROM_RESPONSE.js

Выходные данные:

{
  "pdf_base64": "JVBERi0xLjQKJeLjz9MK...",
  "pdf_size_bytes": 123456,
  "pdf_size_mb": "0.12",
  "filename": "flights-report-2026-01-16.pdf",
  "success": true
}

Готово!

Теперь у вас есть base64 PDF в поле pdf_base64.

Что дальше?

Вариант A: Сохранить в файл

Добавьте Code Node:

const base64 = $('Code: Extract Base64 PDF').first().json.pdf_base64;
const pdfBuffer = Buffer.from(base64, 'base64');

return [{
  binary: {
    data: pdfBuffer,
    fileName: $('Code: Extract Base64 PDF').first().json.filename,
    mimeType: 'application/pdf'
  }
}];

Затем используйте ноду Write Binary File или Save to S3.

Вариант B: Вернуть в API

Добавьте Code Node перед Response:

const pdfData = $('Code: Extract Base64 PDF').first().json;

return [{
  json: {
    success: true,
    pdf_base64: pdfData.pdf_base64,
    pdf_size_mb: pdfData.pdf_size_mb,
    filename: pdfData.filename
  }
}];

Вариант C: Отправить по Email

Добавьте Code Node:

const base64 = $('Code: Extract Base64 PDF').first().json.pdf_base64;
const pdfBuffer = Buffer.from(base64, 'base64');
const filename = $('Code: Extract Base64 PDF').first().json.filename;

return [{
  json: {
    to: 'recipient@example.com',
    subject: 'Отчёт о рейсах',
    text: 'Во вложении отчёт о рейсах.',
    attachments: [{
      filename: filename,
      content: pdfBuffer,
      contentType: 'application/pdf'
    }]
  }
}];

Затем используйте ноду Email Send.


Популярные сервисы конвертации

1. htmlpdfapi.com (рекомендуется)

  • Бесплатно: 100 PDF/месяц
  • Платно: от $9/месяц
  • URL: https://htmlpdfapi.com
  • Возвращает: { pdf: "base64..." }

2. pdfshift.io

  • Бесплатно: 100 PDF/месяц
  • Платно: от $9/месяц
  • URL: https://pdfshift.io
  • Возвращает: binary или base64

3. api2pdf.com

  • Бесплатно: 50 PDF/месяц
  • Платно: от $9/месяц
  • URL: https://www.api2pdf.com
  • Возвращает: { Pdf: "base64..." }

4. Self-hosted: Gotenberg

  • Бесплатно: полностью
  • Требует: Docker
  • URL: https://gotenberg.dev
  • Возвращает: binary PDF

Отладка

Проверка HTML

В Code Node добавьте:

console.log('HTML length:', html.length);
console.log('HTML preview:', html.substring(0, 200));

Проверка ответа сервиса

После HTTP Request добавьте Code Node:

const response = $input.first();
console.log('Response keys:', Object.keys(response));
console.log('Response json keys:', response.json ? Object.keys(response.json) : 'no json');
console.log('Response binary:', response.binary ? 'yes' : 'no');

Проверка base64

После извлечения base64:

const base64 = $json.pdf_base64;
console.log('Base64 length:', base64.length);
console.log('Base64 preview:', base64.substring(0, 50));

Частые проблемы

Проблема: "HTML не найден"

Решение: Проверьте, что HTML приходит в поле html. Если нет, измените первую строку в N8N_HTML_TO_BASE64_PDF_SIMPLE.js:

const html = $json.html || $json.body?.html || $json.data?.html || $json;

Проблема: "Не удалось извлечь base64"

Решение:

  1. Проверьте формат ответа сервиса
  2. Добавьте логирование в N8N_EXTRACT_BASE64_FROM_RESPONSE.js
  3. Убедитесь, что сервис действительно вернул PDF

Проблема: PDF пустой или повреждён

Решение:

  1. Проверьте, что HTML валидный
  2. Убедитесь, что CSS включён в HTML (inline styles)
  3. Проверьте, что сервис поддерживает все используемые CSS свойства

Готовый Workflow

[Ваша нода с HTML]
    ↓
Code: Prepare PDF Request
    ↓
HTTP Request: Convert to PDF
    ↓
Code: Extract Base64 PDF
    ↓
[Использование base64]

Всё готово! 🎉