Телеграм бот для CustDev'а на Aiogram

12bc352c3dc8b34baf799ffc92d8d05e
  1. Идея

  2. Бот

    1. Первая версия

    2. Озарение

    3. Вторая версия

  3. Что дальше

Перед тем как выпускать минимальный продукт, нужно проверить его востребованность на рынке. Как правило, наши представления о рынке не соответствуют реальности, отчего очень легко попасть в ситуацию, когда бюджет реализован, какой-то минимальный продукт готов, а трафик отсутствует. Для таких случаев и существует CustDev.

CustDev (далее — кастдев) — сокр. от англ. Customer Development — проверка на востребованность.

Итак, как же появилась идея реализовать телеграм бота для проведения простых опросов и как был реализован MVP (который, кстати, перед разработкой не проверялся).

Идея

Небольшая предыстория, меня зовут Михаил и я год учился на социологии. Год изучал методологии опросов, практиковался в «полях» и писал курсовую на основе социологических иследованний.

Во время моей учебы я периодически сталкивался с опросами студентов старших курсов, которые проводили полноценные социологические исследования методом анкетирования. Конкретно, онлайн-опрос. Каждое их сообщение выглядело примерно следующим образом:

Добрый день, меня зовут <имя> я студент/ка <курс, кафедра> пройдите опрос посвященный <тема опроса>:

<ссылка на опрос в гугл формах или другом конструкторе опросов>

Во всех этих опросах я участвовал, но почти всегда психовал от того, как их долго и муторно проходить. Чуть позже я решил что так быть не должно и решил сесть за этот проект.

Бот

И тут в какой-то момент мне в голову пришла идея. А что если сделать опросы быстрой и удобной операцией, которую можно проходить больше чем один раз. То есть некий Тиндер от мира социологии.

Так и появился он, Survey Compact (предварительное название, которое в целом отражает суть проекта).

Первая-версия

Разработку я начал с того, что попросил своих знакомых с кафедры социологии разработать анкету, чтобы потом перенести ее в бота. Я думал это было просто, поэтому как только анкета была у меня на руках я приступил к работе.

Для начала я нашел какой-то стандартный шаблон структуры для телеграм бота и перенес его в свой проект (спойлер: я от него отказался)

Вообще этот шаблон был почти полностью скопирован, в т.ч. с файлами и скриптами, но немного переделан.

»Внезапный» инсайт
Просто копировать проект и скрипты оттуда, а потом изменять под себя на начальном этапе развития кодера — плохой экспириенс. В какой-то момент я, конечно, понимал как работает код, но спутся какое-то время запутался в своем и чужом функционале

│   .gitignore
│   bot.py
│   requierments.txt
│
├───app
│   │   config_reader.py
│   │   dbworker.py
│   │   __init__.py
│   │
│   ├───handlers
│   │   │   common.py
│   │   │   p-ker-new.py
│   │   │   partyshaker.py
│   │   │   __init__.py
│   │   │
│   │   └───__pycache__
│   │           common.cpython-310.pyc
│   │           partyshaker.cpython-310.pyc
│   │           __init__.cpython-310.pyc
│   │
│   └───__pycache__
│           config_reader.cpython-310.pyc
│           dbworker.cpython-310.pyc
│           __init__.cpython-310.pyc
│
└───config
        bot.ini

структура проекта в первой версии

Озарение

В какой-то момент, когда у меня совсем не ладилось с первой версией, я решил пересмотреть и структуру опроса и способ программирования. Если первая версия была с обычными кнопками, в базу данных она передавала длинные ответы вроде «Затрудняюсь ответить» то вторую я решил делать по-другому.

Вторая-версия

Вторая версия получилась более компактной, лаконичной и логичной, что самое главное. Вот несколько нововведений, которые я добавил:

  1. Я сократил количество вопросов с ~10 до 5

  2. Сделал вместо клавиатурных кнопок инлайн.

  3. Сделал изменение фрейма с вопросом, чтобы интерфейс телеграма не скакал туда сюда удаляя и отправляя вопрос.

  4. Настроил коллбэк от кнопок согласно ответу. Ответы, кстати, стали стандартизированными, то есть они описывались листом «точно да», «скорее да», «скорее нет», «точно нет», что позволило сделать нумерацию от 1 до 4 где 0 — затрудняюсь ответить, а 1 — точно да.

Таким образом опрос стал очень простым, быстрым.

Что дальше

Дальше дистрибьюция. Я разослал этот опрос друзьям, знакомым, родственникам, они разослали точно также. В итоге у меня получилось собрать 70 обезличенных ответов, которые помогли решить задачу для нашего небольшого проекта (собственно для чего этот бот и разрабатывался).

Код бота доступен по ссылке: mkhivchk/polling_bot: The bot is designed to conduct quick surveys and custdev research. (github.com)

© Habrahabr.ru