Кейсы
July 5, 2023
Кейс "Бот ЕГЭ-знакомств в Telegram" для онлайн-школы Вебиум
Летом 2022 года ко мне обратились из онлайн-школы Вебиум, чтобы сделать бота для ЕГЭ-знакомств.
На текущее лето (2023 год) мы сотрудничаем уже почти год.
Задачи, которые были первоначально поставлены передо мной:
- Реализовать бота за месяц;
- Осуществить в боте анкету для новых пользователей, при этом анкета должна быть:
- с возможностью последующего редактирования пользователем;
- с возможностью выбора нескольких предметов ЕГЭ, которые пользователь сдавал/будет сдавать.
- Сделать запись пользователей в гугл-таблицу после заполнения ими анкеты;
- Сделать выдачу анкет других пользователей, при этом:
- основной пользователь должен иметь возможность лайкнуть/пролистнуть анкету другого пользователя;
- Уведомления о лайке должны приходить пользователю сразу, без необходимости мэтча;
- Анкеты, которые пользователь уже лайкнул/пролистнул не должны приходить ему повторно.
- Сделать меню с кнопками, в котором пользователь сможет:
Необходимо иметь возможность отслеживать следующую информацию:
- Пути попадания новых пользователей в бота;
- Общее количество людей в боте ежедневно;
- Сколько пользователей побывало на каждом шаге;
- Количество перезапусков бота конкретным пользователем;
- Сколько дней подряд конкретный пользователь заходил в бота;
- Сколько пользователей выбрали в своей анкете каждый из предметов ЕГЭ.
Первоначальная реализация
- Бот был собран с помощью сервиса Salebot.
- Анкета заполнялась в самом Telegram, с удалением или редактированием предыдущих сообщений и процессом многократного выбора нескольких предметов по кнопкам в тексте.
- Редактирование анкеты было также с возможностью выбора различных предметов по inline клавиатуре.
- Данные отправляются в гугл-таблицу.
- Аналитика собирается с использованием переменных, заказчик имеет возможность делать по ним фильтрацию и получать срезы данных.
Что было сделано, но затем заменили до официального релиза:
- Изначально была сделана простая логика, когда анкеты пользователей выдавались последовательно. Это привело к тому, что анкеты первых зарегистрированных людей видело больше пользователей, чем анкеты тех, кто был зарегистрирован позднее.
Чтобы решить эту проблему, я сделал рандомный порядок выдачи анкет. - Сначала сделал логику полностью на salebot, но чтобы в будущем была возможность работы с фильтрами, рандомом и уникальностью пользователей, вывел часть логики на питон-скрипт, который запускается внутри salebot.
С чем столкнулись после релиза:
- При заполнении анкет внутри бота было много ошибок при выборе нескольких предметов (косяк со стороны salebot, на тот момент у них была проблема, что некоторые переменные случайным образом не сохранялись при высокой нагрузке со стороны одного пользователя).
Решением этой задачи было создание отдельной формы анкеты. О ней подробно я расскажу в следующем кейсе. - Неоптимизированное количество запросов, которые съедали лимиты salebot.
Для того, чтобы отслеживать ежедневную активность, была выведена отдельная функция и блок, которые вызывались через message(). Однако не было дополнительных проверок на сутки в сообщении до, и потому вызов был каждый раз, при вхождении в блок.
Сначала количество запросов было в среднем 8 на человека, после чего было сокращено до 6 на человека. Теперь, с учётом еще некоторой оптимизации и хитростей с НЕвызовом функций, сократил до ~4х запросов на 1 сообщение пользователя. - Не всегда отображалось, что какой-либо пользователь заблокировал бота.
Это можно было определить, только если отправить им сообщение по api в личку и получить ошибку.
Так и было сделано: теперь, после того как пользователя лайкают, идет дополнительная проверка. - Ошибка работы с полями ввода пользователей.
Сначала думал работать с markdown разметкой, чтобы выделять пункты жирным и др., но я решил, что это будет слишком затратно по времени, поэтому сделал работу через html разметку.
Однако вскоре столкнулся с тем, что нельзя использовать одну функцию для экранирования скобки, чтоб она не ломала логику сообщения и не вылезала ошибка.
В результате все-таки перешел на markdown разметку, но пришлось писать дополнительные проверки.
Результаты:
- Сделал бота ЕГЭ-знакомств, по согласованному ТЗ;
- Продумал и внедрил сбор аналитики;
- Настроил питон-скрипт для получения списка пользователей и выбор случайного, предварительно отсеяв тех, которых пользователь уже посмотрел.
Бот ещё дорабатывается и будет дополняться новым функционалом.
Например, скоро внедряем фильтрацию анкет по предметам у пользователей.
Также в кейсе не раскрыт весь ныне рабочий функционал (например случайный показ преподавателей-репетиторов раз в сутки, предлагающих пройти у них обучение)
Сам бот -> @webaddy_bot
Чтобы заказать разработку бота, пишите -> @mihail_plavko