Итак, где-то в июне мы сели обсуждать, что хотим сделать на «Игромире». У нас было 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.
Источник