Как сделать тест в телеграм боте
Опрос в Telegram – отличный способ получения обратной связи от подписчиков канала. При этом, если раньше для создания голосования или опроса в Телеграм-канале требовались сторонние боты, теперь этот функционал доступен в самом приложении.
В этой статье вы узнаете, как сделать голосование в Телеграм-канале без ботов и чем отличается режим викторины от классического опроса. Также, рекомендуем подписаться на наш канал t.me/postiumru, чтобы не пропускать новые полезные материалы.
Получайте до 18% от расходов на контекстную и таргетированную рекламу!- Более 2000 рекламных агентств и фрилансеров уже работают с сервисом.
- Подключиться можно самому за 1 день.
- Зарабатывайте с первого потраченного рубля, без начальных ограничений, без входного барьера.
- Выплаты на WebMoney, на карту физическому лицу, реинвестирование в рекламу.
- У вас остаются прямые доступы в рекламные кабинеты, рай для бухгалтерии по документообороту и оплатам.
Как сделать голосование в Телеграм-канале
23 января 2020 года разработчики Telegram выпустили обновление, после которого всем пользователям стали доступны стандартные опросы в группах и каналах.
Возможности опросов
Викторина
Викторина – вид опроса, смысл которого заключается в нахождении правильного ответа. Голосовать можно только за один ответ, выбор нескольких вариантов недоступен. При выборе правильного ответа, голосующий увидит фейерверк из конфетти.
В прошлой версии «Опросы 1.0», разработчики предлагали организацию только анонимных опросов в Telegram. Ни одна из сторон не могла узнать, кто и за какой вариант проголосовал – только процентное соотношение. С 23 января с приходом «Опросы 2.0» появилась возможность «видимого» голосования.
Нередко в опросах возникает необходимость выбора двух и более вариантов ответа. Ранее подобное можно было организовать только с помощью бота, теперь и через создание опроса с помощью встроенного функционала.
Создание опроса в Телеграм без бота: пошаговая инструкция
Переходим к созданию опроса.
Шаг 1. В десктопной версии приложения нажимаем на вертикальное троеточие в правом верхнем углу и в выпадающем меню выбираем «Создать опрос».
В мобильной версии приложения – ставим курсор в поле создания новой записи и нажимаем на значок скрепки.
Находим и выбираем «Опрос» на открывшейся панели инструментов.
Шаг 3. Нажимаем «Создать», после чего опрос появляется на канале.
Шаг 4. Чтобы закрепить опрос на канале, кликаем на него и в контекстном меню выбираем «Закрепить».
Так его увидит большее количество людей и проголосует.
Как провести опрос в чате или группе
Инструкция по созданию опроса в личных и групповых чатах:
С телефона процесс создания опроса практически идентичен. Только вместо правой кнопки мыши нужно удерживать палец на опросе, а после в правом верхнем углу нужно нажать кнопку «Переслать» и выбрать желаемый чат.
Создание продвинутых опросов
Стандартный функционал Telegram на данный момент предлагает лишь часть возможностей бота @QuAnBot, через которого осуществлялось создание опросов до их внутри официального приложения. Но процесс создания опросов через бота-конструктора значительно сложнее, требует подключение дополнительных ботов с помощью @BotFather.
Идеи опросов и голосований в Телеграм
Опросы и голосования могут быть самыми разнообразными. Ниже предлагаем познакомиться с подборкой тем для опросов на все случаи жизни:
На деле, вариантов предостаточно и для каждой тематики канала можно придумать ни одну сотню опросов.
Telegram позволяет создавать опросы в группах и каналах, которые можно использовать для чего угодно: от принятия решения, где пообедать — до организации экзаменов.
Викторины — это особый вид опросов, в котором есть объяснения и только один правильный ответ. Это делает их идеальными для образовательных целей.
Что такое QuizBot
С помощью Quiz Bot (@quizbot) можно создавать тесты со множеством вопросов и делиться ими. Бот позволяет добавить текст или мультимедиа перед вопросом, чтобы они выглядели в стиле экзаменационных тестов.
Для теста можно установить ограничение по времени. Бот будет следить за тем, на сколько вопросов пользователи ответили верно и сколько времени им на это потребовалось. Бот также ведет общий список лидеров по каждой викторине.
Конкурс викторин 2020
2 миллиарда учащихся не посещает школы из-за глобального карантина, из-за чего мир остро нуждается в онлайн-инструментах для обучения. Именно поэтому Telegram выступил с инициативой краудсорсинга, в рамках которой распределит 400 000 евро среди создателей образовательных викторин.
Чтобы принять участие, используйте Quiz Bot (@quizbot) для создания и публикации оригинальных образовательных тестов по любому предмету, любого уровня сложности и на любом языке. Выбирайте что угодно — от базовой Средневековой европейской истории на английском языке до Микробиологии на немецком (убедитесь, что все права на интеллектуальную собственность соблюдены).
Telegram опубликует все отправленные тесты в общем каталоге. Основываясь на качестве и популярности, мессенджер объявит победителей в несколько этапов. Подача заявок на первый этап заканчивается 15 мая (подробности будут на канале @contest).
Как создать тест
Создать тест очень просто, просто откройте @quizbot в Telegram, нажмите «START» и следуйте инструкциям.
2. Предварительный текст или медиафайл. Теперь настало время создавать вопросы викторины. При нажатии на кнопку «Создать вопрос» открывается шаблон для создания первого вопроса. Однако, если вы хотите, чтобы определенный текст, изображение или видео появлялись перед вопросом, сначала отправьте его, прежде чем нажать «Создать вопрос».
3. Новая викторина. В интерфейсе новой викторины введите свой вопрос и ответы к нему. Затем выберите правильный ответ, нажав на него (он отметится зеленой галочкой).
4. Объяснение. Если вы хотите принять участие в конкурсе, вы должны добавить объяснение к каждому вопросу. Оно появится после того, как пользователь выберет ответ. Используйте его для предоставления дополнительной информации или выявления распространенных ошибок. В поле можно использовать форматирование, включая гиперссылки.
Когда вопрос будет готов, нажмите «Создать». Повторяйте процесс создания вопросов, пока не добавите все вопросы для теста. По завершению отправьте боту команду /done.
5. Таймер. Далее бот попросит вас выбрать, как долго пользователи будут отвечать на каждый вопрос. Для вопросов, которые не требуют каких-либо расчетов, обычно достаточно 10 или 15 секунд. Но для чего-то вроде математики лучше использовать таймер с длительностью от 3 до 5 минут. Вы всегда можете изменить эту настройку позже.
7. Отправьте тест на конкурс. Бот спросит, хотите ли вы представить свой тест на конкурс. Если вы выберете «Да», он задаст пару дополнительных вопросов, чтобы подтвердить заявку.
9. Редактирование тестов. Нажав «Редактировать», вы сможете изменить любые вопросы или параметры теста, включая его название и описание. В «Изменить вопросы» можно добавить текст или изображение перед вопросом, заменить вопрос или добавить дополнительные. Чтобы выбрать отдельный вопрос для редактирования, коснитесь его /ссылки на панели.
10. Статистика викторины. Наконец, вы можете просмотреть статистику. Она показывает, сколько людей приняли участие в викторине, а также, кто ответил на вопросы наиболее правильно и быстро.
В пока еще «прошлом» 2019 году на хакатоне мы вместе с сокомандниками сделали телеграмм бота @pussybotsbot. В те времена бот работал следующим образом: просил селфи у пользователей и какое-нибудь предложение или фразу, а в ответ применял к отправленному селфи забавный фильтр (его подбор делался по отправленной фразе при помощи ML, всего фильтров было несколько сотен). После хакатона бот остался у меня, но денег на поддержку нейронки не было — ее пришлось отключить, а фильтры бот стал применять рандомно.
Первая версия бота c помощью ML подбирала вариант обработки для селфи @pussybotsbotЧуть позже я добавил для пользователей возможность применять определенный фильтр по id, а также поделил все фильтры на разделы и добавил кнопку «настройки» для выбора нужного раздела. Своей аналитики не было, кроме сохранения id пользователей. В таком виде бот просуществовал полтора года.
Времени заниматься ботом не было до этой осени. Поэтому, когда в октябре я открыл статистику по пользователям, был приятно удивлен: активаций (количество пользователей с момента релиза) оказалось более 180 000. Мне сразу захотелось немного изменить логику работы бота, прикрутить аналитику действий пользователей, накопить данные, а затем попробовать улучшить некоторые из его метрик.
Эта статья о том, какую метрику телеграм бота я решил вырастить при помощи онбординга и как проводил A/B тест перед его запуском для всех новых пользователей.
Перед тем, как внедрять онбординг и проводить A/B-тест, я добавил некоторые функции в старую версию бота. Путь нового пользователя в актуальной версии бота без онбординга показан на скриншотах, а все изменения по сравнению со старой версией описаны в тексте ниже.
Скриншоты для пояснения пути пользователя бота @pussybotsbotЭто было первое, что я сделал. Не буду останавливаться на техническом описании своего решения — просто скажу, что в итоге аналитика собирается по всем событиям в боте, можно легко доставать из базы любые данные или визуализировать их в дашбордах.
Кнопка «избранное» для сохранения понравившихся фильтров.Пользователям это дало возможность применять понравившийся фильтры без запоминания их id. Мне же появление этой функции дало возможность выявить наиболее популярные фильтры. При онбординге я использовал эти знания (об этом будет ниже).
Если пользователь 3 раза получил результат обработки, бот требует от него подписаться на канал для продолжения работы. Пока требуется подписаться на канал, созданный для этого бота — в нем публикуются обновления бота (новые функции, добавление фильтров, информация о неисправностях). Возможно, в будущем таким способом получится продавать рекламу, но пока у меня нет никаких сведений относительно интереса со стороны рекламодателей к такого рода продвижению.
Насколько мне известно, самый популярный формат рекламы в ботах — это делать рассылки по всем пользователям бота, но это негативно воспринимается пользователями. Кстати, интересно узнать у владельцев ботов — как вы их монетизируете?
контекстная реклама с проверкой действия (например, подписки на рекламируемый telegram канал)При проектировании онбординга, я старался добиться двух целей:
- с самого начала показать такую обработку, которая понравится пользователю и тем самым подтолкнуть его к продолжению работы с ботом;
- продемонстрировать работу основных управляющих элементов бота (кнопка «обновить» для применения нового фильтра и «настройки» для выбора группы фильтров).
Первый шаг при онбординге такой же, как и при обычной работе бота: пользователя просят прислать селфи. После этого бот присылает обработку и показывает лишь 1 кнопку «обновить», а не все элементы управления, доступные в обычном режиме. Кроме того, заранее устанавливается фильтр для первой обработки пользователя.
Я выбрал фильтр «омультяшивание», который придает фотографии эффект векторного рисунка, так как знал, что данный фильтр популярен среди пользователей и результат обработки скорее всего понравится новому пользователю. Расчет был на то, что применение популярных фильтров приведет больше новых пользователей к целевому действию — подписки на канал.
Знакомство с первым фильтром и функцией “обновить” @pussybotsbotПри нажатии «обновить», пользователь получает обработку уже другим фильтром и видит кнопку «настройки», которая отображает доступные для выбора категории фильтров. На этом шаге онбординга также используется популярный среди текущих пользователей фильтр. В дальнейшем я планирую устроить A/B-тесты по разным фильтрам в онбординге, но пока просто взял один из самых популярных, которые добавляют в «избранное».
После выбора категории, пользователь получает обработку случайным фильтром из выбранной категории, а онбординг на этом заканчивается и становится доступным обычное меню управления. На этом шаге бот ожидает от пользователя команды и при попытке получить следующую обработку попросит пользователя подписаться на канал: отправляет ссылку для перехода в канал и кнопку, которую требуется нажать после подписки. В дальнейшем при помощи telegram api бот проверяет подписку на канал при каждой обработке и выдает результат только тем, кто подписан.
Как проводил A/B-тест и какую метрику сделал ключевойВ A/B тесте принимали участия только новые пользователи бота, так как онбординг запускается лишь на старте. Группе A показывалась версия бота без онбординга, а группе B — версия с онбордингом. Пользователи разделялись по группам случайным образом (если telegram id нового пользователя был нечетный, он попадал в группу A, а если четный — в группу B).
Это стандартные правила проведения A/B теста. Перед началом, я определил этапы воронки, через которые проходят все новые пользователи бота. Всего получилось 5 этапов:
Далее начертил 2 таблицы. Первая понадобилась для записи количества пользователей в группе А и в группе B на каждом из этапах воронки. Вторая таблица — для подсчета относительных конверсий на каждом из этапов воронки, а также абсолютной конверсии в подписчика. Относительные конверсии в таблице это конверсии с C1 по C4, а абсолютная — C абс.
Ключевой метрикой выбрал относительную конверсию C2 «получение результата» — «получение ссылки». Дело в том, что до момента получения первого результата работа версии бота с онбордингом ничем не отличается от работы версии без онбординга, а сразу перед этапом «получение ссылки», версия с онбордингом начинает работать также, как и версия без онбординга. Таким образом, чем больше пользователей окажется на этапе «получение ссылки», тем лучше работет онбординг.
Значения остальных относительных конверсий я ожидал увидеть примерно одинаковые в обеих группах, за исключением конверсии в переход по ссылке. Я предполагал, что пользователи, прошедшие через онбординг, будут активнее кликать по ссылке, но в реальности это оказалось не так.
A/B тестирование дает ответ на вопрос какой из двух вариантов обладает лучшей конверсией, но зачастую для получения статистически значимого результата, исключающего случайную ошибку, приходится ждать много времени.
До начала проектирования теста, я подсчитал необходимое количество пользователей и время ожидания в калькуляторе Эвана Миллера. У меня уже были накоплены данные по исследуемой конверсии: в своем прогнозе я предполагал, что она увеличится примерно на 15% при добавлении онбординга.
Калькулятор дал прогноз, что ожидать набора пользователей при таком прогнозе для статистически значимого результата придется около 4 дней — для меня это было приемлемо. В итоге изменение конверсии оказалось существеннее прогнозируемого и статистически значимый результат удалось получить менее чем за 2 дня.
Как видно из заполненных таблиц с результатом, все конверсии кроме ключевой C2 и C абс. оказались примерно одинаковыми. Разницу конверсий C2 в группах я выделил в таблице зеленым, так как статистическая значимость этого результата была подтверждена калькулятором Эвана Миллера. Конверсия C3 в обеих группах также оказалась примерно одинаковой — это значит, что те пользователи, которые дошли до этапа получения ссылки имели примерно равную мотивацию ее нажать в обеих группах.
При этом онбординг отлично справился со своей задачей и довел гораздо больше новых пользователей до этапа получения ссылки и требования подписаться на канал, чем версия без онбординга. Абсолютная конверсия изменилась примерно на тоже значение, что и C2 — это говорит о том, что отрицательного влияния онбординга на нее не было. После окончания теста онбординг был запущен для всех новых пользователей.
Подтверждение статистической значимости результата в калькулятореПолученный в калькуляторе результат дает понимание, что конверсия в группе B (с онбордингом) оказалась выше. Также в калькуляторе можно посмотреть доверительный интервал полученной конверсии. В моем случае этот интервал достаточно существенный, но пока я решил не тратить время на его сужение. Мне было достаточно простого сравнения двух версий.
- Онбординг в телеграм ботах так же важен, как и в других продуктах.
- Чтобы сделать хороший онбординг, нужно знать предпочтения пользователей.
- При проведении A/B-тестов пользователи в двух группах должны совершать действия в один период времени, то есть нельзя сначало давать пользователям версию A, замерять результат, а затем давать версию B.
Если какие-то метрики на этапе тестирования противоречат здравому смыслу, нужно обязательно перепроверить все шаги на наличие программных ошибок.
До начала тестирования стоит спрогнозировать вероятное время накопления данных, иначе вы рискуете потратить на тест больше времени, чем у вас есть.
Если вас интересуют продуктовые исследования и эксперименты, то загляните на мой телеграмм канал @petprojectblog — в нем я описываю реальные продуктовые кейсы, а для данной статьи там есть небольшой скринкаст. В комментариях под статьей хотел бы пообщаться с другими разработчиками ботов и продакт менеджерами. Мне особенно интересны аналитика и способы монетизации ботов.
А сегодня мы познакомимся с опросами 2.0, точнее, с новой сущностью: викторинами (quiz). Викторина – это именно то, что вы и предположили; тест с одним правильными вариантом ответа и ещё N неправильными.
Поставим себе задачу сделать бота, который умеет:
Задач много, придётся вспомнить, что такое колбэки, инлайн-режим и классы. Но и это не самое главное…
Пятиминутка ненависти к telebot или Привет, aiogram!
Как вы знаете, во всех предыдущих уроках использовалась библиотека pyTelegramBotAPI, именуемая в коде telebot. В 2015-2017 годах, возможно, она ещё была актуальна, но прогресс не стоит на месте. А telebot, увы, стоит. Кривая реализация поллинга, проблемный next_step_handler, медленная поддержка новых версий Bot API и т.д.
В течение 2019 года я постепенно переносил своих ботов на другой фреймворк, который по многим пунктам превосходит pyTelegramBotAPI, и имя ему – aiogram. «Почему?», спросит меня уважаемый читатель. Что ж, приведу следующие аргументы:
- это полноценный фреймворк, т.е. позволяет сделать больше полезных вещей;
- асинхронный, что делает его быстрее в некоторых задачах;
- поддерживается Python 3.7+ и выше, что сподвигнет обновить свой старенький интерпретатор и использовать новые возможности языка;
- множество встроенных «помощников» (синтаксический «сахар»), улучшающих читабельность кода;
- оперативные обновления (поддержка новых опросов появилась в тот же день, что и в самом Bot API);
- русскоязычный чат поддержки и обсуждений, где сидит, в том числе, и сам разработчик фреймворка;
- мой любимый пункт: нормально работающий поллинг.
Прокомментирую последний пункт: в настоящий момент почти все мои боты работают на aiogram-ном поллинге и не падают ежедневно, как в случае с pyTelegramBotAPI.
Введение получилось очень большим, поэтому давайте уже перейдём к делу.
Плацдарм для бота
Напишем элементарного эхо-бота на aiogram с поллингом, чтобы бегло ознакомиться с фреймворком. Прежде всего, добавим нужные импорты (предполагается, что мы используем Virtual Environment, подробнее о нём – в уроке №0):
Теперь создадим объект бота. А за хэндлеры здесь отвечает специальный Диспетчер:
Запрашиваем викторину у пользователя
Сохраняем и предлагаем
В 11-м уроке я использовал библиотеку Vedis для сохранения состояний в файле, чтобы те не сбрасывались после перезагрузки бота. В этот раз мы будем сохранять всё в памяти, а выбор постоянного хранилища останется за читателем, чтобы не навязывать то или иное решение. Разумеется, данные в памяти сотрутся при остановке бота, но для примера так даже лучше.
Наше хранилище будет основано на стандартных питоновских словарях (dict), причём их будет два: первый словарь содержит пары (“id пользователя”, “массив сохранённых викторин”), а второй — пары (“id викторины”, “id автора викторины”). Зачем два словаря? В дальнейшем нам нужно будет по идентификатору викторины получать некоторую информацию о ней. Необходимые нам сведения лежат в первом словаре, но в виде значений, а не ключей. Поэтому нам пришлось бы проходиться по всем возможным парам ключ-значение, чтобы найти нужную викторину.
Помимо определения викторины, нам нужно хранить некоторую дополнительную информацию. Поэтому давайте создадим файл quizzer.py , опишем наш класс Quiz со всеми нужными полями в конструкторе класса (обратите внимание, в конструктор передаются не все поля, т.к. часть из них будет заполнена позднее):
Если вы раньше не сталкивались с подсказками типов (type hints), код вида “chat_id: int = 0” может ввести в замешательство. Здесь chat_id — это имя переменной, далее через двоеточие int — её тип (число), а дальше инициализация числом 0. Python по-прежнему является языком с динамической типизацией, отсюда и название “подсказка типа”. В реальности это влияет только на восприятие кода и предупреждения в полноценных IDE типа PyCharm. Никто не мешает вам написать quiz_id: int = "чемодан" , но зачем так делать? Вернёмся в наш основной файл (я его далее буду называть bot.py ) и импортируем наш класс: from quizzer import Quiz . Также добавим в начале файла под определением бота два пустых словаря:
Теперь будем отлавливать викторины, приходящие в бота. Как только прилетает что-то, похожее на неё, извлекаем информацию и создаём две записи. В первом словаре храним параметры викторины, чтобы потом её воспроизвести, а во втором просто создаём пару викторина-создатель. Идентификаторы, составляющие ключ словаря, конвертируем в строки методом str() :
Начнём разбираться с инлайн-режимом (не забудьте включить его у @BotFather). Когда пользователь вызывает нашего бота через инлайн, показываем все созданные им викторины, плюс кнопку “Создать новую”. Если ничего нет, то только кнопку.
Отправляем викторину и получаем ответы
Начнём с PollAnswer . Когда прилетает событие с новым ответом на викторину, прежде всего достаём её ID, по ней ищем автора во втором словаре. Если находим, то гуляем по всем викторинам этого пользователя и ищем совпадение по ID самой викторины, т.е. в точности обратное действие, только уже в первом словаре. Когда обнаружится нужная викторина, то проверяем, верный ответ или нет (сравниваем с correct_option_id ), и если да, то записываем ID пользователя в список победителей. Если количество победителей при этом достигает двух, то останавливаем викторину.
Код готов. Закинем викторину в группу и попросим друзей правильно ответить, а сами ответим неправильно. После первого правильного ответа:
2 ответа, только один правильный
После второго правильного ответа:
3 ответа, 2 правильных, опрос закрыт
На этом всё! Если у вас возникли вопросы, не стесняйтесь задавать их в нашем чатике, а если вы нашли ошибку/опечатку, либо есть чем дополнить материал, то добро пожаловать на GitHub (ну, или всё так же в чате). Полный код урока можно найти здесь.
Читайте также: