Как создать Telegram-чатбота с ChatGPT на Python

By obrizan on Май 9, 2025 · Прочитать этот пост на других языках: Ukrainian English

blog-chatbot.png

В этом уроке вы научитесь создавать Telegram-бота, который отвечает на ваши вопросы с помощью искусственного интеллекта — модели ChatGPT от OpenAI. Мы шаг за шагом:

  • зарегистрируем бота в Telegram через BotFather;
  • получим API-ключи OpenAI и Telegram;
  • настроим среду Python с библиотекой aiogram;
  • реализуем бот-сервер, который обрабатывает сообщения и отправляет их в ChatGPT;
  • получим ответы и отправим их обратно в Telegram.

Содержание:

Шаг 1. Получить OpenAI API-ключ

Чтобы ваш бот мог обращаться к ChatGPT, вам нужен API-ключ от OpenAI. Для этого:

  1. Зарегистрируйтесь или войдите в OpenAI Platform
  2. Перейдите в раздел API Keys и нажмите Create new secret key.
  3. Скопируйте сгенерированный ключ — он будет выглядеть примерно так:
sk-proj-abc1234567890...

Обязательно сохраните этот ключ в безопасном месте. Он больше не будет отображаться повторно.

Подробнее о работе с OpenAI API читайте в уроке: "Как работать с ChatGPT с помощью OpenAI API и Python"

Шаг 2. Создать Telegram-бота через BotFather

  1. Откройте в Телеграме бота BotFather по ссылке: https://t.me/BotFather
  2. Выполните команду /newbot и предоставьте следующую информацию:
    • произвольное название (может содержать пробелы);
    • уникальное короткое имя, которое заканчивается на bot (например, my_gpt_bot). 001-register-telegram-bot.png
  3. После создания бот получит Telegram API Token, который выглядит так: 1234567890:AdfgqAAWEGaASDqwefeasefadfaweAEFAA.

⚠️ Внимание:

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

Шаг 3. Создадим код Телеграм-бота на Python

Переходим к практике программирования.

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

Screenshot 2025-05-09 at 08.09.38.png

После выполнения этой команды вы должны получить сообщение Successfully installed aiogram-3.20.0, как показано на изображении.

Screenshot 2025-05-09 at 08.10.07.png

Запускаем файл main.py с помощью кнопки Debug (зелёная жучок), или с помощью команды в терминале: python main.py.

Screenshot 2025-05-09 at 08.15.19.png

В терминале PyCharm вы увидите сообщение Run polling for bot @obrizan_ai_assistant_bot id=7893124402 - "Obrizan's AI Assistant", как показано на изображении ниже. Это означает, что Телеграм-бот готов принимать сообщения. (Название и идентификатор бота у вас будут другими).

Screenshot 2025-05-09 at 08.17.27.png

Откройте вашего бота в Телеграме, выполните команду /start. Напишите любое сообщение. Ваш бот должен отвечать вам таким же сообщением:

002-verify-bot-integration.png

🚀 Поздравляю! Если вы видите ответы бота, значит интеграция с ним настроена правильно.

Шаг 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 через телеграм-бота:

003-verify-openai-integration.png

👏 Поздравляю! Вы создали собственного чатбота с функциями искусственного интеллекта!

Полезные ссылки

Telegram
Viber
LinkedIn
WhatsApp

Comments

Sign in to leave a comment.

← Back to blog