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 интеграции
This commit is contained in:
AI Assistant
2026-01-29 16:12:48 +03:00
parent 73524465fd
commit 2e45786e46
57 changed files with 6776 additions and 234 deletions

View File

@@ -0,0 +1,102 @@
// ============================================================================
// n8n Code Node: HTML → Base64 PDF (простой вариант)
// ============================================================================
// Используйте этот код ПОСЛЕ ноды, которая вернула HTML
// Этот код подготовит запрос для HTTP Request ноды
// ============================================================================
// Получаем HTML из предыдущей ноды
// Если HTML пришёл в поле "html", используем его
const html = $json.html || $json.body?.html || $json;
if (!html || typeof html !== 'string') {
throw new Error('HTML не найден в входных данных. Проверьте структуру данных.');
}
console.log('📄 HTML получен, длина:', html.length);
// ==== НАСТРОЙКИ СЕРВИСА КОНВЕРТАЦИИ ====
// Выберите один из вариантов ниже и раскомментируйте его
// ==== ВАРИАНТ 1: htmlpdfapi.com (рекомендуется) ====
// Бесплатный план: 100 PDF в месяц
// URL: https://htmlpdfapi.com
return [{
json: {
// Данные для HTTP Request ноды
method: 'POST',
url: 'https://api.htmlpdfapi.com/v1/pdf',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY' // ⚠️ ЗАМЕНИТЕ на ваш API ключ
},
body: JSON.stringify({
html: html,
options: {
format: 'A4',
printBackground: true,
margin: {
top: '20mm',
right: '15mm',
bottom: '20mm',
left: '15mm'
}
},
base64: true // Запрашиваем base64 напрямую
})
}
}];
// ==== ВАРИАНТ 2: pdfshift.io ====
// Раскомментируйте, если используете pdfshift.io
/*
return [{
json: {
method: 'POST',
url: 'https://api.pdfshift.io/v3/convert/pdf',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + Buffer.from('api:YOUR_API_KEY').toString('base64')
},
body: JSON.stringify({
source: html,
format: 'A4',
margin: '20mm'
})
}
}];
*/
// ==== ВАРИАНТ 3: api2pdf.com ====
// Раскомментируйте, если используете api2pdf.com
/*
return [{
json: {
method: 'POST',
url: 'https://v2.api2pdf.com/chrome/html',
headers: {
'Authorization': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
html: html,
inlinePdf: true,
fileName: 'flights-report.pdf'
})
}
}];
*/
// ============================================================================
// ИНСТРУКЦИЯ:
// ============================================================================
// 1. Этот Code Node подготавливает запрос
// 2. Добавьте HTTP Request ноду после этого Code Node
// 3. В HTTP Request ноде настройте:
// - Method: {{ $json.method }}
// - URL: {{ $json.url }}
// - Headers: {{ $json.headers }}
// - Body: {{ $json.body }}
// 4. После HTTP Request добавьте Code Node с кодом из N8N_EXTRACT_BASE64_FROM_RESPONSE.js
// для извлечения base64 из ответа
// ============================================================================