Як створити Telegram-бота з ChatGPT: без коду та з кодом
Зберемо українського AI-бота, якому користувач пише в Telegram, а відповідь формує модель OpenAI. Новачок зможе зробити це у n8n без програмування, а досвідчений читач — запустити мінімальну версію на JavaScript і розвивати її далі.
Що ми створюємо і кому це потрібно
Telegram-бот — це окремий обліковий запис, яким керує програма. Людина надсилає повідомлення, Telegram передає його нашому сценарію, сценарій звертається до моделі OpenAI й повертає відповідь назад у чат. Так можна зробити помічника для підтримки клієнтів, внутрішню базу знань, тренажер, перекладач, генератор ідей або інтерфейс до власного сервісу.
У побуті такий проєкт часто називають «ботом із ChatGPT». Технічно бот не керує сайтом ChatGPT: він використовує OpenAI API. Це важлива різниця. Підписка на ChatGPT і використання API — окремі продукти; для бота потрібен API-ключ і налаштована оплата використання API.
Маршрут без коду
Telegram Trigger → OpenAI → Telegram у n8n. Підходить для першого робочого прототипу, автоматизацій і людей, яким зручніше складати логіку з блоків.
Маршрут із кодом
Невеликий серверний скрипт на JavaScript. Підходить, якщо потрібні власна логіка, база даних, точний контроль помилок або масштабування.
Що потрібно перед стартом
- обліковий запис Telegram;
- доступ до офіційного @BotFather;
- обліковий запис OpenAI Platform, API-ключ і встановлений ліміт витрат;
- для маршруту без коду — n8n Cloud або власний n8n із публічною HTTPS-адресою;
- для маршруту з кодом — Node.js 20 або новіший і сервер для постійної роботи.
Крок 1. Створіть бота через BotFather
- Перевірте адресу. Відкрийте саме
@BotFatherз синьою позначкою Telegram, а не схожий сторонній акаунт. - Надішліть
/newbot. Укажіть видиму назву, наприклад «Мій AI-помічник». - Створіть username. Він має бути унікальним і закінчуватися на
bot, наприкладmy_ua_helper_bot. - Збережіть токен. BotFather надішле рядок для доступу до Bot API. Не пересилайте його в чат і не публікуйте на GitHub.
- Додайте опис і команди. Через
/mybotsналаштуйте/start,/helpта коротко поясніть, що бот уміє і як використовує повідомлення.
Telegram дозволяє відкликати токен у BotFather. Якщо секрет потрапив у скриншот, репозиторій або чужі руки, не просто видаляйте його з файлу — одразу створіть новий токен і замініть його в налаштуваннях.
Варіант 1. Telegram-бот без коду через n8n
У n8n робочий процес складається з вузлів. Для мінімального бота потрібні три частини: отримати повідомлення з Telegram, передати текст моделі й відправити відповідь. Назви окремих операцій можуть трохи змінюватися разом з інтерфейсом n8n, але схема залишається однаковою.
- Створіть Telegram credential. У n8n додайте облікові дані Telegram і вставте токен BotFather у захищене поле credentials.
- Додайте Telegram Trigger. Оберіть подію нового повідомлення. Запустіть тестове прослуховування й напишіть боту в приватному чаті.
- Відкиньте непотрібні події. Перевіряйте, що в оновленні є текст. Фото, стікер або натискання кнопки мають іншу структуру і не повинні ламати сценарій.
- Підключіть OpenAI. Створіть OpenAI credential, не вставляючи ключ у звичайне текстове поле вузла. Оберіть операцію генерації текстової відповіді та недорогу актуальну текстову модель.
- Передайте інструкцію. Окремо задайте роль бота, а повідомлення користувача підставте з Telegram Trigger.
- Додайте Telegram Send Message. У поле Chat ID передайте ID вхідного чату, а в Text — результат OpenAI.
- Активуйте workflow. Тестовий запуск працює лише під час перевірки. Для постійної відповіді сценарій має бути збережений і активний.
Для першої версії не додавайте пам’ять розмови, документи, пошук і десять інтеграцій одночасно. Спочатку перевірте простий ланцюжок на двадцяти різних повідомленнях. Потім окремо додавайте історію діалогу, обмеження користувачів, базу знань або команди.
Типові проблеми в n8n
- Trigger мовчить. Один Telegram-бот може мати лише один активний webhook. Перевірте, чи цей самий токен не використовується в іншому workflow або сервісі.
- У тесті працює, після закриття — ні. Workflow не активований або n8n недоступний з інтернету через HTTPS.
- Бот відповідає не в той чат. Chat ID задано вручну замість значення з поточного вхідного повідомлення.
- Вузол OpenAI повертає помилку оплати. API-білінг не налаштований, вичерпано ліміт або вибрана недоступна для проєкту модель.
Варіант 2. Мінімальний бот на JavaScript
Цей приклад використовує офіційний пакет OpenAI, а повідомлення Telegram отримує методом long polling. Для навчання це простіше за webhook: процес постійно запитує нові оновлення. Для великого навантаження та безсерверного хостингу згодом краще перейти на webhook.
Створіть порожню папку та виконайте:
npm init -y
npm install openai
npm pkg set type=module
Збережіть код у файлі bot.mjs:
import OpenAI from "openai";
const telegramToken = process.env.TELEGRAM_BOT_TOKEN;
const openaiKey = process.env.OPENAI_API_KEY;
const model = process.env.OPENAI_MODEL || "gpt-5.6-luna";
if (!telegramToken || !openaiKey) {
throw new Error("Додайте TELEGRAM_BOT_TOKEN і OPENAI_API_KEY");
}
const openai = new OpenAI({ apiKey: openaiKey });
const telegramApi = `https://api.telegram.org/bot${telegramToken}`;
let offset = 0;
async function telegram(method, body = {}) {
const response = await fetch(`${telegramApi}/${method}`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(body),
});
const data = await response.json();
if (!data.ok) throw new Error(`Telegram: ${data.description}`);
return data.result;
}
async function answer(chatId, text) {
const response = await openai.responses.create({
model,
instructions:
"Відповідай українською, коротко і точно. Не проси секрети.",
input: text,
});
const reply = response.output_text || "Не вдалося сформувати відповідь.";
await telegram("sendMessage", { chat_id: chatId, text: reply.slice(0, 4096) });
}
while (true) {
try {
const updates = await telegram("getUpdates", {
offset,
timeout: 30,
allowed_updates: ["message"],
});
for (const update of updates) {
offset = update.update_id + 1;
const message = update.message;
if (!message?.text) continue;
if (message.text === "/start") {
await telegram("sendMessage", {
chat_id: message.chat.id,
text: "Привіт! Напишіть запитання — я відповім українською.",
});
continue;
}
await answer(message.chat.id, message.text);
}
} catch (error) {
console.error(error.message);
await new Promise((resolve) => setTimeout(resolve, 2000));
}
}
Перед запуском задайте секрети як змінні середовища. Не записуйте їх у сам файл. На Linux або macOS для локальної перевірки:
export TELEGRAM_BOT_TOKEN="ваш_токен"
export OPENAI_API_KEY="ваш_ключ"
node bot.mjs
У PowerShell використовуйте $env:TELEGRAM_BOT_TOKEN="..." та $env:OPENAI_API_KEY="...". Для хостингу додайте ті самі назви через панель секретів платформи.
Безпека, приватність і реальна вартість
| Частина | Безкоштовно | Можливі витрати |
|---|---|---|
| Telegram Bot API | Створення бота та базові повідомлення | Ваш сервер, база або сторонні сервіси |
| n8n | Самостійний запуск Community Edition | n8n Cloud або сервер для self-hosting |
| OpenAI API | Не покладайтеся на постійну безкоштовну квоту | Оплата за фактичне використання обраної моделі |
| JavaScript-бот | Розробка й локальний тест | Хостинг 24/7, домен не обов’язковий |
Для текстового бота з великим потоком коротких повідомлень логічно почати з моделі, оптимізованої за вартістю, і встановити невеликий місячний ліміт. Не копіюйте стару ціну зі статті: моделі та тарифи змінюються, тому перед запуском перевіряйте актуальний каталог OpenAI.
- зберігайте ключі тільки у credentials або змінних середовища;
- обмежуйте довжину вхідного повідомлення й кількість запитів від одного користувача;
- не надсилайте в модель медичні, фінансові, дитячі чи інші чутливі дані без чіткої потреби та належних правил;
- поясніть користувачеві, що відповіді генерує AI і вони можуть бути помилковими;
- не дозволяйте тексту користувача змінювати системні правила, запускати довільний код або читати секрети;
- логування повідомлень вимикайте або мінімізуйте; визначте строк зберігання даних;
- налаштуйте ліміт витрат і сповіщення, а при витоку негайно відкликайте обидва ключі.
Детальніший план дій є в нашому матеріалі про безпеку API-ключів у вайб-кодингу.
Як перевірити бота перед публічним запуском
- Почніть із приватного тесту. Не додавайте бота в групи, доки базова логіка нестабільна.
- Перевірте команди.
/start, звичайний текст, порожнє повідомлення, дуже довгий текст, українська й англійська мови. - Надішліть не текст. Фото, голосове, файл і стікер не повинні ламати сценарій. Бот може ввічливо повідомити, що поки працює лише з текстом.
- Перевірте паралельних людей. Відповідь і пам’ять одного користувача не повинні потрапляти іншому.
- Зімітуйте помилку API. Людина має отримати коротке повідомлення, а не технічний стек або секрет.
- Перезапустіть сервер. Переконайтеся, що бот автоматично відновлюється і не відповідає двічі на старі повідомлення.
- Перегляньте витрати. Після серії тестів звірте використання в OpenAI Platform і встановіть прийнятний бюджет.
Часті запитання
Чи можна зробити бота без програмування?
Так. n8n дозволяє зібрати першу версію з готових вузлів. Але «без коду» не означає «без логіки»: усе одно треба правильно передати Chat ID, текст, credentials і передбачити помилки.
Чи працюватиме бот, коли комп’ютер вимкнений?
Лише якщо n8n або код запущений на зовнішньому сервері. Локальний процес на ноутбуці припинить відповідати після вимкнення, сну або втрати інтернету.
Чи потрібен власний домен?
Для long polling — ні. Для webhook потрібна доступна Telegram HTTPS-адреса; n8n Cloud надає її, а для власного n8n знадобиться коректно налаштована публічна адреса.
Як зробити пам’ять розмови?
Зберігайте історію окремо для кожного chat_id у базі або спеціальному сховищі пам’яті. Не використовуйте одну спільну історію для всіх і не передавайте моделі безмежний журнал повідомлень.
Офіційні першоджерела
Застряг із ботом або хочеш показати результат?
Принось схему чи код у «Вайб-Кодинг». Допоможемо сформулювати проблему й розібрати проєкт без публікації секретів.
Приєднатися до Telegram-чату ↗