Обновлено 11 августа 2026.

ИИ-бот в Телеграмме — это обычный телеграм-бот, который передаёт сообщение пользователя языковой модели и возвращает её ответ. Свой такой бот собирается за вечер: токен у @BotFather, ключ к API модели и меньше сорока строк на Python. Ниже — код на версиях библиотек августа 2026, разбор доступа к OpenAI из России и таблица выбора между готовым ботом, конструктором и собственным кодом.

  • Рабочая связка: python-telegram-bot 22.8 (релиз 12 июня 2026, Python 3.10 и новее) и openai 2.53.0 (релиз 3 августа 2026).
  • Код из инструкций 2023 года не запустится: из python-telegram-bot удалены Filters и Dispatcher, а Updater остался, но с другой сигнатурой — на старом вызове Updater(token=…) код падает с TypeError. У openai модульный вызов openai.Completion.create не работает с версии 1.0.0.
  • Актуальный вызов OpenAI — client.responses.create(), в официальном примере библиотеки указана модель gpt-5.5.
  • России нет в списке стран, для которых OpenAI разрешает доступ к своему API, поэтому дальше разобран вариант на российской модели.
  • Бот без памяти отвечает на каждое сообщение с чистого листа; контекст диалога добавляется четырьмя строками кода.

Как устроен ИИ-бот в Телеграмме

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

Отсюда два практических следствия. Первое: качество ответов зависит от модели и системного промпта, а не от кода бота — переписывание обработчиков не сделает ответы умнее. Второе: у вас две точки отказа и два счётчика расходов — Telegram Bot API (бесплатный, но с лимитами) и API модели (платный, по токенам).

Получать обновления от Telegram можно двумя способами. Long polling — код сам опрашивает серверы Telegram; подходит для разработки и для бота, который живёт на вашем ноутбуке. Webhook — Telegram сам стучится на ваш URL; нужен домен с HTTPS. Одновременно они не работают: в документации Bot API про метод getUpdates прямо сказано, что он не будет работать, если установлен вебхук.

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Готовый ИИ-бот, конструктор или свой код

Путь одного сообщения: от пользователя к модели и обратно
Путь одного сообщения: от пользователя к модели и обратно

Прежде чем открывать редактор, стоит честно ответить, нужен ли вам код вообще. ИИ-бот в Телеграмме заводится тремя разными способами, и они решают разные задачи.

Путь Время до первого ответа в чате Своя логика и свои данные Где упирается
Готовый бот из каталога Минуты: нашли в поиске Telegram, нажали «Запустить» Нет: чужой промпт, чужая модель, чужие лимиты Нельзя подключить свою базу, нельзя гарантировать, что бот не исчезнет
Конструктор без программирования Часы: сценарий собирается мышью Частично: свои сценарии и кнопки, модель из списка платформы Абонентская плата, потолок платформы, данные лежат у неё
Свой бот на Python Вечер: токен, ключ, запуск скрипта Да: любая модель, свои данные, своя логика Нужен сервер и присмотр за ошибками, платите за токены сами

Готовые боты имеют смысл, когда задача разовая: перевести текст, обработать фото, набросать пост. У нас есть отдельный разбор такой категории — обзор бесплатных ботов для обработки фото в Telegram. Если же бот должен отвечать по вашим регламентам, вести клиента по воронке или писать в вашу CRM, чужой бот не подойдёт — сценарий придётся описывать самому. Формат и сценарии удобно продумать заранее: как выбрать формат чат-бота и сценарии для проекта.

Дальше — третий путь: собственный бот на Python. Он дороже по времени на старте и дешевле в эксплуатации, потому что вы платите только за токены модели и за сервер.

Шаг 1. Регистрация телеграм-бота: токен у @BotFather

Путь до токена в @BotFather
Путь до токена в @BotFather

Токен — это пароль вашего бота к Telegram Bot API. Выдаёт его служебный бот @BotFather внутри самого мессенджера.

  1. Откройте в Telegram чат с @BotFather и нажмите «Запустить».
  2. Отправьте команду /newbot.
  3. Введите отображаемое имя бота — его увидят пользователи в заголовке чата.
  4. Введите username: он должен быть уникальным и заканчиваться на bot, например my_ai_helper_bot.
  5. Скопируйте выданный токен вида 1234567890:AA… и сохраните его вне кода.

Тем же @BotFather позже задаются описание, аватар и список команд (/setcommands) — это то, что человек видит до первого сообщения. Полное описание методов и лимитов лежит в официальной документации Telegram Bot API; на 14 июля 2026 там актуальна версия Bot API 10.2.

Шаг 2. Получение доступа к модели

Вторая половина бота — доступ к языковой модели. У OpenAI ключ создаётся в личном кабинете разработчика в разделе API keys, оплата идёт по факту израсходованных токенов. Ключ показывается один раз, поэтому сохраняйте его сразу.

Здесь же стоит проверить главное ограничение: Россия отсутствует в перечне поддерживаемых стран и территорий OpenAI. Формулировка на этой странице прямая: доступ к сервисам за пределами перечисленных стран может привести к блокировке или приостановке аккаунта. Что делать в этом случае — разобрано ниже отдельной главой, код там отличается на четыре строки.

Шаг 3. Подготовка окружения

Нужен Python 3.10 или новее — это требование python-telegram-bot 22.8. Виртуальное окружение изолирует зависимости проекта от системных.

python3 -m venv botenv
source botenv/bin/activate   # Windows: botenv\Scripts\activate
pip install "python-telegram-bot==22.8" "openai==2.53.0"

Версии закреплены намеренно: у python-telegram-bot между мажорными версиями менялись имена классов, и большая часть нерабочих примеров в интернете — это код под версию 13, запущенный на версии 22. Если Python вы видите впервые, начните с базы — почему программисты выбирают Python и как написать первый код.

ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
  • Где и как применять? Потестируем модель после установки на разных задачах
  • Как дообучить модель под себя?

Шаг 4. Разработка бота: код целиком

Создайте файл bot.py. Это законченный бот: он отвечает на любое текстовое сообщение ответом модели и показывает статус «печатает», пока ждёт ответ.

import os

from openai import AsyncOpenAI
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters

client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])
SYSTEM_PROMPT = "Ты ассистент поддержки. Отвечай коротко и по-русски."


async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await update.message.reply_text("Задайте вопрос — отвечу с помощью нейросети.")


async def reply(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await context.bot.send_chat_action(chat_id=update.effective_chat.id, action="typing")
    response = await client.responses.create(
        model="gpt-5.5",
        instructions=SYSTEM_PROMPT,
        input=update.message.text,
    )
    await update.message.reply_text(response.output_text[:4096])


def main() -> None:
    app = Application.builder().token(os.environ["TELEGRAM_TOKEN"]).build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, reply))
    app.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()

Запуск — с токенами в переменных окружения, чтобы ключи не уехали в репозиторий вместе с кодом:

export TELEGRAM_TOKEN="1234567890:AA..."
export OPENAI_API_KEY="sk-..."
python bot.py

Что здесь важно построчно. filters.TEXT & ~filters.COMMAND означает «любой текст, кроме команд», иначе бот начнёт отвечать нейросетью на собственный /start. instructions — это системный промпт: он задаёт роль и тон, и именно правкой одной этой строки один и тот же код превращается в переводчика, репетитора или бота поддержки. Срез [:4096] нужен потому, что Telegram принимает текст сообщения длиной 1–4096 символов, а модель легко напишет больше — без среза бот молча упадёт на длинном ответе.

Официальный пример эхо-бота с теми же импортами лежит в документации python-telegram-bot — если что-то не сходится, сверяйтесь с ним, а не с чужими статьями.

Почему код из старых инструкций падает с ошибкой

Большинство русскоязычных руководств про телеграм-бота с ИИ написаны в 2023 году, и обе библиотеки с тех пор сломали обратную совместимость. Ломаются они по-разному, и по тексту ошибки сразу видно, какая из двух.

python-telegram-bot падает на импорте, но не на том имени, которое обычно называют. Из библиотеки убраны Filters и Dispatcher: строка из примеров 2023 года from telegram.ext import Updater, Filters на версии 22.8 обрывается сообщением ImportError: cannot import name 'Filters' from 'telegram.ext' — имени Updater в нём нет. Сам класс на месте: from telegram.ext import Updater проходит без ошибки и даёт <class 'telegram.ext._updater.Updater'>. Изменилась его роль — в документации библиотеки он описан как объект, который забирает обновления у Telegram и складывает их в очередь, создаётся как Updater(bot, update_queue), а точкой входа в приложение стал Application. Поэтому старый конструктор ломается не на импорте, а на вызове: Updater(token="…", use_context=True) даёт TypeError: Updater.__init__() got an unexpected keyword argument 'token'.

openai ломается иначе: на импорте не падает вовсе. import openai проходит, атрибут openai.Completion на месте — это заглушка-прокси, — и исключение прилетает только в момент вызова. openai.Completion.create(...) даёт APIRemovedInV1: You tried to access openai.Completion, but this is no longer supported in openai>=1.0.0, openai.ChatCompletion.create(...) — то же сообщение. Если бот стартовал, принял сообщение и упал уже на запросе к модели, причина здесь. Ниже — построчное соответствие старого и нового.

Как было в примерах 2023 года Как работает сейчас
from telegram.ext import Updater, Filters from telegram.ext import Application, filtersFilters удалён, модуль фильтров пишется строчными
Updater(token=…, use_context=True) Application.builder().token(…).build(); Updater в библиотеке остался, но с сигнатурой (bot, update_queue) и в коде бота напрямую не нужен
dispatcher.add_handler(…) app.add_handler(…), класс Dispatcher удалён
def respond(update, context) async def respond(update, context) — обработчики асинхронные
updater.start_polling() + updater.idle() app.run_polling() одной строкой; метод start_polling у Updater сохранился, idle убран
openai.api_key = "sk-…" client = AsyncOpenAI(api_key=…); openai.api_key работает и сейчас — его подхватывает модульный клиент, — но явный клиент держит настройки в одном месте, позволяет завести несколько клиентов с разными ключами и даёт асинхронный AsyncOpenAI
openai.Completion.create(engine="text-davinci-003") client.responses.create(model=…); text-davinci-003 отключена 4 января 2024
response.choices[0].text response.output_text

Проверить свою версию можно командой pip show python-telegram-bot openai. Если в поле Version стоит 13.x — это библиотека под старый синтаксис, и половина примеров из статьи не заработает.

Как добавить боту память диалога

Бот из шага 4 отвечает на каждое сообщение с чистого листа: спросите «а подробнее?» — и он не поймёт, о чём речь. Историю переписки нужно хранить самому и передавать модели целиком. В python-telegram-bot для этого есть context.user_data — словарь, живущий отдельно для каждого пользователя.

async def reply(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    history = context.user_data.setdefault("history", [])
    history.append({"role": "user", "content": update.message.text})
    response = await client.responses.create(
        model="gpt-5.5",
        instructions=SYSTEM_PROMPT,
        input=history[-10:],
    )
    history.append({"role": "assistant", "content": response.output_text})
    await update.message.reply_text(response.output_text[:4096])

Срез [-10:] — это про деньги: каждое сообщение истории уходит в модель при каждом запросе, и без ограничения счёт за токены растёт квадратично по длине диалога. По умолчанию user_data хранится в оперативной памяти и обнуляется при перезапуске бота; чтобы память переживала рестарт, в библиотеке есть механизм персистентности, а под нагрузкой историю выносят в базу.

Что делать, если OpenAI недоступен из России

Что меняется при переезде на другую модель
Что меняется при переезде на другую модель

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

Первый путь — прокси-совместимый шлюз: сторонний сервис принимает запросы в формате OpenAI и передаёт их дальше, вы меняете только base_url у клиента. Второй, более предсказуемый по документам и оплате, — российская языковая модель. У GigaChat есть официальная Python-библиотека и асинхронный клиент, поэтому она встаёт в тот же обработчик.

pip install gigachat
import os

from gigachat import GigaChat
from telegram import Update
from telegram.ext import ContextTypes

CREDENTIALS = os.environ["GIGACHAT_CREDENTIALS"]


async def reply(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    async with GigaChat(credentials=CREDENTIALS, model="GigaChat-2") as giga:
        response = await giga.achat.create(update.message.text)
    answer = response.messages[0].content[0].text
    await update.message.reply_text(answer[:4096])

Ключ авторизации берётся в личном кабинете разработчика Сбера, там же выдаётся стартовый пакет токенов. Две вещи, на которых спотыкаются: модель нужно указывать явно (model="GigaChat-2"), иначе библиотека может отказаться выбирать её за вас, а список доступных моделей возвращает метод get_models(). И клиент в примере создаётся на каждое сообщение — для теста нормально, в проде клиент создают один раз при старте приложения, чтобы не переавторизовываться на каждый запрос.

Формат ответа отличается от OpenAI: текст лежит не в output_text, а в response.messages[0].content[0].text. Это единственное место, которое придётся поправить при переезде с одной модели на другую, — ещё одна причина держать обращение к модели в отдельной функции, а не размазывать по обработчикам.

Шаг 5. Тестирование и отладка

Первый запуск проверяется руками: python bot.py, затем в чате с ботом команда /start и любой вопрос. Ответ должен прийти за несколько секунд. Если бот молчит, ответ ищите в терминале: библиотека печатает туда исключения, и по тексту ошибки видно, что случилось: неверный токен или отказ API модели.

Логирование включается двумя строками и с первого дня экономит часы отладки: без него бот, упавший ночью, не оставляет следов.

import logging

logging.basicConfig(
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    level=logging.INFO,
)

Когда бот перерастает один файл, подключают автоматизированное тестирование. Обработчик — обычная асинхронная функция, поэтому модульные тесты пишутся на pytest с плагином pytest-asyncio: вы подменяете вызов модели заглушкой и проверяете, что бот отправил в чат ожидаемый текст. Интеграционную проверку удобно делать на втором, «черновом» боте с отдельным токеном — так эксперименты не задевают пользователей рабочего.

Что ломается у ИИ-бота в реальной работе

На своём ноутбуке бот работает у всех. Проблемы начинаются, когда его оставляют включённым на сутки. Таблица ниже — симптомы, которые ловятся чаще всего, и что за ними стоит.

Симптом Причина Что сделать
Ошибка 409 Conflict в логах Запущено два экземпляра бота с одним токеном либо polling конфликтует с ранее установленным вебхуком Оставить один процесс; при переходе на polling снять вебхук методом deleteWebhook
Бот молчит на длинных ответах Модель вернула больше 4096 символов — предела Telegram для текста сообщения Резать ответ или отправлять частями
telegram.error.RetryAfter Превышена частота отправки сообщений, Telegram включил флуд-контроль Дождаться указанного в ошибке времени, добавить очередь
telegram.error.TimedOut Сеть или долгий ответ модели Обернуть вызов модели в try/except и извиниться в чат вместо тишины
Счёт за токены больше ожидаемого В модель уходит вся история диалога на каждом сообщении Ограничить историю срезом и длиной ответа

Безопасность

Токен бота и ключ модели — в переменных окружения или в секретах хостинга, никогда в коде и не в репозитории: утёкший токен даёт чужому человеку полный доступ к вашему боту. Если бот отвечает не всем подряд, проверяйте update.effective_user.id по списку разрешённых. И помните, что текст пользователя попадает в промпт: инструкции модели пишите так, чтобы присланная фраза «забудь предыдущие указания» не переопределяла роль.

Масштабирование: вебхук вместо polling

Для постоянной работы бота нужен сервер: виртуальная машина у облачного провайдера, systemd-юнит или контейнер. Под нагрузкой polling меняют на вебхук — в python-telegram-bot это замена одной строки запуска, домен с HTTPS-сертификатом уже должен быть:

app.run_webhook(
    listen="0.0.0.0",
    port=8443,
    url_path="secret-path",
    webhook_url="https://example.com/secret-path",
)

Вебхук снимает лишние запросы к серверам Telegram и сокращает задержку ответа, но требует публичного адреса — поэтому на этапе разработки остаются на polling.

Куда приспособить своего ИИ-бота

Один и тот же код меняет назначение правкой системного промпта и парой команд. Рабочие сценарии, которые чаще всего доводят до конца:

  • Первая линия поддержки: бот отвечает по вашим регламентам и передаёт человеку то, чего не знает.
  • Внутренний помощник команды: пересказ длинных писем, черновики ответов, расшифровка задач из голосовых.
  • Личный интерфейс к нейросети: свой бот не имеет чужих лимитов и не показывает рекламу; заодно мессенджер превращается в рабочий инструмент — например, как превратить Телеграмм в удобный таск-менеджер.
  • Приём заявок: бот собирает данные диалогом и кладёт их в таблицу или CRM.

Практические советы по интерфейсу

Лучшие практики здесь сводятся к одному правилу: человек должен понимать, что бот умеет, до того как напишет первое сообщение. Список команд задаётся через /setcommands у @BotFather и показывается в меню чата. Частые действия выносятся на кнопки клавиатуры, чтобы не заставлять человека угадывать формулировку. На непонятный запрос бот отвечает подсказкой о своих возможностях; молчание пользователи читают как поломку и уходят.

Маркетинг и продвижение бота

У бота есть постоянная ссылка вида t.me/имя_бота — она работает как адрес сайта: её ставят в описание канала, в подпись, в статью. Короткое описание и аватар задаются там же, у @BotFather, и это первое, что видит человек перед запуском. Дальше работают каталоги ботов, тематические чаты и собственные площадки; для внутреннего бота компании продвижение сводится к одному сообщению в рабочем чате.

Чек-лист перед запуском

  • Python 3.10+, зафиксированные версии библиотек в requirements.txt.
  • Токен и ключ модели — в переменных окружения, репозиторий чистый.
  • Системный промпт описывает роль, тон и границы бота.
  • Ответ модели режется до 4096 символов.
  • История диалога ограничена срезом, расход токенов предсказуем.
  • Вызов модели обёрнут в try/except, ошибки видны в логах.
  • На сервере работает ровно один экземпляр бота с этим токеном.

Частые вопросы про ИИ-бота в Телеграмме

Сколько стоит собственный ИИ-бот в Телеграмме?

Telegram Bot API бесплатен, платными остаются два пункта: токены языковой модели по факту использования и сервер, на котором бот живёт круглосуточно. Тестовый запуск на своём компьютере не стоит ничего, кроме токенов модели.

Можно ли сделать ИИ-бота в Телеграмме без программирования?

Да, через конструкторы чат-ботов с подключённой нейросетью или готовые боты из каталога. Ограничение в том, что своя логика, свои данные и своя модель доступны только в собственном коде.

Почему код телеграм-бота из старых статей не запускается?

Ломаются обе библиотеки, но по-разному. В python-telegram-bot удалены классы Filters и Dispatcher, поэтому строка from telegram.ext import Updater, Filters даёт ImportError: cannot import name 'Filters' from 'telegram.ext'. Сам Updater из библиотеки не пропал, но теперь создаётся как Updater(bot, update_queue), и старый вызов Updater(token=…) падает с TypeError: Updater.__init__() got an unexpected keyword argument 'token'. Обработчики стали асинхронными, приложение собирают через Application.builder(). В openai импорт проходит без ошибок, а исключение APIRemovedInV1 прилетает уже при вызове openai.Completion.create — этот вызов удалён в версии 1.0.0.

Как сделать ИИ-бота, если OpenAI недоступен из России?

Поменять только функцию обращения к модели: подключить российскую модель вроде GigaChat с её официальной Python-библиотекой или совместимый шлюз с другим base_url. Код телеграм-части не меняется.

Как заставить бота помнить переписку?

Хранить историю сообщений в context.user_data и передавать модели последние несколько реплик вместе с новым вопросом. Без ограничения истории расход токенов растёт с каждым сообщением.

Заключение

ИИ-бот в Телеграмме — это тридцать строк склейки между двумя API. Сложность живёт в двух местах: актуальность версий библиотек и доступ к модели. Возьмите python-telegram-bot 22.8 и openai 2.53.0, держите ключи в переменных окружения, режьте ответ до 4096 символов и ограничивайте историю диалога. Если OpenAI недоступен, меняется одна функция, а не проект. Всё остальное — системный промпт, и именно он определяет, чем ваш бот отличается от чужого.

Большой практикум
ЗАМЕНИ ВСЕ НЕЙРОСЕТИ НА ОДНУ — PERPLEXITY
ПОКАЖЕМ НА КОНКРЕТНЫХ КЕЙСАХ
  • Освой нейросеть Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
  • УЧАСТВОВАТЬ ЗА 0 РУБ.
  • Расскажем, как получить подписку
Участвовать бесплатно
ОНЛАЙН-ПРАКТИКУМ
ЗАПУСК нейросети DEEPSEEK R1 ЛОКАЛЬНО НА СВОЕМ КОМПЬЮТЕРЕ
ЧТО БУДЕТ НА ОБУЧЕНИИ?
  • ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
Участвовать бесплатно