Розробка Telegram-бота у 2025: мій досвід з aiogram 3, GPT та двома хостинг-провайдерами

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Вступ

Привіт! Я хочу поділитися історією свого проєкту — багатофункціонального медичного помічника в Telegram. Ідея народилася з простої потреби: мати під рукою зручний інструмент для відстеження самопочуття, який не вимагає встановлення ще одного мобільного додатку.

У цій статті я розповім про шлях від ідеї до повноцінного сервісу, що працює 24/7. Поговоримо про вибір стеку, архітектуру, інтеграцію з AI, а найцікавіше — про всі ті граблі та помилки, на які я наступив під час розгортання на хмарних платформах.

Мій стек: Python 3, aiogram 3, SQLite, OpenAI API (GPT-4o-mini), schedule, fpdf2, matplotlib, Git, Render.

Розділ 1: Від ідеї до першого прототипу

Все почалося з простого скрипту, який міг лише одне — записувати текст у базу даних. Перша версія була вкрай примітивною, але дозволяла фіксувати симптоми. Стало очевидно, що проєкт потребує «мозку», а також більш складної логіки для взаємодії з користувачем.

Розділ 2: Інтеграція AI — наймаємо «мозкового» співробітника

Я вирішив, що «мозковим центром» для аналізу симптомів має стати велика мовна модель (LLM). Я використовував API від OpenRouter, щоб мати доступ до GPT-4o-mini.

Тут я зіткнувся з першим серйозним викликом — промпт-інжинірингом. Просто сказати AI «проаналізуй симптоми» — це шлях до неточних і навіть небезпечних порад. Головною задачею було навчити модель бути корисним асистентом, а не самопроголошеним лікарем.

Наприклад, початковий промпт призводив до того, що AI міг рекомендувати конкретні ліки. Це неприпустимо. Шляхом ітерацій я прийшов до більш жорсткої інструкції:

...додай окремий розділ під назвою ’Можливі напрямки лікування, які варто обговорити з лікарем:’. У цьому розділі перелічи ТІЛЬКИ загальні класи препаратів... КАТЕГОРИЧНО ЗАБОРОНЕНО називати конкретні торгові марки...

Також я активно використовував AI як свого «асистента-програміста». Замість того, щоб годинами шукати рішення на Stack Overflow, я ставив конкретні задачі: «Напиши функцію на Python для генерації PDF за допомогою fpdf2» або «Як правильно реалізувати FSM-ланцюжок для цього сценарію в aiogram 3?». Це значно прискорило розробку.

Розділ 3: Архітектура та «граблі»

Щоб реалізувати весь функціонал, знадобилося кілька ключових архітектурних рішень.

Машина станів (FSM): Для покрокових сценаріїв, як-от «Щоденний Check-in» чи інтерактивне опитування симптомів, FSM з aiogram стала незамінною. Вона дозволила вести користувача по ланцюжку питань, збираючи дані на кожному етапі.

База даних: Початкова єдина таблиця швидко перетворилася на безлад. Я перейшов до більш структурованої схеми з окремими таблицями для користувачів (users), щоденних записів (health_entries), ліків (medications) та іншого. Це значно спростило запити та аналітику.

Планувальник: Для нагадувань про ліки та щотижневих звітів я використав просту, але надійну бібліотеку schedule, яка запускається в окремому асинхронному потоці.

Розділ 4: Біль розгортання: Від локального ПК до хмар

Це був найважчий і найнервовіший етап. Я вирішив розгорнути бота на Render. Підготував requirements.txt, Procfile, виніс токени у змінні середовища і завантажив все на GitHub. Здавалося, що може піти не так?

А потім почалося. Спочатку я зіткнувся з помилкою TelegramConflictError. Логи показували, що запущено дві копії бота. Я був впевнений, що на локальному ПК все вимкнув, але помилка не зникала. Це змусило мене пройти через кілька кіл відчаю: перезапуски, очищення кешу, і, нарешті, повне анулювання токену в @BotFather та оновлення його на сервері.

Щойно я переміг цю проблему, з’явилася нова: TelegramUnauthorizedError. Знову і знову. Я був впевнений, що копіюю правильний токен! Щоб знайти істину, я додав у код діагностичний print, який показував, який саме токен використовується. Виявилося, що змінні середовища чомусь не оновлювалися миттєво.

Я навіть спробував переїхати на інший сервіс, Railway, але зіткнувся там з обмеженнями безкоштовного тарифу. Врешті-решт, я повернувся на Render, перейшов на мінімальний платний тариф ($7/міс) і, пройшовши процедуру «тотального очищення» (зупинка сервісу -> відкликання токену -> оновлення токену -> чисте розгортання), нарешті досяг стабільної роботи.

Головний висновок цього етапу: Деплоймент — це 90% наполегливості і 10% коду.

Розділ 5: Що вийшло в результаті

Після всіх цих пригод у мене є стабільно працюючий сервіс з таким функціоналом:

  • Щоденний Check-in: Відстеження настрою, сну, стресу, активності та споживання води з персональними порадами в кінці.
  • Інтерактивний аналіз симптомів з AI: Покрокове опитування для точного аналізу.
  • PDF-звіти для лікаря: Зручні звіти, які можна показати на прийомі.
  • Гейміфікація: Стріки та досягнення для підвищення мотивації.
  • Екстрена картка (/sos): Швидкий доступ до життєво важливої інформації.
  • І багато іншого.

Спробувати бота можна тут: [@med_pomichnyk_bot]

Висновки та плани на майбутнє

Цей проєкт став для мене неймовірним пекельним (навчальним) досвідом. Я зрозумів, наскільки важливий правильний деплоймент, і навчився ефективно використовувати AI не як заміну, а як потужного асистента в розробці.

Зараз мій головний пріоритет — зібрати відгуки від перших користувачів. Саме вони покажуть, які функції є найціннішими і куди варто розвивати проєкт далі. Можливо, це буде інтеграція з Google Fit, а можливо, щось зовсім інше.

Дякую, що дочитали! Буду радий відповісти на ваші питання та почути будь-які відгуки в коментарях.

p.s. не судіть сильно цей проєкт, так як я новачок в цьому...і хотів довести сам собі що можу щось зробити в зовсім незнайомій для мене галузі і середовищі😊

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Всім привіт. Будь ласка, підкажіть. Хочу запустити простенького бота на телеграм для обробки файлів Excel. Порадьте недорогий хостинг, де можна розмістити для стабільної роботи бота. Наперед вдячний.

Є старий андроід? На нього можна накатити Android Linux і розгорнути Debian.
Докер звісно не крутане, але в скріні нормально буде крутити будь-який телеграм бот.

Що таке android linux — то одна з прог контейнеризацією/віртуалізацією?

Я помилилась і там Linux Deploy мав бути.
Так це контейнерізація chroot
Найкраще стає на lineage OS

Якщо модель дозволяє, то PostmarketOS теж норм, але треба рівніші руки і успішні зірки в той день ^^

Lineage по ідеї android (foss), в postmarket (найширша підтримка по залізу була, але далеко не для всіх залізок) то на базі alpine. В android по ідеї лінукс термінал-контейнери були зі схожим на лінукс середовище (в свіжому навіть включили прямо з дистро таку опцію, якщо не помиляюся). Тобто якщо малась на увазі контейнеризація, тоді більш-менш зрозуміло.

Занадто складно у порівнянні з термінал середовищами, і поверху глянувши — немає інфо що з заліза підтримується якщо то не контейнеризоване середовище. Це так imho.

Складно? встановити .apk?
Які термінал середовища? Просто щось типу термукса?
Не підійде, тільки через рут.
Щодо заліза, не було проблем ні з яким залізом.
Єдина проблема це побороти wake lock.
Не скрізь однаково він себе поводить.

Лівий apk ще і ру-т (гіт по давності комітів схоже вже і забутий). А відносно термукс — там дебіан середовище було (з apt) і навіть деякий gui софт працював, і без рута наскільки пам’ятаю, хоча давно вже не дивився в ту сторону. У новому андроїді вже свій лінукс-термінал якщо не помиляюся з приблизно такогож типу контейнеризацією/віртуалізацією по обзорам. Якщо повністю хост-система цікавила, то вже нп postmarketos тоді був. В цілому то напевно простіше під андроїд софт потрібний написати, хоча якщо з’явиться (малоймовірно покищо) звичайний linux який більшість мобайл-заліза підтримувати буде — булоб зручно хто саме до лінукса звик.

Попрошу перечитувати те що ви пишите. Бо це просто циганський потік незв’язних слів.
БЕЗ РУТА не вийде нічого, навіть починати не варто.
Всі ті термукси то все для дітей забавки без рута.
Новий сучасний смартфон під таке може використати тільки хворий. Бо простіше вже взяти старий пк і на ньому то все задеплоїти.

В цілому то напевно простіше під андроїд софт потрібний написати, хоча якщо з’явиться (малоймовірно покищо) звичайний linux який більшість мобайл-заліза підтримувати буде — булоб зручно хто саме до лінукса звик.

ЩО ТИ ТАКЕ НЕСЕШ?

Всі ті термукси то все для дітей

опцій не багато з контейнеризацією, якщо повну хост ос то опцію з postmarketos вже згадував

В цілому то напевно простіше під андроїд софт потрібний написати

ЩО ТИ ТАКЕ НЕСЕШ?

ага, занадто маленькі букви

Це відносно власного софта, так і робив після танців з бубном з лінукс сетапом на мобайл девайс чи гадаючи потім що з заліза не підтримується. Якби була можливість у більшості випадків отримати звичайний лінукс на тих девайсах — відповідно під лінукс і булоб як зазвичай.
А з вашою опцією «ANDROID LINUX» вже більш-менш прояснилось що то малося на увазі.

не судіть сильно цей проєкт

Гарний проєкт для портфоліо! До речі, де посилання на GitHub? :)

Декілька місяців тому я написав покрокову інструкцію зі зразками коду — «Як створити Telegram-чатбота з ChatGPT на Python».

Підписатись на коментарі