Як створити Telegram-чатбота з ChatGPT на Python
By Volodymyr Obrizan on Травень 9, 2025 · Прочитати цю публікацію іншими мовами: Russian 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