Home
Softono

Telegram Bot Builder

Open source MIT TypeScript
20
Stars
7
Forks
0
Issues
0
Watchers
3 months
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

Need Help Installing Telegram Bot Builder?

We provide expert installation service for this software. Our team will install, configure, and secure Telegram Bot Builder on your server. plans start at just $30.

Telegram Bot Builder

View on GitHub

🇷🇺 Русский | 🇬🇧 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