Как создать Telegram-чатбота с ChatGPT на Python
By Volodymyr Obrizan on Май 9, 2025 · Прочитать этот пост на других языках: Ukrainian English
В этом уроке вы научитесь создавать Telegram-бота, который отвечает на ваши вопросы с помощью искусственного интеллекта — модели ChatGPT от OpenAI. Мы шаг за шагом:
- зарегистрируем бота в Telegram через BotFather;
- получим API-ключи OpenAI и Telegram;
- настроим среду Python с библиотекой aiogram;
- реализуем бот-сервер, который обрабатывает сообщения и отправляет их в ChatGPT;
- получим ответы и отправим их обратно в Telegram.
Содержание:
Шаг 1. Получить OpenAI API-ключ
Чтобы ваш бот мог обращаться к ChatGPT, вам нужен API-ключ от OpenAI. Для этого:
- Зарегистрируйтесь или войдите в OpenAI Platform
- Перейдите в раздел API Keys и нажмите Create new secret key.
- Скопируйте сгенерированный ключ — он будет выглядеть примерно так:
sk-proj-abc1234567890...
Обязательно сохраните этот ключ в безопасном месте. Он больше не будет отображаться повторно.
Подробнее о работе с OpenAI API читайте в уроке: "Как работать с ChatGPT с помощью OpenAI API и Python"
Шаг 2. Создать Telegram-бота через BotFather
- Откройте в Телеграме бота BotFather по ссылке: https://t.me/BotFather
- Выполните команду
/newbot
и предоставьте следующую информацию:- произвольное название (может содержать пробелы);
- уникальное короткое имя, которое заканчивается на
bot
(например,my_gpt_bot
).
- После создания бот получит Telegram API Token, который выглядит так:
1234567890:AdfgqAAWEGaASDqwefeasefadfaweAEFAA
.
⚠️ Внимание:
- Скопируйте токен с этой страницы, так как больше он не будет показан (потому что это секрет). Если вы потеряете ключ, можно будет создать новый.
- Сохраните этот токен в секретном месте и никому его не показывайте, так как, имея этот токен, можно выполнять действия от имени вашего бота.
Шаг 3. Создадим код Телеграм-бота на Python
Переходим к практике программирования.
- Создайте новый Python-проект с использованием Virtual Environment (как мы делали в туториале "Как работать с ChatGPT с помощью OpenAI API и Python")
- Создайте новый файл
main.py
и добавьте в него базовый код телеграм-бота:
import asyncio
import logging
import sys
from aiogram import Bot, Dispatcher, html
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.filters import CommandStart
from aiogram.types import Message
# Токен бота можно получить по ссылке https://t.me/BotFather
# ВАЖНО: укажите ваш токен
TOKEN = "1234567890:AdfgqAAWEGaASDqwefeasefadfaweAEFAA"
dp = Dispatcher()
@dp.message(CommandStart())
async def command_start_handler(message: Message) -> None:
await message.answer(f"Hello, {html.bold(message.from_user.full_name)}!")
@dp.message()
async def echo_handler(message: Message) -> None:
try:
# Отправляем копию полученного сообщения
await message.send_copy(chat_id=message.chat.id)
except TypeError:
# Но не все типы поддерживают копирование, поэтому нужно это обработать
await message.answer("Nice try!")
async def main() -> None:
# Инициализируем экземпляр бота со свойствами по умолчанию, которые будут переданы во все API вызовы
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
# И запускаем обработку событий
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
asyncio.run(main())
ВАЖНО: в строке TOKEN = "1234567890:AdfgqAAWEGaASDqwefeasefadfaweAEFAA"
укажите ваш токен от Телеграм-бота, который вы получили на предыдущем шаге.
Этот код использует библиотеку aiogram — современный полностью асинхронный фреймворк для Telegram Bot API, написанный на Python с использованием asyncio и aiohttp. Нужно установить эту библиотеку в окружение вашего проекта. Для этого откройте Terminal в PyCharm и выполните команду:
pip install aiogram
После выполнения этой команды вы должны получить сообщение Successfully installed aiogram-3.20.0
, как показано на изображении.
Запускаем файл main.py
с помощью кнопки Debug (зелёная жучок), или с помощью команды в терминале: python main.py
.
В терминале PyCharm вы увидите сообщение Run polling for bot @obrizan_ai_assistant_bot id=7893124402 - "Obrizan's AI Assistant"
, как показано на изображении ниже. Это означает, что Телеграм-бот готов принимать сообщения. (Название и идентификатор бота у вас будут другими).
Откройте вашего бота в Телеграме, выполните команду /start
. Напишите любое сообщение. Ваш бот должен отвечать вам таким же сообщением:
🚀 Поздравляю! Если вы видите ответы бота, значит интеграция с ним настроена правильно.
Шаг 4. Интегрируем бота с ChatGPT с помощью OpenAI API
На этом шаге мы подключим ChatGPT через OpenAI API, чтобы на ваши сообщения отвечал искусственный интеллект. Важно: для этого шага нужно получить OpenAI API ключ и установить библиотеку OpenAI (pip install openai
), как указано в туториале "Как работать с ChatGPT с помощью OpenAI API и Python"
Нужно модифицировать файл main.py
следующим образом:
- добавить создание OpenAI-клиента (важно: укажите ваш актуальный OpenAI API-ключ):
# ВАЖНО: укажите ваш API-ключ
client = AsyncOpenAI(
api_key="sk-proj-ieqbTxAWEF0GDSgfv4K0m2..._3sROehQhz4afQWAWEASDFt9"
)
- удалить предыдущий обработчик
def echo_handler(message: Message)
; - добавить новую функцию
def openai_handler(message: Message)
, в которой мы получаем запрос от пользователя, пересылаем его в ChatGPT через OpenAI API (методclient.responses.create(...)
), а после получения ответа от ChatGPT пересылаем его пользователю в Telegram (методmessage.answer(...)
):
@dp.message()
async def openai_handler(message: Message) -> None:
# Пересылаем запрос пользователя в ChatGPT
response = await client.responses.create(
model="gpt-4o-mini",
instructions="Answer in a plain text without formatting.",
input=message.text
)
try:
# Пересылаем ответ ChatGPT пользователю
await message.answer(response.output_text)
except TypeError:
await message.answer("Can't process this request!")
Окончательная версия файла main.py
должна выглядеть следующим образом:
import asyncio
import logging
import sys
from os import getenv
from aiogram import Bot, Dispatcher, html
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.filters import CommandStart
from aiogram.types import Message
from openai import AsyncOpenAI
# Токен бота можно получить по ссылке https://t.me/BotFather
# ВАЖНО: укажите ваш токен
TOKEN = "1234567890:AdfgqAAWEGaASDqwefeasefadfaweAEFAA"
dp = Dispatcher()
# ВАЖНО: укажите ваш API-ключ
client = AsyncOpenAI(
api_key="sk-proj-ieqbTxAWEF0GDSgfv4K0m2..._3sROehQhz4afQWAWEASDFt9"
)
@dp.message(CommandStart())
async def command_start_handler(message: Message) -> None:
await message.answer(f"Hello, {html.bold(message.from_user.full_name)}!")
@dp.message()
async def openai_handler(message: Message) -> None:
# Пересылаем запрос пользователя в ChatGPT
response = await client.responses.create(
model="gpt-4o-mini",
instructions="Answer in a plain text without formatting.",
input=message.text
)
try:
# Пересылаем ответ ChatGPT пользователю
await message.answer(response.output_text)
except TypeError:
await message.answer("Can't process this request!")
async def main() -> None:
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
asyncio.run(main())
Запускаем файл main.py
с помощью кнопки Debug (зелёная жучок), или с помощью команды в терминале: python main.py
. Переходим проверять общение с ChatGPT через телеграм-бота:
👏 Поздравляю! Вы создали собственного чатбота с функциями искусственного интеллекта!
Полезные ссылки
- Как работать с ChatGPT с помощью OpenAI API и Python
- Онлайн-курс «Знакомство с Python» — изучайте синтаксис, типы данных, условные операторы, циклы, алгоритмы и объектно-ориентированное программирование с нуля. Теория + практические задания.
- Онлайн-курс «Функциональное программирование на Python» — познакомьтесь с функциональным программированием в Python с помощью этого гида. Изучите итераторы, генераторы и ключевые модули, такие как itertools и functools.
- aiogram — современный полностью асинхронный фреймворк для Telegram Bot API, написанный на Python с использованием asyncio и aiohttp.
- OpenAI Python API library