Итак, где-то в июне мы сели обсуждать, что хотим сделать на «Игромире». У нас было 90 метров площади, 4 фокусные модели игровых гарнитур, коллектив девушек гоу-гоу, новая клавиатура, легендарный капитан CS Даниил «Zeus» Тесленко, 12 коробок призов и бесконечное множество браслетов всех сортов и расцветок, а также оверклокер-шоy и стойка с Xbox. Не то чтобы это был необходимый запас для «Игромира», но раз уж начал готовиться к крупнейшей игровой выставке в стране, то сложно остановиться… Чего у нас не было – это тихого спокойного места, в котором мы могли бы поговорить с «продвинутыми» или «взрослыми» пользователями, которым интересны наши продукты, которые хотят узнать больше про технологические особенности, но в общем шуме и гаме теряются.
И тогда мы поняли: «Нам нужен программист Telegram». Мы исходили из того, что в настоящее время Telegram более популярен в гиковской среде, которая интересуется играми и железом, и эти люди чуть старше среднего возраста посетителей «Игромира». Идея была в том, чтобы организовать для наших самых активных фанов особый игровой опыт, который можно было получить на площадке, выполнив ряд заданий, как офф-лайн (найдя что-то на стенде), так и в мессенджере, получив задания внутри Telegram. Нам также очень хотелось добавить в эту историю косплееров (потому что «не сфотался с косплеером, считай, что не был на «Игромире») и соцсети (чтобы увеличить количество охваченной аудитории).
С этими вводными уже стала более-менее ясна общая картина. Мы нашли четырех великолепных косплей-девушек, каждая из которых символизировала одну из гарнитур HyperX, выпущенных в 2016. На первом этапе квеста надо было собрать все новинки, а именно: найти их на выставке, сфотографироваться, а дальше уже перейти к взаимодействию с ботом, который выдаст еще серию заданий.
Сказано – не значит сделано. Наверняка, по мнению многих, кто не знаком с разработкой, создание бота в Telegram выглядит примерно так.
На деле всё немножко сложнее. Да, фронтэндом выступает сам Telegram со своим API, но вот бэкэнд надо написать. Сначала мы планировали обойтись своими силами. Почитали несколько гайдов, изучили возможности условно-бесплатных сервисов, в которых можно делать ботов. Но в конце концов решили, что лучше всё же поручить эту работу профессионалам, т.к. у самих ушло бы очень много времени и сил на это, к тому же мы руководствуемся принципом, что каждый должен заниматься своим делом.
Мы отправили запросы в несколько компаний и самостоятельным разработчикам-фрилансерам. Половина специалистов не могла спрогнозировать сроки и стоимость. Впрочем, все знают, что такое – работать с фрилансерами. В итоге, во время наших поисков нашлась компания IQBot, которая смогла адекватно оценить сроки, стоимость работ и заложила туда возможные издержки на хостинг и поддержку. Для всех работ мы составили ТЗ, обговорили ещё раз сроки и запустили всё в разработку.
Разработка
Нам требовалось не просто сделать «говорилку» на Bot API 2.0, для конкурса нужна была и база данных для регистрации участников и результатов, очередь на случай высокой нагрузки и облачный хостинг для всего этого. У IQBot были уже отработанные решения, так что ими и воспользовались: в качестве базы взяли свободную MariaDB (продвинутый форк MySQL), очередь боту организовали через популярную для таких целей RabbitMQ, а в качестве хостинга выступал казуальный heroku.com. С двумя первыми решениями всё понятно: это свободные продукты, к тому же давно обкатанные в спарке с мессенджерами и даже ботами Telegram. А вот облако Heroku – это неплохой хостинг, если нужны большие мощности на короткое время. У них есть планы с посуточной тарификацией и гибким платным регулированием производительности системы – так что работа того же бота с бэкэндом в течение недели может стоить совсем смешных денег. IQBot предусмотрительно выбрали на хостинге гибкий тариф, который позволял динамически менять производительность – это нас спасло в момент высокой популярности квеста и, как следствие, высокой нагрузки на бекэнд, т.к. мы смогли оперативно увеличить мощность сервера.
Так как создание бота в большей степени было связано с разработкой бэкэнда, был выбран язык PHP, популярный для ботов Python усложнил бы связь с базой и очередью.
Конечный алгоритм работы бота был такой:
- Пользователь подключается и присылает ссылку.
- Система регистрирует в базе его Telegram-имя, сохраняет ссылку и отправляет сообщение с благодарностью за участие (среди всех участников потом была разыграна гарнитура HyperX Cloud Stinger).
- После этого пользователю предлагают сыграть в блиц-викторину и при правильных ответах на все вопросы можно было сразу на «Игромире» получить призы.
- Спустя 3 дня конкурса бот закрывает прием работ, а всем зарегистрированным участником рассылает благодарность и имя победителя.
- После объявления победителя бот становится заглушкой с промо-сообщением.
Старт
За пару дней до начала «Игромира» бот был запущен. Окончательная проверка, что всё работает и… ожидание часа X. В день старта у нас на стенде стояли промоутеры, которые предлагали принять участие в квесте. Кроме того, информация активно продвигалась в группах Kingston в соц.сетях, в Telegram-канале @HyperX_Russia (и ещё нескольких дружественных каналах). Как обычно на «Игромире» мобильный интернет работал прескверно, высокая загрузка сети часто не позволяла работать в LTE и 3G, хоть какой-то трафик со стабильным сигналом можно было гонять только по EDGE. Но Telegram – едва ли не единственный мессенджер, который нормально функционирует в сетях 2G, так что у наших гиков всё было в порядке (а некоторые даже умудрялись скачивать мессенджер из AppStore или Google Play прямо на мероприятии).
На этапе задумки мы недооценили число участников квеста, из-за чего мощности хостинга на нашем тарифе перестало хватать для быстро обработки очереди участников – люди начали активно присылать не только ссылки, но и сами фотографии и скриншоты, чем создали краткосрочный затор. Приходило до 16 подобных сообщений с изображениями в секунду. Во время выставки разработчики дежурили в системном мониторе Heroku, поэтому проблема была быстро решена увеличением производительности хостинга для RabbitMQ.
Второй проблемой стал интерфейс самого Telegram. В самом начале мы спрашивали пользователя «Ready? Steady?», а ему нужно было нажать на кнопку «Go!», т.к. наш бот был кнопочным. Нам казалось, что это очевидный и единственный сценарий использования, пока пользователи не начали вводить слово «Go» вручную в поле ввода, причем в разных вариациях. Разумеется, алгоритм не понимал, что это в него тут пишут. К сожалению, заблокировать поле ввода в Telegram невозможно, т.к. это всё же мессенджер в первую очередь. Переписывать и перезапускать бота было проблематично, т.к. люди им пользовались и перезапуск сломал бы многим квест.
Поэтому наш костыль был самым что ни на есть материальным: на помощь снова пришли промо-девушки, к которым обращались пользователи за помощью. Но на будущее мы запомним, что надо продумать то, что пользователь может писать в текстовое поле и, значит, нужно сделать обработку полученных данных. А также то, что пока роботы без людей существовать не могут, только в тесном симбиозе.
За время работы над конкурсом мы выяснили несколько очевидных вещей:
1. Пользователь всегда найдёт способ повесить отказоустойчивую систему. В нашем случае графические файлы забили очередь, которая создавалась для коротких текстовых сообщений. Поэтому всегда надо оставлять солидный запас производительности на хостинге с возможностью ее быстрой настройки. Никогда не делайте всё «впритык».
2. Обязательно надо делать тест бота не только теми людьми, которые придумывали и разрабатывали механику, но и незнакомыми с квестом, чтобы проверить на неочевидные для нас сценарии поведения.
Сейчас бот @HyperX_bot продолжает свою работу с сообщением-заглушкой, однако базу и очередь мы уже отключили до следующего раза. За время выставки мы получили 5658 сообщений от 846 пользователей. Что интересно, хотя «Игромир» и считается мероприятием для молодой аудитории, средний возраст наших участников составлял 24-26 лет, что подтверждает нашу гипотезу об аудитории.
Параллельно мы запустили канал в Telegram — @HyperX_Russia, в котором на выставке у нас была прямая трансляция всего происходящего на стенде. И наши подписчики всегда могли узнать, поливают ли в данный момент там жидким азотом плашки памяти или Зевс раздаёт автографы. Изначально все активности в Telegram имели проектную основу, и были запанированы только на период выставки (и пару недель вокруг). Но за время работы на «Игромире» на наш канал подписалось более 1500 человек, поэтому мы решили не бросать его, а преобразовать его в некий филиал GeekTimes блога компании Kingston Technology. Для начала мы расширили тематику канала от игр в частности до технологий в целом и переименовали его в Red Head Pub (вы же знаете историю, почему на логотипе красная голова Рекс?). Сейчас там публикуются анонсы новых продуктов и акций, промо-коды на скидки, а также различные технологические новости, проводятся розыгрыши призов и многое другое. Заходите и смотрите сами: @HyperX_Russia (пст-пст, мы даже выпустили свой стикерпак!).
Конкурс
А теперь самое главное! Нам понравилось работать с ботом в Telegram, так что мы планируем и дальше его использовать, но сейчас решили обратиться за консультацией к сообществу. Итак, нам нужны ваши идеи, что можно реализовать в боте. Например, организовать в нём службу поддержки или использовать его для розыгрышей в канале. Но это может быть и какой-то квест или другая игра, ответы на часто задаваемые вопросы или что-то совершенно иное, но интересное.
Подумайте и напишите в комментарии к этому материалу все свои идеи, и обязательно подпишитесь на наш блог на Geektimes. 16 января (да, вы можете думать все новогодние каникулы) среди тех, кто подписан на наш блог, мы выберем самые интересные идеи и выставим их на голосование в нашем канале в Telegram. А уже 20-го января подведем итоги, и того, чья работа наберет больше всего голосов, наградим SSD-накопителем HyperX Savage 240 Гбайт. Это самый быстрый твердотельный SATA-накопитель с 4-ядерным и 8-канальным контроллером Phison S10, который обеспечивает скорость чтения до 560 Мб/с. Его можно устанавливать в большинство ноутбуков, ПК и даже в домашние кинотеатры.
И не забудьте подписаться на наш канал @HyperX_Russia в Telegram.
Комментарии (16)
Oper124
28.12.2016 12:44+2— Все любят соревновательный момент. Можно вести в реальном времени таблицу со скоростью прохождения квеста. И победителей поощрять
— Т.к. одной из главных целей является раскрутка бренда, фотографии из квеста отсылать не боту, а в инстаграмм с хештегом
Lepeshka
28.12.2016 14:08+4Теперь пускай бот рассылает фотографии этих девушек — косплееров, зря что ли с ними фотографировались.
Fedcomp
28.12.2016 14:10> популярный для ботов Python усложнил бы связь с базой и очередью.
Что? почему?
Oper124
29.12.2016 11:36+1Если делать ботов, то можно организовать «помощника в покупках».
Пишешь ему комплектующую какую хочешь приобрести и свой город/метро. А он тебе выдает самое ближайшее и дешевое место, где она продаётся
Alikmen
29.12.2016 12:05Хотелось бы побольше таких историй)
А если о предпочтениях контента в боте, то 100% интересны новые технологии и вот такие посты о том, как вы справляетесь со сложными, большими задачами.
И что-то заинтересовало меня: неужели такую вещь, как бот в Telegram, не сможет реализовать обычный прогер. Почитал и понял, что это достаточно просто, а вот сама реализация очереди и связки с БД слегка сложнее будет.
streetflush
29.12.2016 13:40+1Для идеи развития бота, я бы предложил ваш каталог забить в бота.
Выбираем SSD -> Выбираем объем -> Выбираем скорость -> получаем фото товара с описанием и ссылками на магазины, тесты, обзоры…
maxp
29.12.2016 14:14Честно говоря, по описанию проблем функционирования бота создается впечатление, что его писали какие-то начинающие студенты. Затыки при нагрузке «до 16 сообщений в секунду» это просто детский сад, не говоря уж о том, что «мы не могли исправить ботак, так как он был запущен и с ним общались люди».
Kuuuzya
29.12.2016 15:27Так не сообщений же, а картинок. Текст не подвесил бы, а изображения могли спокойно, имхо.
n00b1k
29.12.2016 14:23+2Пишешь название модели, в ответ получаешь технические характеристики, условия гарантийного обслуживания и юридический адрес куда можно претензию отсылать. :)
boingo-00
30.12.2016 16:04Можно сделать гида по продукции, например «недорогой SSD для мультимедийного ПК» или «Быстрая память DDR3», бот отвечает списком, который можно отфильтровать, например «SSD на 120 Гб» или «ОЗУ 8 гигов 2 планки». А после фильтрации бот выдает готовые продукты, про которые можно почитать поподробнее и ссылку на магазин.
Еще можно мини-игры добавить, за которые даются виртуальные баллы, которые можно обменять на плюшки типа промо-кодов
Fqyeh29
31.12.2016 16:01+1Помощника по подбору комплектующих.
Вот такой диалог к примеру:
Б — Бот. П — пользователь.
Б: Ваш процессор?
П: Intel i7 4600K
Б: Хоршо, материнская плата?
AVX
31.12.2016 18:48Может быть, кто-то помнит ресурс ru.intel.com (ныне закрыт). Там кроме блогов и форума был такой чат-викторина (iqtest.intel.com): бот задаёт вопросы о продукции (понятно какой) и не только (есть и общего характера), а пользователи отвечают. От скорости и правильности ответа зависит сколько пользователю будет начислено очков. Периодически там разыгрывали призы: кто в определённый период наберёт больше очков (читай — больше правильных ответов и быстрее отвечает) тот выигрывает. Плюсы: популяризация, привлечение новых (потенциальных) клиентов (халява всегда нарасхват), возможность рекламировать прямо в чате новую продукцию (задавать вопросы по ней). В периоды проведения конкурсов народ прямо сутками сидел. Есть и обратная сторона — некоторые продумали способы автоматизации ввода ответов, хоть это и подразумевает сбор базы вопрос-ответ и какой-то способ быстрого поиска.
Предложение — сделать что-то подобное. Думаю, будет востребовано.
LoadRunner
«Если хотите обратиться в поддержку, ответьте „1“. Если хотите сыграть, ответьте „2“...»
streetflush
Это телеграмм бот, там кнопочки есть, не надо никаких 1 и 2 отвечать.
Kuuuzya
Но судя по тексту, есть те, кто всё же отвечает GO, вместо того, чтобы на кнопку нажать. Бывает же… =)