By obrizan on Май 9, 2025 · Прочитать этот пост на других языках: Ukrainian English
В этом уроке вы научитесь создавать Telegram-бота, который отвечает на ваши вопросы с помощью искусственного интеллекта — модели ChatGPT от OpenAI. Мы шаг за шагом:
Содержание:
Чтобы ваш бот мог обращаться к ChatGPT, вам нужен API-ключ от OpenAI. Для этого:
sk-proj-abc1234567890...
Обязательно сохраните этот ключ в безопасном месте. Он больше не будет отображаться повторно.
Подробнее о работе с OpenAI API читайте в уроке: "Как работать с ChatGPT с помощью OpenAI API и Python"
/newbot
и предоставьте следующую информацию:bot
(например, my_gpt_bot
).
1234567890:AdfgqAAWEGaASDqwefeasefadfaweAEFAA
. ⚠️ Внимание:
Переходим к практике программирования.
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
. Напишите любое сообщение. Ваш бот должен отвечать вам таким же сообщением:
🚀 Поздравляю! Если вы видите ответы бота, значит интеграция с ним настроена правильно.
На этом шаге мы подключим ChatGPT через OpenAI API, чтобы на ваши сообщения отвечал искусственный интеллект. Важно: для этого шага нужно получить OpenAI API ключ и установить библиотеку OpenAI (pip install openai
), как указано в туториале "Как работать с ChatGPT с помощью OpenAI API и Python"
Нужно модифицировать файл main.py
следующим образом:
# ВАЖНО: укажите ваш 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 через телеграм-бота:
👏 Поздравляю! Вы создали собственного чатбота с функциями искусственного интеллекта!
Sign in to leave a comment.
← Back to blog