Open source платформа для Telegram-ботов: конфиги вместо кода
Разработка и поддержка Telegram-ботов — затратная история. Каждый новый бот требует либо команды разработки, либо оплаты SaaS-сервисов с ограничениями, либо работы подрядчиков.
Coreness — платформа на Python для развёртывания AI-ботов через YAML-конфиги. Self-hosted решение без vendor lock-in, где один сервер может обслуживать десятки изолированных ботов. И теперь проект выходит в open source.
Репозиторий: github.com/Vensus137/Coreness
Зачем это нужно
Проблема
Типичный путь при создании Telegram-бота:
1. Заказная разработка через фрилансеров
- Простой бот: 30-80 тыс. руб.
- Бот с интеграциями: 100-250 тыс. руб.
- Поддержка: от 10 тыс. руб./месяц
- Проблема: каждое изменение логики = новая задача
2. SaaS (Chatfuel, ManyChat и др.)
- От 3-15 тыс. руб./месяц за бота
- Ограничения: нельзя подключить свои LLM, кастомная логика за доплату
- Vendor lock-in: данные на чужих серверах
3. Собственная разработка
- Нужна команда (junior/middle разработчик от 80-150 тыс. руб./месяц)
- Время на первый бот: 2-4 недели
- Каждый новый бот = копипаст кода + адаптация + тестирование
Проблема масштабирования: При 5-10 ботах затраты на разработку и поддержку становятся значительными, а время вывода каждого нового — недели вместо дней.
Решение
Coreness меняет подход: self-hosted платформа, где логика описывается в YAML-конфигах. Это даёт:
- Время: Новый бот создается за несколько часов — редактирование конфига вместо написания кода с нуля
- Затраты: Один VPS (от 500-1500 руб./месяц) обслуживает множество ботов. Вместо оплаты за каждого бота отдельно
- Контроль: Свой сервер, свои данные, любые LLM-модели, никакого vendor lock-in
- Масштабируемость: Добавить бот = создать папку с конфигом. Никакого копипаста кода
Подходит для: агентств (больше проектов при той же команде), стартапов (быстрая валидация идей), компаний с требованиями к размещению данных на своих серверах.
Возможности платформы
Архитектура платформы
Coreness построен на event-driven архитектуре с четким разделением слоёв.
Telegram отправляет обновления, платформа находит подходящий YAML-сценарий, выполняет действия через сервисы и сохраняет данные в PostgreSQL с автоматической изоляцией по тенантам.
Всё асинхронно, боты могут параллельно обрабатывать входящие события.
Multi-tenancy из коробки
Полная изоляция данных на уровне базы. Один экземпляр платформы — множество независимых ботов:
- Свои настройки, базы знаний, промпты для каждого тенанта
- Автоматическая фильтрация по tenant_id — не нужно добавлять условия в каждый запрос
- GitHub-синхронизация конфигураций (Infrastructure as Code)
- Master Bot — готовый бот для управления тенантами (аналог @BotFather)
Для добавления нового бота достаточно просто создать папку с конфигом, и платформа подхватывает его автоматически.
YAML-конфигурации вместо кода
Декларативное описание сценариев — вся логика в конфигах:
Что здесь происходит:
- trigger — условие запуска (команда /start)
- step — последовательность действий
- {first_name|fallback:друг} — плейсхолдер с модификатором (если first_name пустой, подставится "друг")
- inline — кнопки под сообщением
Сценарии описываются декларативно — не нужно разбираться в коде платформы, достаточно знать структуру конфига. Логику может менять не только программист: PM настроит флоу, маркетолог обновит тексты, дизайнер поправит кнопки. Всё в одном читаемом файле.
Пример использования RAG:
Встроенная интеграция с LLM-моделями и векторным поиском:
- Semantic search через pgvector (PostgreSQL)
- Поддержка OpenAI, Anthropic, Google, DeepSeek через агрегаторы (OpenRouter, Azure OpenAI и другие)
- RAG-контекст в сценариях — боты отвечают на основе базы знаний
- Function calling и AI-агенты с инструментами
Пример использования RAG:
Система автоматически формирует правильную структуру messages для AI, группирует чанки по типам (история диалога, база знаний, дополнительный контекст).
Scheduled сценарии
Автоматизация по расписанию через cron-выражения:
Полезно для ежедневных отчётов, рассылок, периодических проверок.
Плагинная система
Каждая фича — отдельный плагин в папке plugins/. Нужна интеграция с внешним API? Не проблема, достаточно написать новый плагин и добавить в папку.
Структура:
Плагины изолированы, общаются через события. Добавляется новый плагин — система подхватит и свяжет зависимости, сервис регистрирует свои действия через action_hub.
Как это работает
Event-Driven архитектура
Каждый сервис самодостаточен, общается через события. Не запутанная сеть зависимостей, а чистые вертикальные срезы функциональности.
Как обрабатывается событие на практике:
Разберём на примере сообщения с RAG-ответом (как на диаграмме):
- Telegram Bot API отправляет webhook с новым сообщением
- Event Processor парсит Update асинхронно и создаёт Task
- Scenario Engine ищет триггер в YAML-сценариях и находит подходящий
- Step Executor последовательно выполняет actions из сценария:
- Step 1: search_embedding → AI Service обращается к PostgreSQL pgvector, получает релевантные chunks
- Step 2: completion → AI Service отправляет prompt + RAG chunks в OpenRouter/LLM, получает ответ
- Step 3: send_message → Telegram Utility вызывает Bot API, отправляет ответ пользователю
- Task завершается, пользователь получает ответ
PostgreSQL для изоляции данных
Автоматическая фильтрация данных на уровне базы. Один SELECT-запрос — PostgreSQL сам ограничивает выборку по tenant_id.
Не нужно в каждом запросе добавлять WHERE tenant_id = ..., база сама фильтрует на уровне строк. Это критично для мультитенантности — невозможно случайно получить данные другого тенанта.
Дополнительно: система автоматически создаёт PostgreSQL view для контроля доступа на уровне БД. Можно настроить read-only пользователей с доступом к конкретным тенантам через таблицу view_access.
Альтернатива: для упрощённой настройки можно использовать SQLite вместо PostgreSQL. Не нужен отдельный контейнер, проще администрирование, меньше DevOps-проблем. Ограничение: в SQLite не работает RAG (нет поддержки pgvector), поэтому векторный поиск недоступен. Для production с RAG рекомендуется PostgreSQL.
Запускаем бота за 5 минут
Окей, теория понятна. Как это работает на практике?
Шаг 1. Разворачиваем через deployment manager
Платформа включает утилиту для автоматизированного развёртывания. Она настраивает всё "под ключ": поднимает контейнеры, накатывает миграции, настраивает окружение.
Что происходит:
- Утилита определяет окружение (test/prod)
- Настраивает переменные окружения
- Поднимает PostgreSQL 16 с pgvector (или SQLite для упрощённой версии)
- Накатывает миграции базы
- Собирает Docker-образ и запускает контейнеры
- Устанавливает команду dc для управления
Важно: Для первого запуска нужно настроить config/settings.yaml и переменные окружения (токены ботов, ключи API). Deployment manager упрощает процесс установки и обновлений. Подробнее в документации по деплою.
Шаг 2. Создаём тенант
Создаём папку config/tenant/tenant_101/ с файлом tg_bot.yaml:
Шаг 3. Настраиваем сценарий
Создаём файл config/tenant/tenant_101/scenarios/start.yaml:
Шаг 4. Загружаем базу знаний (опционально)
Добавим сценарий с RAG для ответов на вопросы. Создаём config/tenant/tenant_101/scenarios/ai.yaml:
Что здесь происходит:
- save_knowledge — сохраняет текст в векторное хранилище
- ask_question — ищет релевантные фрагменты и отправляет их в AI
- Система автоматически формирует контекст для модели
Шаг 5. Синхронизируем
Если используется GitHub-синхронизация:
Или принудительно через Master Bot:
- Открываем master_bot
- Отправляем /tenant
- Вводим ID тенанта (101)
- Нажимаем "Синхронизация"
Результат
Готово. Бот отвечает на команды, обрабатывает кнопки, всё работает.
Важно: Это минимальный пример. В реальности можно добавить:
- AI-ответы с RAG
- Оплаты через Telegram Stars
- Scheduled сценарии
- Валидацию и переходы
- Storage для хранения данных пользователей
Всё это настраивается через YAML, без единой строки кода.
Бонус: Добавляем оплаты
Как добавить монетизацию? Собственно, через платежный модуль телеграмм. Разберем на примере Telegram Stars:
Что здесь происходит:
- Пользователь отправляет /buy → создаётся инвойс
- Пользователь нажимает "Оплатить" → Telegram отправляет pre_checkout_query
- Бот подтверждает платеж через confirm_payment (в течение 10 секунд)
- Telegram обрабатывает платеж → отправляет payment_successful
- Бот отмечает инвойс как оплаченный и активирует подписку
Вся логика оплат в конфиге. Не нужно писать код обработки платежей вручную.
Для оплаты в валюте достаточно заменить атрибут currency и подключить соответствующего провайдера в настройках бота в телеграмм.
Применение в бизнесе
Кому это подходит
Агентства и разработчики
Кому актуально:
- Digital-агентства, которые делают ботов для клиентов
- Фрилансеры, работающие с несколькими проектами
- Разработчики, которые хотят быстро прототипировать идеи
Что дает платформа:
- Сокращение времени на типовые задачи (отправка сообщений, обработка кнопок, базовая логика)
- Возможность фокусироваться на уникальной логике конкретного проекта
- Единая кодовая база вместо копипаста между проектами
Реалистичный сценарий: Агентство делает 3-4 бота в квартал. С платформой — может делать 5-7 при той же команде за счет переиспользования конфигов.
Стартапы и продуктовые команды
Кому актуально:
- Команды, валидирующие гипотезы через MVP
- Проекты с требованиями к размещению данных на своих серверах
- Бизнесы, которые не хотят зависеть от SaaS-провайдеров
Что дает платформа:
- Быстрое создание MVP (дни вместо недель)
- Полный контроль над данными и инфраструктурой
- Возможность менять логику без разработчиков (через конфиги)
Реалистичный сценарий: Вместо найма разработчика на 2-3 недели за 150-200 тыс. руб. — технический фаундер разворачивает MVP за выходные.
Компании с требованиями к безопасности
Кому актуально:
- Финтех, медицина, страхование — где данные нельзя на чужих серверах
- Корпорации с требованиями compliance-отделов
- Проекты с интеграцией во внутренние системы
Что дает платформа:
- Self-hosted — развертывание в своем контуре
- Open source — возможность аудита кода
- Плагинная архитектура — интеграция с внутренними API
Реалистичный сценарий: Банк или страховая компания может развернуть платформу в своем периметре безопасности и интегрировать с CRM.
Почему open source — преимущество
- Прозрачность: Полный доступ к коду, можно проверить безопасность
- Гибкость: Модификация под свои нужды, добавление интеграций
- Отсутствие зависимости: Не платите за каждую фичу отдельно
- Долгосрочность: Проект не исчезнет, если вендор закроется
Технологии
Стек
- Python 3.11+ с прямой работой через Telegram Bot API (без aiogram — меньше зависимостей, выше производительность)
- PostgreSQL 16+ с расширением pgvector для RAG (или SQLite для упрощённой версии)
- Docker + docker-compose для развёртывания
- Агрегаторы LLM для доступа к моделям (OpenAI, Anthropic, Google, DeepSeek через OpenRouter, Azure OpenAI и другие)
Производительность
- Асинхронная обработка событий через asyncio — все операции неблокирующие
- Кэширование данных и настроек — снижает нагрузку на БД
- Оптимизация векторного поиска через HNSW-индексы pgvector — быстрый поиск даже на больших объемах
- Параллельная обработка — боты могут параллельно обрабатывать входящие события
- Прямая работа с Telegram Bot API — без промежуточных библиотек, меньше overhead
Почему без aiogram? Прямая работа с Telegram Bot API через aiohttp экономит ресурсы, быстрее, меньше зависимых библиотек. Всё что нужно — обработка JSON и HTTP-запросы.
Масштабирование
При росте нагрузки можно масштабировать платформу несколькими способами:
Вертикальное масштабирование:
- Увеличение ресурсов сервера (CPU, RAM) — самый простой путь
- Настройка PostgreSQL под нагрузку
- Оптимизация пула соединений к БД
Горизонтальное масштабирование:
- Несколько инстансов приложения — запуск нескольких экземпляров за load balancer
- PostgreSQL read-replicas — для чтения (поиск по RAG, получение конфигов), запись в master
- Redis для кэширования — опционально, снижает нагрузку на БД при частых запросах
Для большинства случаев достаточно вертикального масштабирования. Горизонтальное имеет смысл при высокой нагрузке (сотни ботов, тысячи сообщений в секунду).
Безопасность
- Изоляция данных на уровне БД — невозможно случайно получить данные другого тенанта
- Валидация через Pydantic — все входные параметры проверяются по схемам
- Secrets вынесены в переменные окружения — токены и ключи не хранятся в коде
- Автоматические бэкапы БД с настраиваемым интервалом — защита от потери данных
- Гибкая настройка доступов — можно сконфигурировать read-only пользователей с доступом к конкретным тенантам, полезно для аналитики и аудита
Система деплоя
Автоматизированная система управления деплоем:
- Обновление сервера из GitHub с миграциями БД
- Версионирование через git tags
- Graceful shutdown при обновлении (корректное завершение работы)
- Откат на предыдущую версию Docker-образа
- Бэкапы файлов и БД перед обновлением
Планируемые фичи и улучшения
Проект выходит в open source, чтобы развивать его вместе с сообществом.
Ближайшие направления
- Доработка деплой утилиты — улучшение процесса установки и обновлений, упрощение флоу работы с базами данных и миграциями
- Расширение возможностей RAG — поддержка файлов (PDF, DOCX), улучшенная обработка документов
- Больше готовых плагинов — интеграции с популярными API и сервисами, новые функции и возможности
- Упрощение Master Bot — улучшенное управление тенантами через интерфейс
- Выход в мини-апп Telegram — дополнительные возможности управления тенантами и новые функции через Telegram Mini App
Если вы разрабатываете ботов для клиентов, планируете автоматизацию в бизнесе или устали платить за SaaS с ограничениями — попробуйте платформу.
Это может сэкономить месяцы разработки и десятки тысяч рублей. И да, это бесплатно — open source, MIT лицензия.
Что дальше:
- Попробуйте развернуть MVP за выходные
- Если зайдет — ставьте звезду на GitHub
- Есть вопросы или хотите обсудить кейс — пишите напрямую
Ссылки
- Репозиторий: github.com/Vensus137/Coreness
- Telegram-канал: t.me/coreness
- Связь с автором: @vensus137
Coreness — Create. Automate. Scale.