Home
Softono
telegram-bot-builder

telegram-bot-builder

Open source MIT TypeScript
20
Stars
7
Forks
0
Issues
0
Watchers
1 week
Last Commit

About telegram-bot-builder

🤖 Визуальный конструктор Telegram ботов с drag-and-drop интерфейсом. Создавайте ботов без программирования, получайте готовый Python код для aiogram. React + TypeScript frontend, Express.js backend, PostgreSQL. Поддержка медиа, клавиатур, условной логики и аналитики пользователей.

Platforms

Web Self-hosted Docker

Languages

TypeScript

🇷🇺 Русский | 🇬🇧 English

Telegram Bot Builder

Typing SVG

Создавайте Telegram ботов без программирования!

MIT License Node.js Version TypeScript React PostgreSQL

GitHub stars GitHub forks GitHub issues Visitors

Визуальный конструктор с drag-and-drop интерфейсом, где вы просто перетаскиваете блоки на холст, а готовый бот появляется сам.

💡 Идеально подходит для малого бизнеса, фрилансеров и тех, кто хочет быстро запустить бота, не изучая программирование.

📞 Связь с нами

GitHub Issues GitHub Discussions Telegram Chat Telegram Channel

🏗️ Архитектура системы

Architecture Pattern API


🎨 Frontend

React + TypeScript

Визуальный редактор


• Drag-and-drop интерфейс
• Панель настроек блоков
• Управление проектами

🖥️ Backend

Express.js + Node.js

API сервер


• REST API для данных
• Генерация Python кода
• Загрузка медиафайлов

🗄️ База данных

PostgreSQL + Drizzle

Хранение данных


• Проекты и схемы ботов
• Пользователи и настройки
• Медиафайлы

☁️ Деплой

Railway + Python

Запуск ботов


• Автогенерация кода
• Готовые Python боты
• Облачный хостинг

🔄 Поток данных

Step 1 Arrow Step 2 Arrow Step 3 Arrow Step 4
Step 5 Arrow Step 6 Arrow Step 7
📋 Подробное описание потока (нажми для раскрытия)
  1. 👤 Пользователь создает схему бота в визуальном редакторе
  2. 🎨 Frontend отправляет изменения через REST API, предлагает сохранить и перезапустить бота
  3. 📡 API Server валидирует данные и сохраняет в PostgreSQL
  4. 🤖 Generator преобразует схему в Python код с aiogram
  5. ▶️ Запуск — бот запускается как Python-процесс на сервере (Worker Pool)
  6. 📱 Telegram получает сообщения через polling (по умолчанию) или webhook
  7. 📊 Analytics собирает статистику использования в реальном времени

📁 Структура проекта

Показать структуру проекта
📦 telegram-bot-builder/
┣ 📂 client/                     # 🎨 React Frontend
┃ ┣ 📂 components/               # UI компоненты
┃ ┃ ┣ 📂 editor/                 # Визуальный редактор
┃ ┃ ┃ ┣ 📂 app-sidebar/          # Навигация по вкладкам
┃ ┃ ┃ ┣ 📂 analytics/            # Панель аналитики
┃ ┃ ┃ ┣ 📂 bot/                  # Управление ботами
┃ ┃ ┃ ┣ 📂 broadcast/            # Рассылки
┃ ┃ ┃ ┣ 📂 canvas/               # Холст редактора (drag & drop)
┃ ┃ ┃ ┣ 📂 code/                 # Вкладка «Код бота»
┃ ┃ ┃ ┣ 📂 dialogs/              # Диалоги с пользователями
┃ ┃ ┃ ┣ 📂 properties/           # Панель свойств блоков
┃ ┃ ┃ ┣ 📂 sidebar/              # Панель компонентов
┃ ┃ ┃ ┗ 📂 users/                # Вкладка «Пользователи»
┃ ┃ ┣ 📂 ui/                     # Базовые UI элементы
┃ ┃ ┗ 📂 media/                  # Медиа компоненты
┃ ┣ 📂 hooks/                    # React хуки
┃ ┣ 📂 pages/                    # Страницы приложения
┃ ┣ 📂 storage/                  # Локальное хранилище
┃ ┣ 📂 types/                    # TypeScript типы
┃ ┣ 📂 utils/                    # Утилиты
┃ ┗ 📄 App.tsx                   # Главный компонент
┣ 📂 server/                     # 🖥️ Express Backend
┃ ┣ 📂 auth/                     # Аутентификация
┃ ┣ 📂 bots/                     # Запуск/остановка ботов
┃ ┣ 📂 database/                 # Работа с PostgreSQL
┃ ┣ 📂 files/                    # Работа с файлами
┃ ┣ 📂 handlers/                 # Обработчики запросов
┃ ┣ 📂 middleware/               # Middleware
┃ ┣ 📂 migrations/               # Миграции БД
┃ ┣ 📂 redis/                    # Redis (события, кэш)
┃ ┣ 📂 routes/                   # API маршруты
┃ ┣ 📂 services/                 # Бизнес-логика
┃ ┣ 📂 storages/                 # Хранилища данных
┃ ┣ 📂 telegram/                 # Telegram API клиент
┃ ┣ 📂 templates/                # Шаблоны генерации
┃ ┣ 📂 terminal/                 # Терминал ботов
┃ ┣ 📂 utils/                    # Утилиты сервера
┃ ┗ 📄 index.ts                  # Точка входа сервера
┣ 📂 shared/                     # 🔗 Общие модули (схемы, типы)
┣ 📂 bots/                       # 🤖 Сгенерированные Python-боты
┣ 📂 docs/                       # 📚 Документация
┃ ┣ 📂 analysis/                 # Анализ архитектуры
┃ ┣ 📂 deployment/               # Инструкции по деплою
┃ ┣ 📂 development/              # Для разработчиков
┃ ┣ 📂 features/                 # Описание фич
┃ ┣ 📂 futures/                  # Планы развития
┃ ┗ 📂 releases/                 # Заметки к релизам
┣ 📂 migrations/                 # 🗄️ Миграции Drizzle ORM
┣ 📂 uploads/                    # 📁 Загруженные медиафайлы
┣ 📂 scripts/                    # 📜 Вспомогательные скрипты
┣ 📄 package.json                # 📦 Зависимости Node.js
┣ 📄 tsconfig.json               # ⚙️ Настройки TypeScript
┣ 📄 vite.config.ts              # ⚡ Конфигурация Vite
┣ 📄 drizzle.config.ts           # 🗄️ Настройки Drizzle ORM
┣ 📄 docker-compose.yml          # 🐳 Docker конфигурация
┗ 📄 .env.example                # 🔐 Пример переменных окружения

📡 API

API JSON Auth

⚠️ Безопасность: На данный момент многие эндпоинты открыты и не требуют аутентификации. Проект находится в стадии активной разработки — авторизация и изоляция данных между пользователями планируются в будущих релизах. Следите за обновлениями в нашем Telegram-канале и чате.

API маршруты находятся в директории server/routes/:

Директория Что содержит
server/routes/projectRoutes/ CRUD проектов, обновление схемы
server/routes/botManagement/ Запуск, остановка, перезапуск ботов
server/routes/tables/ Работа с таблицами данных
server/routes/setup/ Setup Wizard (первоначальная настройка)
server/routes/setupWebhookRoutes.ts Приём webhook-апдейтов от Telegram
server/routes/routes.ts Главный файл регистрации всех маршрутов

🎯 Основные возможности

🎨 Визуальный редактор

  • Drag & Drop — перетаскивайте блоки на холст, соединяйте стрелками
  • Набор блоков постоянно растёт — новые ноды добавляются с каждым обновлением
  • Светлая и тёмная темы — удобно работать днём и ночью
  • Адаптивный интерфейс — работает на десктопе, планшете и смартфоне

💬 Сообщения и триггеры

  • Команды — /start, /help и любые пользовательские команды
  • Текстовые триггеры — реакция на конкретные слова или любое сообщение
  • Исходящие сообщения — триггер на отправку сообщений ботом
  • Медиафайлы — фото, видео, аудио, документы
  • Сбор данных — сохранение ответов пользователей в переменные
  • Редактирование и пересылка — изменение отправленных сообщений, пересылка в другие чаты

⌨️ Клавиатуры

  • Inline-кнопки — с callback-данными и обработкой нажатий
  • Reply-клавиатуры — обычные кнопки под полем ввода
  • Answer callback query — ответ на нажатие inline-кнопки

👥 Группы и форумы

  • Триггеры на сообщения в группах — бот реагирует на сообщения участников
  • Создание тем в форумах — автоматическое создание топиков

🔌 Интеграции

  • HTTP-запросы — обращение к любым внешним API
  • PostgreSQL — прямые SQL-запросы к базе данных из бота
  • Условная логика — ветвления "если... то..."
  • Переменные — хранение и использование данных между шагами
  • Конвертация файлов — преобразование форматов

🖥️ Вкладки конструктора

  • 🎨 Редактор — визуальный холст с нодами, drag & drop построение сценария
  • 📋 Код — просмотр, копирование и скачивание сгенерированного Python-кода
  • 🤖 Бот — управление токенами, запуск/остановка, статус, настройки
  • 👥 Пользователи — база всех, кто писал боту
  • 💬 Диалоги — переписки бота с пользователями в реальном времени
  • 📢 Рассылки — массовая отправка сообщений по базе
  • 📊 Аналитика — статистика использования бота
  • 📑 Таблицы — таблицы данных проекта (контент, настройки)

💡 Вкладки и блоки постоянно обновляются и дополняются с каждым релизом.


☁️ Запуск и деплой бота

▶️ Вариант 1: Запуск из конструктора (кнопка «Запустить»)

Бот запускается прямо из интерфейса конструктора:

  • На официальном сайте — пока работает нестабильно, актуальную ссылку можно получить в чате @bot_builder_chat. Скоро выпускаем глобально!
  • Self-hosted (рекомендуется) — разверните конструктор у себя и запускайте ботов из своей инфраструктуры

📦 Вариант 2: Скачать код и запустить где угодно

Из конструктора (официальный сайт или self-hosted):

  1. Откройте вкладку «Код бота»
  2. Скачайте сгенерированный .py файл
  3. Отредактируйте под свои нужды (код полностью ваш, никакого чёрного ящика)
  4. Запустите на любом сервере, VPS или домашнем компьютере — независимо от конструктора

🖥️ Вариант 3: Self-hosted конструктор

Разверните Bot Builder на своём сервере — и создавайте/запускайте ботов в своей инфраструктуре:

Railway (рекомендуется)

  1. Зарегистрируйтесь на Railway.app
  2. Создайте новый проект
  3. Подключите репозиторий с кодом
  4. Добавьте переменные окружения (см. docs/deployment/RAILWAY_QUICK_DEPLOY.md)
  5. Создайте PostgreSQL базу данных
  6. Запустите миграции базы данных

Подробные инструкции: docs/deployment/RAILWAY_QUICK_DEPLOY.md

Docker

git clone https://github.com/fedorabakumets/telegram-bot-builder.git
cd telegram-bot-builder
docker compose up -d

Ручная установка (любая ОС)

См. пошаговую инструкцию ниже.


📜 Пошаговая инструкция

Подробное руководство по установке для Windows, macOS и Linux (Git, Node.js, PostgreSQL, Redis, Python, настройка БД, клонирование, запуск):

👉 docs/development/INSTALLATION.md

🐳 Быстрый старт: docker compose up -d — и всё работает без ручной настройки.

💡 Нужно обновить проект? См. 🔄 Как обновить проект с GitHub


🎓 Как создать своего первого бота?

Пошаговое руководство (нажми для раскрытия)

Шаг 1: Получите токен для бота

  1. Откройте Telegram и найдите @BotFather
  2. Напишите /newbot и следуйте инструкциям
  3. Вы получите токен вроде: 123456789:ABCdef...

Шаг 2: Откройте редактор

  • При первом запуске у вас уже есть проект по умолчанию с узлом "Старт"
  • Если нужен новый проект, откройте вкладку "Проекты" (слева) и нажмите кнопку "+ Новый"

Шаг 3: Добавьте токен бота

  1. В правой части нажмите кнопку "Бот"
  2. Вставьте токен, который вы получили от BotFather
  3. Токен сохранится автоматически

Шаг 4: Постройте сценарий бота

  1. Перетащите блок "Сообщение" на холст рядом с узлом "Старт"
  2. Напишите текст, который бот должен отправить
  3. В настройках блока укажите, что будет дальше:
    • Кнопки - для выбора вариантов ответа
    • Автопереход - перейти к другому блоку автоматически
    • Ожидание ввода - дождаться сообщения от пользователя
  4. Добавьте еще блоки и настройте переходы между ними

Шаг 5: Запустите бота

  1. Откройте вкладку "Бот" (справа внизу)
  2. Нажмите кнопку "Запустить"
  3. Откройте своего бота в Telegram
  4. Тестируйте и улучшайте!

🧩 Типы блоков

Полный список доступных блоков (нажми для раскрытия)

📨 Сообщения и триггеры

Блок Что он делает
🔔 Триггер команды Срабатывает при вводе команды (/start, /help, любая своя)
💬 Триггер текста Срабатывает на конкретное текстовое сообщение
📩 Триггер входящего сообщения Срабатывает на каждое входящее сообщение
📤 Триггер исходящего сообщения Срабатывает когда бот отправляет сообщение
💬 Текстовое сообщение Отправляет текст пользователю (поддержка Markdown)
📁 Медиафайл Отправляет фото, видео, аудио или документ
💾 Сохранить ответ в переменную Сохраняет ответ пользователя для дальнейшего использования
✏️ Редактировать сообщение Редактирует текст или кнопки уже отправленного сообщения
↗️ Переслать сообщение Пересылка сообщения в другой чат

⌨️ Клавиатуры

Блок Что он делает
🔘 Триггер inline-кнопки Срабатывает когда пользователь нажимает inline-кнопку
🔔 Триггер нажатия кнопки Срабатывает на каждое нажатие callback-кнопки
⌨️ Клавиатура Отправляет сообщение с reply-клавиатурой
✅ Answer callback query Отвечает на нажатие inline-кнопки (уведомление/alert)

👥 Группы

Блок Что он делает
👥 Триггер сообщений в группе Срабатывает на сообщения в групповых чатах
📋 Создать тему форума Создаёт новый топик в форум-группе

🔌 Интеграции и логика

Блок Что он делает
🌐 HTTP-запрос Отправляет запрос к любому внешнему API
🗄️ PostgreSQL запрос Выполняет SQL-запрос к базе данных
🔀 Условие Ветвление логики: "если... то... иначе..."
📝 Установить переменную Сохраняет значение в переменную для использования в других блоках
📄 Конвертация файлов Преобразование файлов между форматами

📦 Медиафайлы в сообщениях

В свойствах текстового сообщения можно прикрепить:

  • 📸 Фотографии — JPG, PNG
  • 🎬 Видео — видеоролики
  • 🎵 Аудио — музыка и записи
  • 📄 Документы — PDF, Word, Excel и другие

🔄 Логика переходов

Настраивается в свойствах каждого блока:

  • Кнопки — пользователь выбирает вариант, бот переходит на нужное сообщение
  • Ожидание ввода — бот ждёт ответ, затем переходит дальше
  • Автопереход — переход к следующему блоку автоматически
  • Условные переходы — ветвление по значению переменных

💡 Список блоков постоянно пополняется. Следите за обновлениями!


📚 Пример: Простой бот для пиццерии

🍕 Пошаговый пример создания бота (нажми для раскрытия)
Pizza Bot Time Difficulty


🎯 Что мы создадим:

Полнофункциональный бот для приема заказов пиццы с меню, выбором и подтверждением

🎨 Визуальная схема бота

🚀 СТАРТ

Команда /start

⬇️

💬 ПРИВЕТСТВИЕ

"Добро пожаловать! Выберите пиццу 🍕"

⬇️

🍕 ВЫБОР ПИЦЦЫ

🍕 Маргарита 🍕 Пепперони 🥬 Вегетарианская
⬇️

📝 АДРЕС ДОСТАВКИ

"Введите ваш адрес доставки"

⬇️

✅ ПОДТВЕРЖДЕНИЕ

Проверка заказа

⬇️

🚗 ГОТОВО!

"Спасибо за заказ! Ожидайте доставку"

🛠️ Пошаговое создание

Step 1 Step 2 Step 3 Step 4
📋 Подробная инструкция (нажми для раскрытия)

🎯 Шаг 1: Создание проекта

  1. Откройте Telegram Bot Builder
  2. Создайте новый проект "Пиццерия"
  3. Получите токен от @BotFather

🧩 Шаг 2: Добавление блоков

  1. Стартовое сообщение → "Добро пожаловать! Выберите пиццу 🍕"
  2. Кнопки выбора → ["🍕 Маргарита", "🍕 Пепперони", "🥬 Вегетарианская"]
  3. Сообщение с ожиданием → "Введите ваш адрес доставки"
  4. Финальное сообщение → "Спасибо за заказ! Ожидайте доставку 🚗"

⚙️ Шаг 3: Настройка переходов

  • СтартПриветствие (автопереход)
  • ПриветствиеВыбор пиццы (кнопки)
  • Выбор пиццыАдрес (любая кнопка)
  • АдресПодтверждение (ожидание ввода)

🚀 Шаг 4: Запуск и тестирование

  1. Нажмите "Сгенерировать код"
  2. Скачайте готовый Python файл
  3. Запустите бота и протестируйте

💻 Сгенерированный код

Python aiogram Size
🐍 Посмотреть автоматически созданный Python код (нажми чтобы раскрыть)
# 🤖 Автоматически сгенерированный бот для пиццерии
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

# 🔑 Токен бота (замените на свой)
bot = Bot(token="YOUR_BOT_TOKEN")
dp = Dispatcher()

def get_pizza_keyboard():
    """🍕 Клавиатура с выбором пиццы"""
    keyboard = ReplyKeyboardMarkup(
        keyboard=[
            [KeyboardButton(text="🍕 Маргарита")],
            [KeyboardButton(text="🍕 Пепперони")],
            [KeyboardButton(text="🥬 Вегетарианская")]
        ],
        resize_keyboard=True,
        one_time_keyboard=True
    )
    return keyboard

@dp.message(Command("start"))
async def start_handler(message: types.Message):
    """🚀 Обработчик команды /start"""
    await message.answer(
        "🍕 Добро пожаловать в пиццерию!\n"
        "Выберите пиццу из меню:",
        reply_markup=get_pizza_keyboard()
    )

@dp.message(lambda message: "🍕" in message.text or "🥬" in message.text)
async def pizza_selected(message: types.Message):
    """🍕 Обработчик выбора пиццы"""
    pizza_type = message.text
    await message.answer(
        f"✅ Отличный выбор: {pizza_type}!\n"
        f"📍 Введите ваш адрес доставки:",
        reply_markup=types.ReplyKeyboardRemove()
    )

@dp.message()
async def address_handler(message: types.Message):
    """📍 Обработчик адреса доставки"""
    address = message.text
    await message.answer(
        f"🎉 Спасибо за заказ!\n"
        f"📍 Адрес: {address}\n"
        f"🚗 Ожидайте доставку в течение 30-40 минут!\n"
        f"📞 Мы свяжемся с вами для подтверждения."
    )

# 🚀 Запуск бота
async def main():
    print("🤖 Бот пиццерии запущен!")
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

🎯 Результат

⚡ Быстро

10 минут от идеи
до готового бота

🎯 Просто

Без единой строки
программирования

🚀 Готово

Бот готов принимать
заказы прямо сейчас!

Success

📚 Документация

Documentation Languages Status


Вся документация проекта организована в папке docs/ и разделена по категориям для удобного поиска

🛠️ Разработчикам


📋 Настройка проекта
Пошаговое руководство по установке

🔧 Устранение неполадок
Решение частых проблем

🤝 Для контрибьюторов
Как участвовать в разработке

📄 JSDoc стандарты
Стандарты документации кода

🧩 Добавление нового узла
Инструкция по созданию новой ноды

🚀 Деплой


🚂 Railway
Развертывание на Railway (рекомендуется)

🐳 Docker
Контейнеризация приложения (скоро)

☁️ VPS
Развертывание на собственном сервере (скоро)

⚙️ CI/CD
Автоматическое развертывание (скоро)

🧩 Возможности


🏗️ Типы узлов
Полный список доступных блоков

🔧 Триггеры и действия
Справочник возможностей

📈 Производительность
Оптимизация и мониторинг (скоро)

🧪 Тестирование
Стратегии тестирования (скоро)

🔒 Безопасность


🛡️ Обновление проекта
Как обновить проект с GitHub

🔐 Аутентификация
Защита пользовательских данных (скоро)

🚨 Мониторинг
Отслеживание угроз (скоро)

📋 Аудит
Проверка безопасности (скоро)

📖 Быстрый доступ к документации

🗂️ Полная структура документации (нажми для раскрытия)
  📂 docs/
  ├── 📁 development/              # 🛠️ Документация для разработчиков
  │   ├── 📄 INSTALLATION.md       # Настройка окружения разработки
  │   ├── 📄 TROUBLESHOOTING_RU.md # Устранение неполадок
  │   ├── 📄 CONTRIBUTING.md       # Руководство для контрибьюторов
  │   ├── 📄 adding-new-trigger.md # Добавление новой ноды
  │   └── 📄 HOW_TO_UPDATE.md     # Как обновить проект
  │
  ├── 📁 deployment/               # 🚀 Руководства по развертыванию
  │   ├── 📄 RAILWAY_QUICK_DEPLOY.md # Быстрый деплой на Railway
  │   ├── 📄 RAILWAY_TROUBLESHOOTING.md # Устранение проблем
  │   └── 📄 VERCEL_DEPLOY.md     # Развертывание на Vercel
  │
  ├── 📁 features/                 # 🧩 Описание возможностей
  │   ├── 📄 NODE_TYPES.md        # Типы узлов
  │   └── 📄 POSSIBLE_TRIGGERS_AND_ACTIONS.md # Триггеры
  │
  ├── 📁 futures/                  # 🔮 Планы развития
  │
  ├── 📁 releases/                 # 📝 Release notes
  │
  ├── 📄 home.md                   # 📚 Главная страница документации
  ├── 📄 JSDOC_STANDARDS.md       # 📋 Стандарты JSDoc
  └── 📄 bot-json-prompt.md       # 🤖 Промт для ИИ

📋 Системные требования

Технические требования (нажми для раскрытия)
💻 Компонент ⚡ Минимум 🚀 Рекомендуемо
Node.js 18.0 22.0+ LTS
PostgreSQL 17 17.10+
Redis 7.0 7.2+ (Memurai на Windows)
Python 3.10 3.13+
RAM 1 GB 2+ GB
Диск 500 MB 1+ GB SSD

🖥️ Поддерживаемые ОС

Windows macOS Linux


🚀 Развертывание готового бота

▶️ Запуск из конструктора (основной способ)

Бот запускается прямо из интерфейса — нажмите кнопку «Запустить» во вкладке «Бот». Сервер автоматически:

  1. Генерирует Python-код из вашей схемы
  2. Запускает бот как Python-процесс (через Worker Pool)
  3. Показывает логи и статус в реальном времени

⚠️ Важно: Python-зависимости устанавливаются один раз на сервере командой pip install -r requirements.txt. Все боты используют общее окружение.

📦 Скачать код и запустить отдельно

Из вкладки «Код бота» можно скачать сгенерированный .py файл и запустить независимо от конструктора:

Вкладка Код проекта

Вкладка «Код проекта» — просмотр, копирование и скачивание сгенерированного Python-кода

pip install -r requirements.txt   # один раз
python bot.py                     # запуск бота

Код полностью ваш — можно редактировать, дополнять, деплоить куда угодно.

☁️ Деплой на хостинг

Платформа Подходит для Документация
Railway Быстрый деплой, автоскейлинг RAILWAY_QUICK_DEPLOY.md
VPS (DigitalOcean, Linode) Полный контроль Стандартный запуск Python
Docker Изоляция, воспроизводимость docker compose up -d

📄 Лицензия

MIT License - используйте свободно для личных и коммерческих целей.


🤝 Помощь и поддержка

🆘 Быстрая помощь

🐛 Нашли баг?

Create Issue

💡 Есть идея?

Discuss

📖 Нужна помощь?

Docs

🤝 Хотите помочь?

Contributing