Telegram-бот для создания и управления диалоговыми бота через веб-интерфейс.
New to this project? See RUNBOOK.md for detailed setup instructions.
TL;DR:
npm install
docker-compose up -d
cd packages/core && npm run test-db
cd packages/core && npm run dev # Terminal 1
cd packages/router && npm run dev # Terminal 2
cd packages/mini-app && npm run dev # Terminal 3Troubleshooting? Check RUNBOOK.md - Known Gotchas
Monorepo на npm workspaces + Turbo:
lego_bot/
├── packages/
│ ├── core/ # Основной сервер (Express + Telegraf)
│ │ ├── src/
│ │ │ ├── index.ts # Точка входа, Express сервер + Telegram бот
│ │ │ ├── bot/ # Логика Telegram бота
│ │ │ │ ├── commands.ts # Обработчики команд (/start, /create_bot, etc.)
│ │ │ │ ├── scenes.ts # FSM сцены (создание бота)
│ │ │ │ ├── keyboards.ts # Inline клавиатуры
│ │ │ │ ├── webhook-commands.ts # Управление webhook
│ │ │ │ └── schema-commands.ts # Редактирование схем
│ │ │ ├── db/ # Работа с БД
│ │ │ │ ├── postgres.ts # PostgreSQL подключение
│ │ │ │ ├── redis.ts # Redis подключение
│ │ │ │ └── bots.ts # CRUD операции для ботов (миграции встроены в код)
│ │ │ ├── services/
│ │ │ │ └── telegram-webhook.ts # Telegram API для webhook
│ │ │ └── utils/
│ │ │ └── encryption.ts # AES-256-GCM шифрование токенов
│ │ └── api/ # Vercel serverless entry point
│ │
│ ├── router/ # Webhook роутер для созданных ботов
│ │ ├── src/
│ │ │ ├── index.ts # Express сервер для webhook
│ │ │ ├── db/ # PostgreSQL + Redis
│ │ │ ├── services/
│ │ │ │ └── telegram.ts # Отправка сообщений через Telegram API
│ │ │ └── utils/
│ │ │ └── encryption.ts # Расшифровка токенов
│ │
│ ├── frontend/ # Веб-интерфейс для редактирования схем
│ │ ├── index.html # HTML страница
│ │ ├── script.js # Логика (API, валидация)
│ │ └── style.css # Стили
│ │
│ ├── mini-app/ # Telegram Mini App (React + TypeScript + Vite)
│ │ ├── src/
│ │ │ ├── components/ # React компоненты
│ │ │ │ ├── SchemaEditor.tsx # Редактор схемы
│ │ │ │ ├── StateEditor.tsx # Редактор состояния
│ │ │ │ └── Preview.tsx # Предпросмотр
│ │ │ ├── pages/ # Страницы
│ │ │ │ ├── BotList.tsx # Список ботов
│ │ │ │ ├── BotEditor.tsx # Редактор бота
│ │ │ │ └── Templates.tsx # Шаблоны
│ │ │ └── utils/
│ │ │ └── api.ts # API клиент
│ │ └── public/
│ │ └── tonconnect-manifest.json # TON Connect манифест
│ │
│ └── shared/ # Общие TypeScript типы
│ └── src/
│ └── types/
│ └── bot-schema.ts # BotSchema интерфейс
│
├── docker-compose.yml # PostgreSQL + Redis для локальной разработки
└── .env # Переменные окружения
📖 Полная инструкция: См. RUNBOOK.md для подробного руководства по локальной разработке.
npm installСоздайте .env в корне проекта:
# Telegram
TELEGRAM_BOT_TOKEN=your_bot_token_here
BOT_TOKEN=your_bot_token_here
# Database
DATABASE_URL=postgresql://postgres:postgres@localhost:5433/dialogue_constructor
REDIS_URL=redis://localhost:6379
# Encryption (минимум 32 символа)
ENCRYPTION_KEY=your-32-character-encryption-key-here
# URLs
ROUTER_URL=http://localhost:3001
FRONTEND_URL=http://localhost:8000
PORT=3000Рекомендуемый запуск (core + router + mini-app):
# Запустить PostgreSQL и Redis
docker-compose up -d
cd packages/core && npm run dev # Terminal 1 (http://localhost:3000)
cd packages/router && npm run dev # Terminal 2 (http://localhost:3001)
cd packages/mini-app && npm run dev # Terminal 3 (http://localhost:5174)Legacy/Optional UI (packages/frontend):
cd packages/frontend && python3 -m http.server 8000Основной сервер приложения
- Express API для фронтенда (
/api/bots,/api/bot/:id/schema) - Telegram бот (Telegraf) с командами:
/start- приветствие/create_bot- создание нового бота через @BotFather/my_bots- список созданных ботов/setwebhook <bot_id>- установка webhook/deletewebhook <bot_id>- удаление webhook/editschema <bot_id> <json>- редактирование схемы
- PostgreSQL - хранение ботов (токены зашифрованы)
- Redis - хранение состояний пользователей
Структура:
src/index.ts- Express сервер + инициализация Telegram ботаsrc/bot/- обработчики команд и сценsrc/db/- работа с БДsrc/services/- внешние API (Telegram)src/utils/- утилиты (шифрование)
Webhook роутер для созданных ботов
Принимает webhook от Telegram на /webhook/:botId, загружает схему бота из PostgreSQL, определяет состояние пользователя из Redis, отправляет сообщения согласно схеме.
Структура:
src/index.ts- Express сервер для webhooksrc/db/- PostgreSQL (схемы ботов) + Redis (состояния)src/services/telegram.ts- отправка сообщений через Telegram API
Веб-интерфейс для редактирования схем
Чистый HTML/CSS/JS без фреймворков:
- Ввод User ID для авторизации
- Список ботов пользователя
- JSON редактор с валидацией
- Предпросмотр схемы
Файлы:
index.html- структура страницыscript.js- логика (API запросы, валидация)style.css- стили
Telegram Mini App для визуального редактирования
React + TypeScript + Vite приложение:
- Интеграция с Telegram WebApp SDK
- Визуальный редактор схем с drag-and-drop
- Редактор состояний (сообщения + кнопки)
- Предпросмотр бота в реальном времени
- Готовые шаблоны схем
- TON Connect для платежей
Структура:
src/components/- React компонентыsrc/pages/- страницы приложенияsrc/utils/api.ts- API клиент
Общие TypeScript типы
BotSchema- интерфейс схемы диалога
JSON структура, описывающая диалог:
{
version: 1,
initialState: "start",
states: {
"start": {
message: "Привет!",
buttons: [
{ text: "Далее", nextState: "next" }
]
},
"next": {
message: "Второй шаг"
}
}
}Токены ботов шифруются AES-256-GCM перед сохранением в PostgreSQL.
- Пользователь отправляет сообщение боту
- Telegram отправляет webhook на
ROUTER_URL/webhook/{botId} - Router загружает схему бота из PostgreSQL
- Определяет текущее состояние пользователя из Redis
- Отправляет сообщение и кнопки согласно схеме
- Обновляет состояние в Redis
# Core
cd packages/core
npm run dev # tsx watch src/index.ts
# Router
cd packages/router
npm run dev # tsx watch src/index.ts
# Frontend
cd packages/frontend
python3 -m http.server 8000npm run build # Собирает все пакеты через Turbocd packages/core
npm run test-db # Проверяет подключение к PostgreSQL и RedisCore:
- Root Directory:
packages/core - Build Command:
cd ../.. && npm run build - Output Directory:
dist - Environment Variables: все из
.env
Frontend:
- Root Directory:
packages/frontend - Framework: Other
- Build Command: (пусто)
- Output Directory:
.
Можно деплоить на любой хостинг (Railway, Render, etc.) или использовать Docker:
cd packages/router
docker-compose up -dGET /health- проверка работоспособностиGET /api/bots?user_id={id}- список ботов пользователяGET /api/bot/:id/schema- получить схему ботаPOST /api/bot/:id/schema- обновить схему бота
POST /webhook/:botId- webhook от TelegramGET /health- проверка работоспособности
See SECURITY.md for details on validation, authentication, encryption, audit logging, and key rotation.
Required security env vars: ENCRYPTION_KEY, BOT_TOKEN.
- Токены ботов шифруются AES-256-GCM
- Telegram Login Widget проверяет hash через HMAC-SHA256
- Все ошибки логируются без чувствительных данных
- Express - HTTP сервер
- Telegraf - Telegram Bot API
- PostgreSQL (pg) - основная БД
- Redis - кеш и состояния
- TypeScript - типизация
- Turbo - сборка monorepo
MIT