У нас есть традиция – каждой весной мы участвуем в Днях карьеры любимого Новосибирского госуниверситета, главной кузницы наших кадров. И каждый год мы придумываем для студентов что-нибудь любопытное. В этом году сделали мастер-класс о том, как написать чат-бота. Для регистрации на мастер-класс запустили в Telegram собственного бота «Академик» @academic_quiz_bot. Его же все вместе и собирали на мастер-классе.   Если вы еще не завели себе симпатичного бота, сейчас расскажем, как выбирать тему, и, собственно, делать бота. Придумать интересную тему для мастер-класса было непросто, ведь конкурировать приходится уже и с самими собой. 2 года назад мы за полтора часа мастер-класса на глазах студентов написали мобильное приложение для айфона, которое показывает погоду около их альма-матер НГУ (более 5000 загрузок, и продолжает скачиваться). Год назад мы за 1,5 часа сделали IoT-решение и научились зажигать лампочку со смартфона. В этом году нужно было сделать что-то не менее зажигательное, и мы решили научить студентов делать чат-ботов, ведь эти виртуальные собеседники сейчас переживают взрывной рост популярности.  Идея делать чат-бот традиционно взялась у нас не с потолка – для одного из наших заказчиков, мы как раз разработали чат-бот в Telegram, который позволяет территориальным менеджерам компании без доступа к стационарному компьютеру и быстрому интернету, оперативно управлять проектами – назначать, делегировать задачи и следить за статусом их исполнения.
К тому же, бот был удобным способом в игровой форме собрать контакты студентов и пригласить на мастер-класс.  Бота мы обязательно хотели сделать полезным, чтобы он продолжал жить и радовать всех и после Дней карьеры. После долгих раздумий и споров, такую тему нашли! В основу положили популярную в нашем городе онлайн-анкету Алексея Козионова на знание Новосибирского Академгородка. И за неделю до мастер-класса мы запустили в Telegram нашего чат-бота «Академик» @academic_quiz_bot.  «Академик» задает любопытные вопросы (всего 101 вопрос) с вариантами ответов о жизни любимого района, вроде: «Что в Академгородке называют "Поганкой"?», «Какой американский президент посещал Академгородок?», «Почему микрорайон называется "Щ"?», «Сколько ступенек имеет лестница, ведущая от центрального пляжа до моста?», «Кто из лауреатов Нобелевской премии жил в Академгородке?» и так далее.  «Академика» мы дополнили стикерпаком с подбадривающими фразочками от нашего талисмана – ebtman’а.   Скачать стикерпак можно тут.  В первую неделю жизни бот также работал регистратором на мастер-класс и тщательно собирал контакты участников. А сейчас это просто развлекательный тест. Все, кто знает Академгородок, вэлкам проходить викторину. Про создание чат бота с помощью Microsoft Bot Framework на Хабре писалось уже много. А вот туториалов – единицы. Поэтому для всех, кто ещё не запилил себе виртуального «болтуна», рассказываем наш рецепт.   Для начала создаём проект в Visual Studio с использованием Bot Application Template.   После создания мы сразу получаем готового «Эхо» бота, который повторяет отправленное ему сообщение в ответе. Мы можем запустить проект кнопочкой F5. В браузере откроется дефолтная страница вот такого вида:  Копируем адрес и запускаем эмулятор.   Куда вставляем скопированный адрес и дописываем api/messages. Проверяем что всё работает.
Далее усовершенствуем нашего бота. Заставим задавать его вопросы и проверять ответы.
Для начала нам понадобятся данные для вопросов. Можно сделать это разными способами. Можно хранить локально или загружать из облака. Мы выбрали второй вариант.
Создадим простой класс для загрузки вопросов.  Этот класс при создании будет загружать вопросы с сервера и при необходимости возвращать следующий вопрос исключая те, на которые пользователь уже ответил. Создадим новый класс в Visual Studio под названием QuizDialog. И реализуем в нём интерфейс IDialog<string>. Реализуем функцию ShowQuestion. Сначала загрузим список уже пройденных вопросов из хранилища. И запросим следующий вопрос Если вопросов нет, то считаем квиз пройден и возвращаем управление в родительский диалог.
Далее отправляем текст вопроса пользователю. Также картинки можно передавать не через url (хотя я считаю, что в telegram надёжнее именно так), а через Attachment. Код функции BoldString: Текст форматируем в «xml» чтобы разделить текст по строчкам и выделить строчку с номеров вопроса жирным цветом. Тут стоит учитывать, что не все мессенджеры поддерживают одинаковые форматы, тут стоит читать документацию. Далее нам нужно вывести список ответов. Будем выводить двумя способами. Так как у нас бывают ответы с длинным текстом. Такие мы будем выводить просто под номерами и кнопочки с номерами ответов после. А если ответы короткие (до 30 символов), то будем выводить их сразу в виде кнопочек. Собственно, функция PromptDialog.Choice показывает диалог с кнопочками. Далее нам понадобятся две функции для обработки выбора пользователя. В случае если пользователь написал что-то некорректное считаем его ответ неправильным. Вот такие мы злодеи. Далее, нужно показать правильный ответ и статистику. И небольшим бонусов если пользователь общается с ботом через «telegram» подбодрить его стикером. Далее в MessagesController нужно вызвать наш диалог.  После отладки в эмуляторе можно опубликовать бота. Вот тут это уже описано.  А наш проект целиком лежит вот тут.  Этой студенческой весной мы научили молодежь писать собственных чат-ботов и собрали рекордное для нас количество участников на мастер-классе. Снова повстречались с фанатами  У нас есть ребята, в смысле парень и девушка, которые ходят к нам на мастер-классы уже третий год подряд и, наконец, доросли, до 4 курса. Говорят, напишут диплом и сразу к нам (мы раньше 4-го курса студентов все равно не берем). А еще, сами получили большое удовольствие от общения с молодежью и вдохновение для новых проектов! Ну и викторину нашу очень любим и рекомендуем всем, кто знаком с Академом — @academic_quiz_bot.   Создаем цифровые продукты