← Все материалы
Бесплатно

Бот с панелью управления: шаблон на Python

Бот принимает сообщения клиентов, отвечает по правилам или нейросетью и копит базу: кто написал, когда, вся переписка. Не справился — зовёт вас, и ответить можно прямо из панели. Управление с телефона: промпт, правила автоответов, рассылки с отложенным стартом. Python и sqlite, 82 теста, посмотреть можно без бота и токена.

Бесплатный шаблон

Бот, который отвечает клиентам, и панель к нему

База клиентов, автоответы по правилам, ответы нейросетью с вашим промптом и рассылки с отложенным стартом. Всё управляется прямо в Telegram.

Туториал доводит до «Hello, world» внутри Telegram и на этом заканчивается. Дальше начинается то, ради чего приложение и делают: клиенты пишут, им надо отвечать, их надо помнить и иногда писать им первым.

Шаблон закрывает как раз это. Бот отвечает на типовые вопросы правилами, на остальные нейросетью с вашим промптом, а управляете вы с телефона: панель открывается прямо в Telegram.

Что внутри архива

База клиентов и переписка

Кто написал, когда пришёл, сколько сообщений. К любому контакту заметка, статус «не беспокоить» и вся история диалога.

Автоответы по правилам

Содержит, начинается с, точно совпадает. Первое подошедшее правило отвечает сразу и всегда одинаково: цена, сроки, оплата.

Ответы нейросетью

Промпт задаётся в панели, историю переписки бот берёт из своей базы. Без ключа ветка выключена, бот работает на правилах.

Рассылки с отложенным стартом

Текст, аудитория, время отправки. Очередь лежит в базе и переживает перезапуск; заблокировавшие бота помечаются сами.

Ответ клиенту из панели

Открыл карточку, прочитал переписку, ответил там же. Сообщение уходит от имени бота и остаётся в истории.

Сигнал, когда бот не справился

Ни правило, ни модель не ответили — владельцу приходит сообщение: кто написал и что спросил. Не чаще раза в пятнадцать минут на человека.

Панель только для владельца

Вход по подписанному идентификатору. Посторонний, знающий адрес, упрётся в вежливый отказ и ничего больше не увидит.

Предпросмотр без Telegram

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

Раскрытый механический хронометр рядом с собранным корпусом на верстаке
Шаблон отдаётся собранным и открытым сразу: видно и работающий инструмент, и то, из чего он состоит.

Посмотреть можно, ничего не настраивая. В шаблоне есть режим предпросмотра: панель поднимается на своей машине и открывается в обычном браузере, с поддельным владельцем вместо Telegram. Вкладки, правила, рассылки и настройки работают. Бот, токен и туннель нужны только на следующем шаге, когда захочется открыть панель внутри Telegram.

Как это устроено

Статья про mini app: чем отличается от бота и от сайта, из чего состоит, что нужно для запуска и где обычно ломается.

Читать разбор

Архив весит около семидесяти килобайт. Внутри код бота, панель, планировщик рассылок, тесты, режим предпросмотра и README с командами под macOS и Linux.

Эксклюзивный файлСкачать шаблонСсылка действует ограниченное время. Распакуйте архив в отдельную папку проекта.
Начните с предпросмотра

Три команды ниже поднимают панель на вашей машине без бота, токена и туннеля. Открывается на 127.0.0.1:8080, работает целиком, включая правила и очередь рассылок.

Посмотреть панель в браузере
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python preview.py

Дальше внутри Telegram. Нужен токен от @BotFather, адрес https, по которому Telegram откроет панель, и ваш идентификатор в списке владельцев. Команды туннеля и разбор шагов лежат в README.

Запустить с настоящим ботом
cp .env.example .env
# положите в .env токен от @BotFather и адрес туннеля
./run.sh
# напишите боту /whoami и впишите число в ADMIN_IDS

Как бот выбирает ответ. Записал человека и его сообщение в базу. Если контакт помечен «не беспокоить», молчит. Дальше ищет подошедшее правило и отвечает им. Если правила не подошли и включена нейросеть, отвечает модель с вашим промптом и историей переписки. Если и это не сработало, уходит дежурная фраза.

Порядок именно такой не случайно. Правило отвечает мгновенно, стоит ноль и всегда говорит одно и то же: для «сколько стоит» и «как оплатить» это ровно то, что нужно. Модель достаётся всему остальному. Дежурная фраза гарантирует, что человек не остался вообще без ответа, даже когда модель недоступна.

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

Так это выглядит: промпт, правило автоответа и рассылка с отложенным стартом. Снято с режима предпросмотра, того самого, который запускается без бота и без туннеля.

Три места, на которых обычно горят, разобраны в README подробно, но коротко они такие.

Подпись initData проверяется на сервере, всегда. Строка приходит из браузера, значит, её содержимое подконтрольно тому, кто открыл страницу. Без проверки достаточно подставить чужой идентификатор, и панель управления открыта постороннему вместе со всей базой клиентов.

Права проверяются на сервере. Спрятать вкладку в браузере мало: запросы к API уходят напрямую, поэтому каждый обработчик панели сам сверяет подписанный идентификатор со списком владельцев.

Кнопка запуска решает, будет ли авторизация. У приложения, открытого кнопкой обычной клавиатуры, подписанных данных нет вообще: так устроен Telegram. Шаблон использует инлайн-кнопку и кнопку меню.

На третьем я наступил сам, пока собирал шаблон: значения в initData нужно кодировать, и пока я этого не делал, кириллица в имени ломала HTTP-заголовок. Браузер просто отказывался отправлять запрос, а выглядело это как «сервер не отвечает».

Нужно приложение под задачу

Шаблон закрывает переписку, базу и рассылки. Каталог с оплатой, личный кабинет и интеграция с учётной системой в него не входят: это отдельный проект.

Посмотреть услугу