Кейсы
July 5, 2023

Кейс "Бот ЕГЭ-знакомств в Telegram" для онлайн-школы Вебиум

Летом 2022 года ко мне обратились из онлайн-школы Вебиум, чтобы сделать бота для ЕГЭ-знакомств.
На текущее лето (2023 год) мы сотрудничаем уже почти год.

Задачи, которые были первоначально поставлены передо мной:

Тех. часть:

  1. Реализовать бота за месяц;
  2. Осуществить в боте анкету для новых пользователей, при этом анкета должна быть:
    1. с возможностью последующего редактирования пользователем;
    2. с возможностью выбора нескольких предметов ЕГЭ, которые пользователь сдавал/будет сдавать.
  3. Сделать запись пользователей в гугл-таблицу после заполнения ими анкеты;
  4. Сделать выдачу анкет других пользователей, при этом:
    1. основной пользователь должен иметь возможность лайкнуть/пролистнуть анкету другого пользователя;
    2. Уведомления о лайке должны приходить пользователю сразу, без необходимости мэтча;
    3. Анкеты, которые пользователь уже лайкнул/пролистнул не должны приходить ему повторно.
  5. Сделать меню с кнопками, в котором пользователь сможет:
    1. Изменить анкету;
    2. Скрыть анкету;
    3. Продолжить поиск других анкет.

Аналитика:

Необходимо иметь возможность отслеживать следующую информацию:

  1. Пути попадания новых пользователей в бота;
  2. Общее количество людей в боте ежедневно;
  3. Сколько пользователей побывало на каждом шаге;
  4. Количество перезапусков бота конкретным пользователем;
  5. Сколько дней подряд конкретный пользователь заходил в бота;
  6. Сколько пользователей выбрали в своей анкете каждый из предметов ЕГЭ.

Первоначальная реализация

  1. Бот был собран с помощью сервиса Salebot.
  2. Анкета заполнялась в самом Telegram, с удалением или редактированием предыдущих сообщений и процессом многократного выбора нескольких предметов по кнопкам в тексте.
  3. Редактирование анкеты было также с возможностью выбора различных предметов по inline клавиатуре.
  4. Данные отправляются в гугл-таблицу.
  5. Аналитика собирается с использованием переменных, заказчик имеет возможность делать по ним фильтрацию и получать срезы данных.

Что было сделано, но затем заменили до официального релиза:

  1. Изначально была сделана простая логика, когда анкеты пользователей выдавались последовательно. Это привело к тому, что анкеты первых зарегистрированных людей видело больше пользователей, чем анкеты тех, кто был зарегистрирован позднее.
    Чтобы решить эту проблему, я сделал рандомный порядок выдачи анкет.
  2. Сначала сделал логику полностью на salebot, но чтобы в будущем была возможность работы с фильтрами, рандомом и уникальностью пользователей, вывел часть логики на питон-скрипт, который запускается внутри salebot.

С чем столкнулись после релиза:

  1. При заполнении анкет внутри бота было много ошибок при выборе нескольких предметов (косяк со стороны salebot, на тот момент у них была проблема, что некоторые переменные случайным образом не сохранялись при высокой нагрузке со стороны одного пользователя).
    Решением этой задачи было создание отдельной формы анкеты. О ней подробно я расскажу в следующем кейсе.
  2. Неоптимизированное количество запросов, которые съедали лимиты salebot.
    Для того, чтобы отслеживать ежедневную активность, была выведена отдельная функция и блок, которые вызывались через message(). Однако не было дополнительных проверок на сутки в сообщении до, и потому вызов был каждый раз, при вхождении в блок.
    Сначала количество запросов было в среднем 8 на человека, после чего было сокращено до 6 на человека. Теперь, с учётом еще некоторой оптимизации и хитростей с НЕвызовом функций, сократил до ~4х запросов на 1 сообщение пользователя.
  3. Не всегда отображалось, что какой-либо пользователь заблокировал бота.
    Это можно было определить, только если отправить им сообщение по api в личку и получить ошибку.
    Так и было сделано: теперь, после того как пользователя лайкают, идет дополнительная проверка.
  4. Ошибка работы с полями ввода пользователей.
    Сначала думал работать с markdown разметкой, чтобы выделять пункты жирным и др., но я решил, что это будет слишком затратно по времени, поэтому сделал работу через html разметку.
    Однако вскоре столкнулся с тем, что нельзя использовать одну функцию для экранирования скобки, чтоб она не ломала логику сообщения и не вылезала ошибка.
    В результате все-таки перешел на markdown разметку, но пришлось писать дополнительные проверки.

Результаты:

  1. Сделал бота ЕГЭ-знакомств, по согласованному ТЗ;
  2. Продумал и внедрил сбор аналитики;
  3. Настроил питон-скрипт для получения списка пользователей и выбор случайного, предварительно отсеяв тех, которых пользователь уже посмотрел.

Бот ещё дорабатывается и будет дополняться новым функционалом.

Например, скоро внедряем фильтрацию анкет по предметам у пользователей.
Также в кейсе не раскрыт весь ныне рабочий функционал (например случайный показ преподавателей-репетиторов раз в сутки, предлагающих пройти у них обучение)
Сам бот -> @webaddy_bot

Чтобы заказать разработку бота, пишите -> @mihail_plavko