Files
aiform_prod/docs/N8N_FLIGHTS_BROWSERLESS_COMPLETE.js
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

100 lines
3.8 KiB
JavaScript
Raw Permalink 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 Code Node: HTML → PDF через Browserless (полная версия)
// ============================================================================
// Используйте этот код ПОСЛЕ ноды, которая вернула HTML или html_base64
// ============================================================================
// Получаем HTML из предыдущей ноды
let html = null;
if ($json.html) {
html = $json.html;
} else if ($json.html_base64) {
html = Buffer.from($json.html_base64, 'base64').toString('utf8');
} else if ($json.body?.html) {
html = $json.body.html;
} else if ($binary && $binary.data) {
html = $binary.data.toString('utf8');
} else {
throw new Error('HTML не найден. Проверьте, что предыдущая нода вернула html или html_base64');
}
console.log('📄 HTML получен, длина:', html.length);
// ================== НАСТРОЙКИ BROWSERLESS ==================
const BROWSERLESS_URL = 'http://147.45.146.17:3000';
// ⚠️ ВАЖНО: Если Browserless требует токен, замените на ваш токен
// Если токен не требуется, оставьте пустую строку или удалите Authorization header
const BROWSERLESS_TOKEN = ''; // Замените на ваш токен, если требуется
// Конвертируем HTML в data URL для передачи в Browserless
const htmlBase64 = Buffer.from(html, 'utf8').toString('base64');
const dataUrl = `data:text/html;base64,${htmlBase64}`;
// Формируем headers
const headers = {
'Content-Type': 'application/json'
};
// Добавляем токен, если он указан
if (BROWSERLESS_TOKEN) {
headers['Authorization'] = `Bearer ${BROWSERLESS_TOKEN}`;
}
// ================== ПОДГОТОВКА ЗАПРОСА ==================
return [{
json: {
// Данные для HTTP Request ноды
method: 'POST',
url: `${BROWSERLESS_URL}/pdf`,
headers: headers,
// Тело запроса - передаём HTML через data URL
body: JSON.stringify({
url: dataUrl,
options: {
format: 'A4',
printBackground: true,
margin: {
top: '20mm',
right: '15mm',
bottom: '20mm',
left: '15mm'
}
}
}),
// Метаданные для отладки
html_length: html.length,
data_url_length: dataUrl.length,
browserless_url: BROWSERLESS_URL
}
}];
// ============================================================================
// ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ:
// ============================================================================
// 1. Замените BROWSERLESS_TOKEN на ваш токен (если требуется)
// 2. Добавьте HTTP Request ноду после этого Code Node
// 3. В HTTP Request ноде настройте:
// - Method: {{ $json.method }}
// - URL: {{ $json.url }}
// - Headers: {{ $json.headers }}
// - Body: {{ $json.body }}
// - Response Format: Binary (Browserless возвращает PDF как binary)
// 4. После HTTP Request добавьте Code Node для конвертации binary в base64:
//
// const pdfBinary = $binary.data;
// const base64 = Buffer.isBuffer(pdfBinary)
// ? pdfBinary.toString('base64')
// : Buffer.from(pdfBinary).toString('base64');
//
// return [{
// json: {
// pdf_base64: base64,
// pdf_size_bytes: Buffer.from(base64, 'base64').length,
// success: true
// }
// }];
// ============================================================================