
Бот принимает сообщения клиентов, отвечает по правилам или нейросетью и копит базу: кто написал, когда, вся переписка. Не справился — зовёт вас, и ответить можно прямо из панели. Управление с телефона: промпт, правила автоответов, рассылки с отложенным стартом. 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
Как бот выбирает ответ. Записал человека и его сообщение в базу. Если контакт помечен «не беспокоить», молчит. Дальше ищет подошедшее правило и отвечает им. Если правила не подошли и включена нейросеть, отвечает модель с вашим промптом и историей переписки. Если и это не сработало, уходит дежурная фраза.
Порядок именно такой не случайно. Правило отвечает мгновенно, стоит ноль и всегда говорит одно и то же: для «сколько стоит» и «как оплатить» это ровно то, что нужно. Модель достаётся всему остальному. Дежурная фраза гарантирует, что человек не остался вообще без ответа, даже когда модель недоступна.
И в тот же момент, когда ушла дежурная фраза, вам приходит сообщение: кто написал и что спросил. Это ровно те разговоры, где нужен человек, и ответить на них можно прямо из панели, не открывая чат с клиентом.
Подпись initData проверяется на сервере, всегда. Строка приходит из браузера, значит, её содержимое подконтрольно тому, кто открыл страницу. Без проверки достаточно подставить чужой идентификатор, и панель управления открыта постороннему вместе со всей базой клиентов.
Права проверяются на сервере. Спрятать вкладку в браузере мало: запросы к API уходят напрямую, поэтому каждый обработчик панели сам сверяет подписанный идентификатор со списком владельцев.
Кнопка запуска решает, будет ли авторизация. У приложения, открытого кнопкой обычной клавиатуры, подписанных данных нет вообще: так устроен Telegram. Шаблон использует инлайн-кнопку и кнопку меню.
На третьем я наступил сам, пока собирал шаблон: значения в initData нужно кодировать, и пока я этого не делал, кириллица в имени ломала HTTP-заголовок. Браузер просто отказывался отправлять запрос, а выглядело это как «сервер не отвечает».
Шаблон закрывает переписку, базу и рассылки. Каталог с оплатой, личный кабинет и интеграция с учётной системой в него не входят: это отдельный проект.
Посмотреть услугу