Як я створив сервіс, який аналізує коментарі в 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-тематику. Поки що все.
Пишіть коментарі, з радістю поспілкуюся та відповім та питання. Продублюю посилання на сайт. До нових зустрічей.
24 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів