Боты в городе Иннополис
Cказ о том, как быстро создать несколько полезных сервисов для управления городом посредством ботов в Telegram.
Меньше 3 месяцев назад в республике Татарстан официально открылся Иннополис — первый российский город, появившийся в 21 веке.
Его особенность – экономика, основанная на высокотехнологичных индустриях и, прежде всего, на IT: ключевыми точками притяжения в город являются университет «Иннополис» — siliconrus.com/2015/09/innopolis-student/и одноименная особая экономическая зона: innopolis.ru/sez/investoru
Перспективный мастер-план города рассчитан на 155 тысяч жителей через 15 лет, а сегодня в нем проживает около 400 студентов и пара сотен постоянных жителей.
Как и все стартапы, город-стартап начинается с нескольких сотен жителей-последователей, которым мэрия города уделяет особое внимание. У такой немногочисленности есть свои преимущества: например, все жители города, равно как и лица, принимающие решения о развитии Иннополиса, находятся на расстоянии одного «тапа» в Telegram. Такой способ коммуникации выбран не случайно, а как раз для оперативности и получения обратной связи от жителей города без посредников.
Сегодня общий чат в Telegram объединяет практически всех жителей и ключевых сотрудников города tjournal.ru/p/innopolis-telegram. Начинался он как флудилка, но со временем стал использоваться как основной сервис: информирование, сбор жалоб и предложений от жителей, поиск попутчиков, общение с единомышленниками, все это происходит через Telegram. При этом, только на чатах дело не заканчивается: город-стратап Иннополис требует agile подхода в создании сервисов для своих жителей. А там, где agile, там MVP, проще говоря — минимальная польза конечному пользователю, которую можно создать сервисом с минимальными затратами времени для первого релиза. Боты Telegram подошли для реализации MVP лучше всего.
Бот Консьерж-сервиса
Любой человек на планете Земля может позвонить в 4 утра (или любое время суток) в Консьерж-сервис Иннополиса по номеру 8-800-222-22-87 и узнать о расписании транспорта, о вакансиях, открытых в городе, о том где купить лекарства — о чем угодно. Ну или пожаловаться! Понятно, что большей частью жители задают типовые вопросы, и это можно превратить в автоматизированный сервис. А для того, чтобы каждый житель был в курсе всех изменений, сервис должен не только предоставлять информацию по запросу, но и уметь анонсировать актуальную информацию самостоятельно.
Разработчик проекта Юрий Чернушенко решил эту проблему:
Лучшей аналогией для ботов будут услуги информационного консьержа через чат.
Зная имя бота, пользователи создают с ним чат в их клиентской программе. Бот может предоставить интерес быстрого доступа к часто задаваемым вопросам, перенаправлять сообщения на оператора и сам инициировать общение, делая объявления.
Из преимуществ такого подхода можно отметить:
• Отсутствие необходимости устанавливать дополнительные приложения, а бизнесу — развивать и поддерживать их;
• Общение с пользователями можно автоматизировать за счет набора заготовленных ответов, сократив таким образом нагрузку на колл-центр;
• Пользователи смогут получать информацию к частым запросам в один клик
• Бизнес получает всю статистику обращений пользователей;
• Возможность обработки естественных языков (Natural Language Processing), позволяет автоматизировать общение пользователей в свободной форме и предугадывать их поведение.
Первый раз идея автоматизации консьерж службы появилась во время Yandex Tolstoy Camp, тогда мы пытались сделать аналог Magic-а (http://www.getmagicnow.com/) и Luka (https://luka.ai/). В тот момент казалось, что мессенджеры будут двигаться по закрытому пути и не откроют свои API для работы с ними и доступа к данным, поэтому мы смотрели на старые добрые СМС сообщения. Были обходные пути и неофициальные библиотеки для тех же WhatsApp и Telegram, но было рискованно строить свои решения, опираясь на такой подход. Потом, неожиданно, Messenger Facebook и, затем, Telegram открыли свои API и, думаю, эти платформы позволят создать много интересных приложений.
Что умеет бот.
Бот состоит из двух частей: пользовательской и операторской.
Пользователи могут задавать текстовые команды, использовать кнопки быстрого доступа к информации или задавать вопросы в свободной форме, которые перенаправляются на оператора.
Оператор может обновлять сообщения, скрытые за каждой кнопкой (в основном расписания), и делать объявления для пользователей.
Это простой функционал, отчасти он даже есть в самом Telegram (broadcast list, например), но возможность работать с большим числом пользователей, сохранять эту информацию и предоставлять заготовленные ответы делает вариант с ботом более удобным.
Что дальше
В проекте консьерж-бота интересно добавить функционал, связанный с геолокацией, так как зная расположение жителя Иннополиса, можно многое понять о контексте ситуации. Также, когда база запросов пользователей будет достаточно большой, можно попробовать подключить NLP движки (http://wit.ai/ или tech.yandex.ru/tomita), чтобы автоматизировать общение с оператором.
Бот-хак для увеличения лимита группы
Представьте себе городскую площадь. И вы можете выйти на неё и сказать что-то важное или просто пофлеймить, увлечь горожан новой идеей или обсудить животрепещущее. С одной стороны, город со скоростью мысли instant messaging'а – это прекрасно, а с другой стороны, в этом есть и своё «проклятье». Лимит одной группы в Telegram — 200 человек. А желающих общаться на «площади» близится к 400, что делать? Именно: гейт, форвардящий сообщения между группами.
Один из разработчиков CrazyPit рассказывает о проекте:
В рамках летней школы Университета Иннополиса мы решили поработать с телеграм-ботами. За три недели сделали прототип фреймворка на Scala с использованием Akka для создания телеграм-ботов и написали на фреймворке несколько полезных ботов.
Успели сделать API, которые позволяет писать ботов в «10 строк» и работают асинхронно с использованием Akka, а также возможность запускать нескольких ботов в одном процессе. Планируем добавить различные стратегии распараллеливания работы ботов, побольше сложных функций, облегчающий работу с API и DSL для задания боту поведения, основанного на последовательных вопросах-ответах.
Репозиторий фреймворка: github.com/CrazyPit/botspot
Бот, который уже работает вовсю — это бот, объединяющий группы, не укладывающиеся в лимит 200 человек. Хотя есть информация, что этот лимит будет расширен осенью, мы решили эту проблему уже сейчас. Бот слушает 2 и более групповых чатов и пересылает все сообщения из одного в другие.
Из сложных и полезных проектов на этом фреймворке, которые мы сделали — бот для бродкастинга. Он, во-первых, позволяет обойти ограничение на 100 человек в рассылках, во-вторых, позволяет формировать различные группы пользователей для рассылок через удобный интерфейс, а в-третьих, позволяет находить всю важную для человека информацию в одном чате с ботом. Этот сервис может быть использован для информирования внутри университета, города или любой организации.
Бот «Попутчик»
О проекте лучше всего расскажет сам разработчик – Илья Шимчик:
Идея родилась из потребности получить меньше спама в чате Telegram. Есть групповой чат, где люди находят попутчика и оставляют запросы водителю. И это не самое удобное решение, так как периодически поиск попутчиков сваливается в жуткий флейм. Поэтому появилась идея упростить процесс поиска попутчиков и, заодно, уменьшить количество спама.
Процедура создания бота не сложная: действия по созданию простые и не раз уже описаны, правильней всего начать с официального сайта: core.telegram.org/bots.
У Telegram API есть два способа взаимодействия с backend бота: через webhook и через polling. Я выбрал первый вариант, так как это быстрее и проще. Далее все просто: пишем backend, формируем список команд бота, делаем обработчикил сообщений, создаем интерфейс и вуаля — все работает.
Стоит обратить внимание, что webhooks работает только по протоколу https и самоподписанный сертификат не подходит, Telegram API не даст повесить webhook адрес с самоподписанные сертификатом. Для это есть временной решение — использовать ngrok (ссылка) для тестирование вашего бота напрямую с локального компа.
В итоге, сейчас работает первая версия бота. Уже накопился список ближайших фич, которые будут добавлены боту, таких как оповещение о появлении поездки, учет оставшихся свободных мест в машине, добавление поля комментариев к поездке.
Данную идею хочу развить до полноценного сервиса по поиску попутчиков не только в Иннополисе, но и в Казани. Также планирую научить бота понимать свободную речь, чтобы поездку можно было создать, например, таким предложением: “Еду через неделю из дома к бабушке, есть место для 3 попутчиков, в машине не курить!”
В заключение, пожалуй, стоит сказать пару хвалебных слов Telegram’у: быстрый и защищенный IM-сервис, который с легкостью подхватывается аудиторией и посредством ботов предоставляет доступный инструментарий для появления у этой аудитории сервисов первой необходимости. Во-первых, это позволяет эволюционно развивать аудиторию и её потребности в понятном направлении, исходя из подтверждающихся гипотез ценности сервиса. Во-вторых, сам процесс разработки сервисов не требует огромного количества человеко-часов.
Внедрив ботов, этот и без того хороший сервис создал отличное подспорье для трансформации себя из IM протокола в гибкую платформу для сервисов. Более того, кнопки ботов внутри приложений, позволяют вам без лишних затрат делать простой интерактивный интерфейс для чего угодно.
Браво и респект, Павел! Думаю, разработчикам в Иннополисе, да и просто жителям города, было бы интересно пообщаться с создателем Telegram и узнать его видение будущего мессенджера.
P.S. Что касается Иннополиса, возможно, он станет первым городом, использующим платформу Telegram’а в качестве единой системы авторизации жителей для всех digital-сервисов города. Более того, на habr'е уже были посты о возможности авторизации пользователей через Telegram habrahabr.ru/post/264301 (самое интересное про deep linking в комментариях).
P.P.S. Если Вам интересно участвовать в создании этих или других сервисов — всегда на связи в Telegram: telegram.me/ior_um