- PVSM.RU - https://www.pvsm.ru -
Зимой 2016 года у нас в Stepic.org возникла идея сделать для наших учащихся персонального помощника, поэтому мы позвали студента СПбАУ РАН Константина Чаркина на стажировку, результатом которой видели Telegram-бота. Это потом всё вышло из под контроля и появился набор стикеров и каналы по курсам… Но обо всём по порядку!
В качестве языка программирования был выбран Python, так как backend Стэпика написан на Django и самый простой способ интегрировать бота в общую инфраструктуру — это написание Django Application.
Из множества библиотек-оберток над Telegram API была выбрана eternnoir/pyTelegramBotAPI [1]. Среди вариантов были еще три: datamachine/twx.botapi [2], nickoala/telepot [3], sourcesimian/txTelegramBot [4]. Обусловлен выбор был тем, что, во-первых, она активнее поддерживалась, во-вторых, по ней есть неплохое руководство на русском [5] для самых маленьких. Кстати, автор этого учебника создал группу в ВК, где отвечает на всякие вопросы, связанные с Telegram ботами, совершенно бесплатно и достаточно оперативно.
Чтобы бот мог выполнять некоторые полезные действия, необходимо связать аккаунт на Стэпике с аккаунтом в Telegram. Для этого используется механизм под названием Deep Linking. Почитать про него можно либо в документации к Telegram API [6], либо тут [7] (вторая ссылка понятнее :).
В нашем случае механизм выглядит следующим образом:
Также стоит учесть, что люди проходят курсы в основном с ПК, а пользуются Telegram на мобильных устройствах. Поэтому просить их, если они нашли бота не через сайт Stepic.org, сходить туда и нажать на эту ссылку — это плохая идея, т.к. вполне вероятно, что они не залогинены на данном устройстве, а пароль давно забыт. Поэтому есть второй вариант привязки аккаунта — через email. Бот, если ему написал незнакомый юзер, просит ввести его email, который использовался при регистрации, и если такой email находится, то туда отправляется уникальная ссылка, юзер заходит в свой почтовый клиент, кликает на эту ссылку и все готово.
После того, как мы научились связывать аккаунт нужно определиться с тем, что собственно бот будет уметь делать. Идей по этому поводу было много, но, для начала, решено было остановиться на функциях:
Наиболее простым способом моделирования поведения чат-ботов является конечный автомат [8].
В данном случае он выглядит следующим образом:
Красные состояния — это состояния, в которых бот ожидает от пользователя некоторого ввода.
I — это начальное состояние, в котором бот ожидает одну из следующих команд:
II — это выбор способа регистрации (через сайт или email);
III — состояние ожидания ввода email пользователем;
IV — это состояние, в котором бот ожидает одну из следующих команд:
V — это поиск, бот ждет ввода запроса.
Собственно, смысл всех команд достаточно очевиден, далее несколько примеров использования.
Общение между учащимися реализовано самым простым способом — для курса создается чат и по запросу пользователя он получает список чатов по курсам, которые разделены на 2 категории в зависимости от того, записан ли пользователь на данный курс.
Тут, кстати, была заиспользована новая фича из botAPI 2.0, а именно встроенная клавиатура и редактирование сообщений. Можно было бы и выводить все чаты сразу, но чатов по курсам, на которые пользователь не записан, может быть достаточно много, и если пользователь и хочет увидеть несколько экранов, то пусть это делает осознанно.
Поиск курсов:
Удаление аккаунта:
Выбор способа регистрации:
Пример вывода команды /deadlines:
Бота можно найти по ссылке: telegram.me/stepicbot [9].
Или же сразу можно перейти к связыванию аккаунта на Stepic.org с аккаунтом в Telegram вот так: stepic.org/telegram [10].
Будем рады ответить на вопросы, конструктивная критика также приветствуется!
И на сладкое набор Stepic-стикеров: telegram.me/addstickers/Stepic [11]
Автор: Stepic.org
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/136034
Ссылки в тексте:
[1] eternnoir/pyTelegramBotAPI: https://github.com/eternnoir/pyTelegramBotAPI
[2] datamachine/twx.botapi: https://github.com/datamachine/twx.botapi
[3] nickoala/telepot: https://github.com/nickoala/telepot
[4] sourcesimian/txTelegramBot: https://github.com/sourcesimian/txTelegramBot
[5] неплохое руководство на русском: https://kondra007.gitbooks.io/telegram-bot-lessons/content/index.html
[6] документации к Telegram API: https://core.telegram.org/bots#deep-linking
[7] тут: https://github.com/nickoala/telepot#deep-linking
[8] конечный автомат: https://ru.wikipedia.org/wiki/Конечный_автомат
[9] telegram.me/stepicbot: https://telegram.me/stepicbot
[10] stepic.org/telegram: https://stepic.org/telegram
[11] telegram.me/addstickers/Stepic: https://telegram.me/addstickers/Stepic
[12] Источник: https://habrahabr.ru/post/303478/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.