Краткий ответ
Чтобы связать AI-агента с Telegram-ботом, нужно три вещи: бот в Telegram, код, который принимает сообщения, и вызов модели по этому сообщению. Агент — это не отдельный сервис, а слой логики между Telegram и моделью: он хранит историю диалога, решает, что делать с ответом модели, и отправляет результат обратно в чат. Минимальная рабочая схема занимает около 120 строк кода и запускается за час.
Чему вы научитесь
- Создавать бота через
@BotFatherи получать токен - Принимать сообщения long polling без внешнего сервера
- Вызывать модель и возвращать ответ в чат
- Понимать, где граница между ботом и агентом
Примените за 40 минут
Экономите 20 часов — столько уходит, если разбираться с Bot API и подключением модели с нуля.
Уровень: Новичок
Зачем это нужно
Telegram — самый массовый мессенджер в России и СНГ. По данным Mediascope, аудитория Telegram в стране превысила 82 млн человек. Если ваш продукт или услуга должны отвечать клиентам в чате, бот — самый быстрый способ это сделать без отдельного приложения и без операторов на линии.
AI-агент добавляет к обычному боту главное: он не раздаёт заготовки, а формирует ответ под конкретный вопрос. Обычный бот работает по правилам, агент — по смыслу.
| Подход | Ответ на нестандартный вопрос | Стоимость |
|---|---|---|
| Без AI | «Нажмите кнопку 2» или тишина | Только разработка |
| Без AI + человек | Оператор отвечает вручную | От 300 ₽/час |
| С AI | Смысловой ответ за секунды | ~300 ₽ на 1000 запросов |
Что это такое
Бот — это программа, зарегистрированная в Telegram под специальным именем. Она не «понимает» сообщения, а получает их как структурированные данные и отвечает по правилам.
Агент — надстройка над ботом: та же программа, но с моделью внутри и с памятью диалога.
Ключевое различие в одном предложении: бот отвечает по правилам, агент отвечает по смыслу.
Технически агент — это цикл из четырёх шагов:
Сообщение → история → модель → проверка → ответ
Сценарии применения
- Техподдержка товара — бот отвечает на частые вопросы про доставку и оплату
- Квалификация лидов — агент задаёт вопросы и отбирает целевых
- Внутренний ассистент — команда спрашивает бот про регламенты
- Сбор обратной связи — бот проводит короткий опрос и суммирует ответы
- Агент-автоматизатор — бот запускает действия в других системах
Пошаговая инструкция
Шаг 1. Создайте бота
Напишите @BotFather, команда /newbot, задайте имя и username. Он выдаст токен вида 123456:ABC-DEF.... Это ваш пароль — не публикуйте его.
Шаг 2. Примите первое сообщение
Используйте long polling: сервер не отправляет вам ничего, вы сами спрашиваете о новых сообщениях. Это избавляет от публичного адреса.
import requests
TOKEN = "<YOUR_TOKEN>"
def get_updates(offset=0):
url = f"https://api.telegram.org/bot{TOKEN}/getUpdates"
return requests.get(url, params={"offset": offset, "timeout": 30}).json()
Шаг 3. Вызовите модель
Соберите историю диалога и передайте её модели. Ограничивайте историю — иначе растёт цена и падает точность.
def ask_model(history):
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": "Bearer <YOUR_KEY>"},
json={
"model": "anthropic/claude-sonnet-4",
"messages": history,
"max_tokens": 1000,
},
)
return response.json()["choices"][0]["message"]["content"]
Шаг 4. Верните ответ
def send_message(chat_id, text):
requests.post(
f"https://api.telegram.org/bot{TOKEN}/sendMessage",
json={"chat_id": chat_id, "text": text},
)
Шаг 5. Сведите в цикл
offset = 0
while True:
result = get_updates(offset)
for update in result["result"]:
offset = update["update_id"] + 1
chat_id = update["message"]["chat"]["id"]
history.append({"role": "user", "content": update["message"]["text"]})
send_message(chat_id, ask_model(history))
Шаг 6. Ограничьте доступ
Добавьте проверку chat_id по белому списку. Без неё бот отвечает любому, кто его нашёл.
Что здесь не сработает
| Задача | Решение | Почему |
|---|---|---|
| Отвечать на сложные юридические вопросы | Не делегировать модели | Ответственность на бизнесе, а не на боте |
| Мгновенная реакция в 03:00 ночи | Спасает только модель | Long polling засыпает вместе с процессом |
| Нагрузка больше 50 сообщений в секунду | Нужен вебхук и очередь | Long polling не масштабируется |
| Диалог длиннее 20 сообщений | Нужна память в базе | История в памяти процесса теряется при рестарте |
| Экономия на модельной ключе | Урезать max_tokens | Дешёвые ответы хуже отвечают на сложные вопросы |
| Развёртывание на 3 минутах | Нужен нормальный хостинг | Токен и ключ нельзя хранить в коде |
Типичные ошибки
Токен в коде — выглядит так: TOKEN = "123456:ABC-DEF". Сосед по репозиторию получает доступ к вашему боту. Исправление: переменная окружения os.environ["TELEGRAM_BOT_TOKEN"].
История растёт бесконечно — через неделю вы платите в 20 раз больше за один и тот же вопрос. Исправление: обрезайте до последних 10–15 сообщений.
Бот без белого списка — через неделю накопятся спам-сообщения и жалобы на ваш username. Исправление: проверка chat_id до обработки.
Ошибки модели молча проглатываются — response.json() падает на нестандартном ответе. Исправление: обёртка try/except и лог.
Цикл без задержки — вы отправляете тысячи запросов в секунду и ловите 429 Too Many Requests. Исправление: time.sleep(1) в конце итерации.
Нет логов — когда что-то сломается, разбираться нечем. Исправление: пишите в файл или в сервис логов.
Метрики
Считайте три вещи:
Экономия часов = количество вопросов × среднее время ответа оператора
Стоимость запроса = цена за 1M токенов × токены на ответ / 1_000_000
Окупаемость = экономия часов × стоимость часа / (разработка + ежемесячные расходы)
Чек-лист
- Бот создан через
@BotFather - Токен в переменной окружения, не в коде
- Long polling работает, ответ приходит в чат
- История диалога ограничена
- Белый список
chat_idнастроен - Ошибки логируются
- Ключ модели в переменной окружения
