Як я створив сервіс, який аналізує коментарі в Telegram — та до чого тут Міністр цифрової трансформації

Усім привіт, мене звати Тарас, я — підліток, який хоче пов’язати своє життя з програмуванням. Я написав цю статтю та взагалі завів блог, щоб поділитися своїм досвідом у розробці, знайти однодумців.

Намагався передати інформацію не стисло та одночасно в цікавому, унікальному й не нудному форматі. Це моя перша стаття, тож буду радий вашим думкам щодо такого контенту.

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

Внаслідок цього людина заощадить свій час та не буде виконувати дії, які можна автоматизувати.

Взагалі я прагну розробити проєкт, який фінансуватиметься з власної діяльності для його обслуговування. Всі процеси повинні бути максимально автоматизовані, а взаємодія між користувачем та сайтом має бути простою та зрозумілою.

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

На реалізацію мого задуму мене підштовхнув пост (тик й клац) Міністра цифрової трансформації Михайла Федорова, тож дякую за натхнення. Взагалі мені подобається такий цікавий підхід зі сторони влади: й людям добре (можуть показати себе, знайти роботу) й самому Федорову (не треба витрачати час на аналіз коментарів, платити комусь за це, можна знайти хороших працівників та ще й похвалитися цим у ЗМІ :D).

Як це буде працювати

Написавши у вступі, що проєкт потрібен для аналізу тексту, я трохи узагальнив функціонал, який буде реалізовано прямо зараз. Спочатку сервіс буде аналізувати тільки коментарі до постів у Telegram-каналах, а вже потім, поступово, будуть покращуватися наявні фішки й додаватися нові.

На мій погляд, сайт повинен працювати наступним чином. Користувач заходить на сторінку замовлення та обирає, що саме він хоче проаналізувати. Далі він заповнює всі необхідні поля. У кінці замовник вказує свою поштову скриньку та сплачує замовлення. Після успішного аналізу він отримає результат в окремому листі.

При цьому повідомлення повинні відсилатися: як тільки користувач оформив замовлення та вибрав спосіб сплати; після отримання оплати; після успішного аналізу з прикріпленим результатом.

Сайт буде прозорим: щоб людина знала, що саме зараз з її замовленням, можна дивитися його статус на окремій сторінці.

Перед початком роботи створив інтерактивну мапу. Вона потрібна для кращого розуміння задачі та зручності подальшої реалізації. У своєму випадку я поділив її на дизайн і функціонал (там описуються основні елементи) та вужчі штуки на кшталт системи аналізу коментарів Telegram (тут вже більше інформації, як і що повинно працювати). Нижче ви можете побачити її скрін:

В процесі створення сайту я трохи відійшов від мапи, додав більше функціоналу

Назва проєкту та логотип

Тепер вигадаємо назву для нашого проєкту. Це одна з найскладніших задач в усіх роботах. Як правило, я витрачаю на це доволі багато часу.

Хотів зробити такий мем з котом моно, але не знайшов відповідних картинок 🥲

Зазвичай я вигадую назву завдяки перекладанню різних слів, пов’язаних з темою проєкту на інші мови. Цей випадок не є виключенням. Vislesane перекладається з каннади як «аналіз», а наша розробка, як ви пам’ятаєте, як раз і буде працювати з великим обсягом даних. На мій погляд, доволі лучна назва, тим більше домен vislesane.com.ua доступний.

Це слово є доволі незвичайним для України, тому вважаю, що його доволі просто запам’ятати та ця назва буде асоціюватися саме з цим проєктом, а не з будь-якою іншою компанією. До речі, була ще думка назвати сервіс analytic-gpt, але я вважаю, що це доволі примітивно, тому майже одразу відмовився від цього.

Створив favicon та logo в ілюстраторі, вийшло щось на кшталт робота на логотипі Android, але я взагалі не надихався їм.

День бджіл та front-end сайту

Я писав це 20 травня, у Всесвітній день бджіл. Не знаю навіщо вам ця інформація, але тепер ви знаєте, що це свято відзначають з 2018 року завдяки Генеральній Асамблеї ООН. Саме в цей день я вирішив не створювати дизайн сайту з нуля, оскільки це зайняло б доволі багато часу, а використовувати вже готовий шаблон.

З декількох десятків переглянутих мною безкоштовних тем узяв Appland з цього сайту. Мені сподобався простий дизайн та хороша оптимізація для різних пристроїв. Єдине, чого тут не вистачає — це темна тема, яку я вже розробив. Вона вмикається в залежності від теми браузера.

Також я видалив зайві елементи і трохи змінив дизайн тих, що залишилися. Наявні картинки замінювати не став, тому що вони цілком підходять для сайту. У футері є посилання на їхній портал, але я його не став прибирати, оскільки поважаю авторське право, а щоб цей URL офіційно видалити потрібно заплатити сайту кошти 😊

Розробка back-end частини

Ви витратили хвилину, щоб прочитати попередній абзац (може, більше чи менше, не знаю вашу швидкість читання 🙃), а для мене вже настало 21 травня.

У Telegram коментарі працюють так: для каналу створюється окрема група (чат) та прикріпляється до нього в налаштуваннях. Тепер фоловери можуть писати свої думки до різних постів, всі вони будуть зберігатися у новоствореній групі. На жаль, у Telegram немає API для парсингу коментарів (чи я його просто не знайшов), але можна піти іншим шляхом.

У цього месенджера можна зберегти коментарі в окремий JSON файл. В ньому міститься різна інформація:

  • назва, тип та унікальний ID групи;
  • пости, які публікує автор на каналі;
  • прості повідомлення у чаті;
  • коментарі (до різних постів).

Як бачите, є багато сміття. Ми повинні дістати тільки коментарі до конкретного посту. У кожної публікації є унікальний лінк, який можна отримати, клікнувши на пост пкм, та натиснувши на кнопку «Копіювати посилання на повідомлення» (це потрібно зробити з постом у коментарях).

Такий url має наступний формат — https://t.me/c/[id групи з коментарями]/[унікальний код поста]. Саме цей унікальний код міститься у коментарі в reply_to_message_id. Таким чином можна відфільтрувати усі коментарі та залишити тільки потрібні нам.

Як я це реалізував на сайті для користувача? Спочатку людина вказує посилання на пост з коментарів та пост з каналу і натискає кнопку «Далі». Лінки відправляються на сервер, де проходять різні перевірки.

У самому кінці, якщо попередні перевірки пройшли успішно, ми парсимо назву каналу і текст посту з t.me (тут нам вже знадобиться посилання на звичайний пост з каналу, не з чату).

Головне, щоб Telegram за це не заблокував IP сервера. Звичайно можна було б й обійтися без посилання на пост з каналу, але так не цікаво 🐳.

На календарі вже 24 травня і сьогодні я зробив завантаження JSON-файлу на сервер та фільтр коментарів. Після успішного завантаження файлу на сервер та натискання кнопки «Далі» коментарі почнуть фільтруватися.

На жаль, будуть доступні тільки ті коментарі, які не містять у собі посилання, зображення та схожі штуки. Також не будуть відфільтровані коментарі, які являються відповідями на інший коментар.

Це трохи зменшить загальну кількість коментарів, які будуть аналізуватися, а отже й точність, але ці зміни, на мою думку, будуть не дуже значними. Можна й розробити функціонал, який дозволить читати усі коментарі, але для цього потрібен час, можливо, зроблю це пізніше.

Так от, після успішного фільтрування відкривається сторінка, де виведено загальну кількість доступних коментарів та символів, суму до сплати.

25 травня настав час розробляти фінальний крок замовлення для користувача сайту: написати свій email, вибрати спосіб оплати, натиснути кнопку «Далі», сплатити замовлення та очікувати результатів, які будуть автоматично відправлені на поштову скриньку. Саме тут вже вся передана інформація зберігається в базу даних (до цього все крім JSON-файлу зберігалося в куках користувача).

Щодо оплати, тут виникла доволі цікава дилема. Щоб приймати до сплати банківські картки потрібно бути зареєстрованим як ФОП (чи мати компанію). Я не хочу возитися з цим, але й приймати платежі теж треба, при цьому не порушуючи закон. Тож я почав шукати еквайринг, який працює з фізичними особами.

Я знайшов український сайт для збору донатів з API (зазвичай його використовують блогери на стримах в YouTube чи Twitch). Я знаю, як завдяки цьому можна реалізувати приймання платежів та перед цим проконсультувався з адміном сайту, мені дали «зелене світло». Система буде розуміти, що платіж пройшов саме до цього замовлення завдяки коментарю до нього і сумі.

26 травня, за п’ять днів до початку літа, почав робити те, фактично для чого користувачі й використовують сайт: автоматичний аналіз коментарів. Працює він завдяки крону. Кожну хвилину система автоматично перевіряє наявність замовлень та у випадку, якщо вони знайдені, алгоритми перевіряють на коректність усі дані з БД, наявність JSON-файлу.

Якщо не знайдені проблеми: система дістає коментарі, формує запит та надсилає його до серверів OpenAI. Після отримання відповіді система відсилає результати аналізу на пошту користувача та змінює статус замовлення.

Якщо система знайшла проблему чи OpenAI заглючив, замовлення переноситься на окрему вкладку в адмінці, де модератор повинен вирішити, що з ним не так та що робити.

Єдина проблема була у тому, що OpenAI накладає суворі обмеження на кількість символів, які може передавати система. Щоб якось обійти це я був змушений формувати не один запит з великою кількістю тексту, а декілька менших.

Тут вже можна констатувати, що більша частина проєкту готова, залишилися останні кроки.

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

Щоб увійти в адмінку, потрібно знати директорію (вказується в конфігу, через архітектуру сайту саму назву теки в файлах проєкту перейменовувати не потрібно), юзернейм та його пароль.

Я зазвичай не люблю для себе розробляти особливо функціональну адміністративну панель, оскільки роблю все вручну через БД чи файли на сервері та не хочу багато часу втрачати на її розробку, але тут вже все персонально. Якщо у майбутньому будуть потрібні окремі модератори, адмінку потрібно буде повністю перероблювати з нуля.

Бачите волосся? Це я його намалював 😎

Також крім адмінки я зробив контактну форму, це було доволі просто і я не витратив на це забагато часу.

Як сайт став менш суворим :)

Сайт здавався мені занадто суворим і я вирішив додати кілька нових розділів. Вони містять в собі дорожню мапу проєкту, де описані майбутні функціональні можливості.

Також я додав розділ подяк, де компанії, функціонал яких було використано на сайті, отримали свої заслужені слова вдячності; нижче було створено перелік донатів. На мою думку, ці маленькі зміни допомогли сайту стати людянішим.

Помилки в текстах

30 травня почав перевірку текстів сайту на помилки. Знайшов декілька очепяток, лексичних помилок, які успішно виправив. Витратив на це приблизно годину, доволі виснажливо. Деякий текст на головній сторінці повністю змінив.

Рекомендую вам заповнювати інформацію про продукт на сторінках для користувача вже після того, як він буде працювати, щоб потім не витрачати марно час. Замість цього можете просто зробити примітки, що в якому блоці буде написано.

Сайт побачив інтернет

Я начебто все, що хотів зробити на локальному сервері вже зробив, тож настав час публікації проєкту в мережі інтернет. Я вважаю, що звичайного пакету хостингу буде достатньо, та що VPS/VDS сервер можна не орендувати.

Через деякий час пошуку я знайшов варіант, що підходить мені. СХОСТ — дешевий та при цьому стабільний український хостинг-провайдер. Для моїх потреб буде достатньо найдешевшого тарифу Small.

Крім цього я можу порекомендувати інші українські хостинги — Ukraine, HOSTiQ, Ukrnames, HyperHost, які є теж доволі гарними варіантами. Якщо із цього вам нічого не підходить, можна просто нагуглить саме того провайдера, який вам найбільше подобається.

Настав перший день літа! Сьогодні у мене був досить гарний настрій та я зробив відносно багато всього на са йті. Завершив вивантаження на сервер та його налаштування. Це зайняло деякий час, але тепер усе працює.

Спочатку я встановив українську панель BranyCP, але через деякі її особливості мені довелося видалити її та встановити CPanel, на якій вже не було проблем. Дякую підтримці хостингу за допомогу та консультацію. Після публікації сайту в інтернеті я почав тестувати його та знайшов деякі баги та проблеми, яких не бачив на локальному сервері: некоректна робота пошти, аналізу на боці штучного інтелекту, оплати.

Мені довелося майже повністю переписати код, пов’язаний з цим, але це того вартувало: все працює, як треба. Також я вирішив підключити Google Аналітику, щоб стежити за діями користувачів на сайті та в майбутньому покращувати його, хоча це й знижує конфіденційність для користувачів.

До речі, в Google PageSpeed Insights сайт отримав доволі файні результати, отже я не дарма займався оптимізацією. Зареєстрував сайт в Google Search Console, що допоможе швидше проіндексувати сайт.

Update

Дякую автору Telegram-каналу КІБЕРБЕЗ за виявлення багу та повідомлення про нього. Виявляється, посилання на пост з чату можуть мати різні формати: https://t.me/c/цифри/цифри та https://t.me/цифри_букви/цифри — це ніяк не впливає на JSON-файл, але перевірка на коректність посилання не проходить та виникає помилка. Я виправив це.

Тепер потрібно вказати саме ID посту (в шаблоні посилання вказано жирним шрифтом). Таким чином тип посилання посту в коментарях не впливає на роботу сервісу.

fin.

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

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

Якщо вам цікава моя діяльність, рекомендую підписатися на мій Telegram-канал. Там буде багато цікавинок, не тільки на IT-тематику. Поки що все.

Пишіть коментарі, з радістю поспілкуюся та відповім та питання. Продублюю посилання на сайт. До нових зустрічей.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось11
До обраногоВ обраному2
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
На жаль, у Telegram немає API для парсингу коментарів (чи я його просто не знайшов), але можна піти іншим шляхом.

Client API вміє.

Так, дійсно, дякую. Наразі не бачу сенсу переписувати код через непопулярність сервісу, але у майбутньому можна буде використовувати Client API.

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

Непопулярне, напевно, через те, що мало кому потрібно аналізувати коментарі Telegram + як ви і написали, незручно + маленька реклама.
Зараз я працюю над проєктом по перекладу відео YouTube з англійської на українську мову (про це теж буде стаття). Після нього хочу покращити Vislesane: змінити дизайн, спростити всі кроки замовлення, зробити особистий кабінет, API, додати більше сервісів (файли, коментарі YouTube, Facebook, Twiter, можливо якісь пости та навіть відео). Напевно, все ж таки, потрібно переробити аналіз коментарів Telegram: коли зроблю, обов’язково позначу, що ви надали ідею :)

Є просто та зрозуміле Bot API. Воно не підходить до поставленої в статті задачі, а он брати коментарі через нього з наперед визначеного канала — дуже зручно і просто. І вже давно написана купа ботів які якось з цим працюють, наприклад модерують коментарі.

Так. Для цього потрібно назначити бота адміном каналу чи чата з коментарями (не пам’ятаю точно). Але це незручно + це може зробити тільки володар каналу.

Молодець! Дійсно крутий пет-проект!

Дякую.

Питання: ось мені треба танцювати з бубеном, щоб згодувати через твій інтерфейс(сайт) історію коментарів. Тобто я можу зробити це сам, просто скопіювавши всі коментарі і вставивши їх безпосередньо в інтерфейсі OpenAi, правда ж? Де профіт? Я чогось не збагнув?

Танцювати з бубном не потрібно). Так, звичайно, ви можете просто скормити коментарі напряму в ChatGPT. Але він не може відразу проаналізувати усі коментарі, якщо їх багато (потрібно декілька разів скидати їх), на відмінну від Vislesane. Але й скопіювати коментарі, придумати промт звичайному користувачу не так просто. Профіт у звичайному заощадженому часу: над ChatGPT потрібно сидіти та чекати, поки він надрукує відповідь, а над Vislesane — ні, просто передайте дані та чекайте емейла з результатами.

А якщо доббратися до потрібного feed через браузер(web.telegram.org) і парсити це все діло з JS або JSом надсилати на якийсь мікросервіс? А мікросервіс можна написати на чому хочеш. Про таке не думав?

Якщо я правильно зрозумів вас, це занадто складно і не гарантує парсингу. Канал, у якому юзер хоче проаналізувати коментарі до посту, може бути закритий і для вступу потрібне схвалення адміністратора, що просто не дасть спарсити коментарі. Також якимось чином потрібно весь час входити в акаунт у web.telegram.org, що вже виходить за рамки звичайного парсингу. До того ж цей спосіб вимагатиме більше ресурсів. Коротше — він тільки додає проблем.

А якщо застусувати якусь tool, типу www.selenium.dev яка буде сама шукати в каналі, симулюючі дії користувача?

Це цікаво, але для цього вже потрібен VDS/VPS сервер, який коштує більше за хостинг (наразі Vislesane хоститься саме на звичайному тарифі хостингу) та можуть бути проблеми з приватними каналами, про що я вже писав до цього.

А якщо це все задеплоїти на Azure, автоматизувати деплой через коміт в GitHub?

Проєкт не настільки великий для використання таких технологій.

Я почав програмувати в 29 а не в 16

Я почав програмувати та цікавитись цією темою ще набагато раніше 16 років)

І як Data Engineer, скажу, що парсинг коментарів ніяким чином не є аналізом

Коментарі передаються до OpenAI де й аналізуються. В кінці користувач вже отримує невеликий висновок. Але, все ж таки, ви праві — аналіз проходить завдяки сторонній компанії, тому, сам проєкт безпосередньо займається більше парсингом та фільтрацією.

Це я розширяю твої горизонти ) Не сприймай як критику.

Обожнюю таку конструктивну критику, ідеї та поради)

Що взяв для себе: нащо вчити react, якщо є php+ wordpress?! Для своїх проектів — вистачить з головю. Якщо твій фокус — бекенд.

Моя ціль — це не навчитися якійсь одній технології та використовувати її все життя, а навпаки, весь час практикуватися та шукати щось нове. Я полюбляю створювати більшу частину коду з нуля. Майже не використовував Wordpress та інші CMS. Я пишу на різних мовах, не тільки на пхп. Щодо фокусу. Я більше націлен на фулстек.

>=10204 символів
Безкоштовно

<10204 символів
1.47 грн за 1000 символів

Точно все вірно?

Дякую, замінив на більш зрозумілий текст

Як для такого віку розробка дуже крута. У мене теж були подібні пет-сайти в 16. Тоді думав стати серйозним Джава розробником, а зрештою перейшов на мобайл, про що не жалкую.

Дякую.
Мобайл — доволі гарна сфера діяльності. Мені здається, що джава починає якось губити свою популярність.

Як на мене навпаки, мобільна розробка втрачає популярність

Цікавий проект, ви молодець, у мене виникли лише дві думки:

1) На вашому лендінгу треба показувати приклади результатів аналізу коментарів десь на самому помітному місці. Як юзер, я хочу побачити результати роботи і дізнатися, що саме потрібно зробити, щоб отримати результат, нічого не знаючи про ваш проект. Зараз є відео, яке потрібно знайти десь на лендосі і витратити дві хвилини життя, що можливо мені не потрібно взагалі. Було б краще, якби були степи з картинками.

2) Результат аналізу не дуже чіткий на відео. Додайте якісь правила, щоб ChatGPT не повторював свої висновки, оскільки там купа тексту, але він дуже схожий або навіть повторюється. Це викликає питання: «Навіщо мені платити за це?», відразу виникає відчуття, що потенційно там купа багів і я витрачу гроші в пусту.

Дякую, лучні думки.

Щодо результату аналізу. У OpenAI занадто маленький ліміт токенів. Через це приходиться передавати коментарі за декілька запитів. Інколи вони можуть бути схожі за контекстом один на одного, із-за чого можуть бути такі повтори. Нещодавно OpenAI збільшила кількість токенів, яку можна передавати системі, тож цю ситуацію вже можна покращити, але інколи повтори все одно можуть зустрічатися. Я гадаю, що якщо збільшення ліміту не допоможе, можна додатково відправляти всю відповідь OpenAI та просити убрати повтори.

Поекспериментую сьогодні з аналізом та коли доб’юся доброго результату додам карусель скріншотів з результатами десь на головну сторінку.

дуже не вірю, що ви підліток. та і реклами занадто вже.

ну надо же подросткам зарабатывать, поэтому и реклама есть

Мені 16 років.
Де саме ви побачили рекламу?

Очевидно, тобі openAI і Андроїд занесли, щоб ти їх логотипи вставив!!!

Ось куди пішли 10 мільярдів інвестицій від Microsoft!

Молодець!
Бажаю успіхів та класних ідей для реалізації всіх запланованих цілей!

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