13.09.2025 12:57
2

Универсальный AI Telegram Bot

Я писал у себя в telegram-канале, что давно сделал себе GPT's в ChatGPT - 'Russian > English Corrector and Translator' для помощи в изучении английского. Он достаточно простой, но в то же время полезный:

  1. Присылаете слово на английском - получаете словарную карточку с определением, частью речи, примерами и тп.
  2. Присылаете текст на русском - получаете прямой перевод и пояснения, почему переведено именно так.
  3. Присылаете текст на английском - он проверяется на ошибки и стилистические ошибки и предлагается скорректированная версия также с пояснениями.

Но ходить каждый раз в ChatGPT неудобно - гораздо удобнее было бы то же самое получать через Telegram.

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

Реализация

Собственно, про процесс разработки особо писать не вижу смысла - все написано, как обычно, с помощью Cursor, расскажу лучше о внутреннем устройстве.

Программа на go, по сути выступает в режиме прокси между Telegram и AI. Для связи с Telegram нужен API-ключ бота, выданный @BotFather. Для подключения к AI - OpenAI-совместимый API. Я использую OpenRouter с бесплатной моделью.

У бота есть 2 простые команды /start и /help, на которые он отвечает сообщениями, заданными в конфиге.

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

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

Установка и запуск

Так как сама программа на go - для неё в github сразу собираются бинарники для всех систем, которые не требуют других зависимостей. Посмотреть актуальный список можно на релизной странице: https://github.com/positron48/universal-ai-bot/releases.

Также вам для запуска нужно положить рядом .env файл конфигурации. Пример с полным перечнем переменных также можно посмотреть в репозитории: https://github.com/positron48/universal-ai-bot/blob/master/env.example

Минимально необходимые значения:

  • TELEGRAM_TOKEN - токен бота, полученный от @BotFather;
  • AI_API_KEY - API ключ для доступа к API модели;
  • AI_URL - OpenAI-совместимый API url модели, к которой будете обращаться, по умолчанию там указан OpenRouter, но вы можете хоть локально постамить lmstudio и попробовать с ней;
  • AI_MODEL - по умолчанию qwen/qwen3-coder:free из OpenRouter, но помните что для работы бесплатных моделей по API нужно включить возможность их обучения на ваших запросах и запоминание промптов, так что это максимально не конфиденциальный способ связи.

Ну и еще больше параметров найдете в моем github. Можно настроить работу через webhook (по умолчанию long polling).

Отдельно, конечно, настраиваются сообщения и системный промпт модели. Например, мои настройки для бота выглядят так:

AI_PROMPT_FILE=prompts/english-teacher.txt

# Bot Messages Configuration (optional - uses defaults if not set)
BOT_START_MESSAGE='🇬🇧 Привет! Я ваш персональный преподаватель английского языка!\n\n📝 Что я умею:\n• Исправлять ошибки в английском тексте\n• Переводить с русского на английский\n• Создавать карточки слов с объяснениями\n\n💡 Ка>
BOT_HELP_MESSAGE='📚 Помощь по использованию бота-преподавателя английского:\n\n🔤 **Одно слово** → Карточка слова с:\n• Частью речи\n• Транскрипцией IPA\n• Определением на русском\n• Примерами использования\n• Формами неправильны>
BOT_UNKNOWN_COMMAND_MESSAGE='❓ Неизвестная команда. Используйте /help для получения информации о возможностях бота.'
BOT_ERROR_MESSAGE='Извините, при обработке сообщения произошла ошибка. Попробуйте позднее.'
BOT_EMPTY_MESSAGE='Пожалуйста, отправьте сообщение.'

Системный промпт тоже не секретный и лежит в репозитории: https://github.com/positron48/universal-ai-bot/blob/master/prompts/english-teacher.txt

После всех настроек просто запускаете бинарник - если все сделано правильно - бот начнет работать.

Деплой

Я пошел чуть дальше, все же следить за тем что бинарник запущен и перезапускать при падениях руками - не наш путь.

Поэтому в репозитории также есть подробная инструкция по настройке автодеплоя на сервер из github (если вы хотите склонировать репозиторий и доработать код) - https://github.com/positron48/universal-ai-bot/blob/master/DEPLOYMENT.md

Вкратце - работает вроде в соответствии с best practice по деплою из гитхаба.

На сервере (у меня ubuntu VPS) нужно создать служебного пользователя, от имени которого будет запускаться бот. Там же ему даются все нужные права и забираются ненужные.

Далее генерируем ssh ключи для этого пользователя, указываем приватный ключ в секретах экшнов репозитория наряду с данными по серверу (куда гитхаб должен коннектиться).

Из интересного - я узнал что можно через ~/.ssh/authorized_keys настроить, какие команды сможет запускать пользователь, подключившийся по ssh. Например для деплоя:

# Add this line to ~/.ssh/authorized_keys
command="cd /path/to/your/bot && make update",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... deploy@your-domain.com

Т.е. мы разрешаем только одну команду из автодеплоя - зайти в папку с ботом и запустить make update (он уже внутри скачивает последний релизный бинарник и перезапускает сервис systemctl на сервере).


Ну и в качестве заключения - сам бот открытый, можете найти его как @positroid_english_bot.

Помимо репозитория непосредственно AI бота я также подготовил и просто скелетон Telegram-бота на go - этот уже может быть полезен только непосредственно разработчикам, так как предполагает доработку кода. Правда из коробки тоже работает с простыми командами - на его основе сделан и AI-бот.

Больше эксклюзивного контента и live-обновлений в моём Telegram-канале

Комментариев пока нет

Последние статьи