- Добавлена полная интеграция с 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.0 KiB
Быстрый старт: 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"
Решение:
- Проверьте формат ответа сервиса
- Добавьте логирование в
N8N_EXTRACT_BASE64_FROM_RESPONSE.js - Убедитесь, что сервис действительно вернул PDF
Проблема: PDF пустой или повреждён
Решение:
- Проверьте, что HTML валидный
- Убедитесь, что CSS включён в HTML (inline styles)
- Проверьте, что сервис поддерживает все используемые CSS свойства
Готовый Workflow
[Ваша нода с HTML]
↓
Code: Prepare PDF Request
↓
HTTP Request: Convert to PDF
↓
Code: Extract Base64 PDF
↓
[Использование base64]
Всё готово! 🎉