![](https://habrastorage.org/files/5f4/259/49b/5f425949b03d4d4283d53d2eab70e647.png)
Итак, где-то в июне мы сели обсуждать, что хотим сделать на «Игромире». У нас было 90 метров площади, 4 фокусные модели игровых гарнитур, коллектив девушек гоу-гоу, новая клавиатура, легендарный капитан CS Даниил «Zeus» Тесленко, 12 коробок призов и бесконечное множество браслетов всех сортов и расцветок, а также оверклокер-шоy и стойка с Xbox. Не то чтобы это был необходимый запас для «Игромира», но раз уж начал готовиться к крупнейшей игровой выставке в стране, то сложно остановиться… Чего у нас не было – это тихого спокойного места, в котором мы могли бы поговорить с «продвинутыми» или «взрослыми» пользователями, которым интересны наши продукты, которые хотят узнать больше про технологические особенности, но в общем шуме и гаме теряются.
И тогда мы поняли: «Нам нужен программист Telegram». Мы исходили из того, что в настоящее время Telegram более популярен в гиковской среде, которая интересуется играми и железом, и эти люди чуть старше среднего возраста посетителей «Игромира». Идея была в том, чтобы организовать для наших самых активных фанов особый игровой опыт, который можно было получить на площадке, выполнив ряд заданий, как офф-лайн (найдя что-то на стенде), так и в мессенджере, получив задания внутри Telegram. Нам также очень хотелось добавить в эту историю косплееров (потому что «не сфотался с косплеером, считай, что не был на «Игромире») и соцсети (чтобы увеличить количество охваченной аудитории).
![](https://habrastorage.org/files/080/02c/8c0/08002c8c0a0c4b8d9768b5c3655ad848.jpg)
С этими вводными уже стала более-менее ясна общая картина. Мы нашли четырех великолепных косплей-девушек, каждая из которых символизировала одну из гарнитур HyperX, выпущенных в 2016. На первом этапе квеста надо было собрать все новинки, а именно: найти их на выставке, сфотографироваться, а дальше уже перейти к взаимодействию с ботом, который выдаст еще серию заданий.
Сказано – не значит сделано. Наверняка, по мнению многих, кто не знаком с разработкой, создание бота в Telegram выглядит примерно так.
![](https://habrastorage.org/files/95a/bd9/bfc/95abd9bfc3d04524b5bca22c9fa370a6.jpg)
На деле всё немножко сложнее. Да, фронтэндом выступает сам Telegram со своим API, но вот бэкэнд надо написать. Сначала мы планировали обойтись своими силами. Почитали несколько гайдов, изучили возможности условно-бесплатных сервисов, в которых можно делать ботов. Но в конце концов решили, что лучше всё же поручить эту работу профессионалам, т.к. у самих ушло бы очень много времени и сил на это, к тому же мы руководствуемся принципом, что каждый должен заниматься своим делом.
Мы отправили запросы в несколько компаний и самостоятельным разработчикам-фрилансерам. Половина специалистов не могла спрогнозировать сроки и стоимость. Впрочем, все знают, что такое – работать с фрилансерами. В итоге, во время наших поисков нашлась компания IQBot, которая смогла адекватно оценить сроки, стоимость работ и заложила туда возможные издержки на хостинг и поддержку. Для всех работ мы составили ТЗ, обговорили ещё раз сроки и запустили всё в разработку.
Разработка
Нам требовалось не просто сделать «говорилку» на Bot API 2.0, для конкурса нужна была и база данных для регистрации участников и результатов, очередь на случай высокой нагрузки и облачный хостинг для всего этого. У IQBot были уже отработанные решения, так что ими и воспользовались: в качестве базы взяли свободную MariaDB (продвинутый форк MySQL), очередь боту организовали через популярную для таких целей RabbitMQ, а в качестве хостинга выступал казуальный heroku.com. С двумя первыми решениями всё понятно: это свободные продукты, к тому же давно обкатанные в спарке с мессенджерами и даже ботами Telegram. А вот облако Heroku – это неплохой хостинг, если нужны большие мощности на короткое время. У них есть планы с посуточной тарификацией и гибким платным регулированием производительности системы – так что работа того же бота с бэкэндом в течение недели может стоить совсем смешных денег. IQBot предусмотрительно выбрали на хостинге гибкий тариф, который позволял динамически менять производительность – это нас спасло в момент высокой популярности квеста и, как следствие, высокой нагрузки на бекэнд, т.к. мы смогли оперативно увеличить мощность сервера.
Так как создание бота в большей степени было связано с разработкой бэкэнда, был выбран язык PHP, популярный для ботов Python усложнил бы связь с базой и очередью.
Конечный алгоритм работы бота был такой:
- Пользователь подключается и присылает ссылку.
- Система регистрирует в базе его Telegram-имя, сохраняет ссылку и отправляет сообщение с благодарностью за участие (среди всех участников потом была разыграна гарнитура HyperX Cloud Stinger).
- После этого пользователю предлагают сыграть в блиц-викторину и при правильных ответах на все вопросы можно было сразу на «Игромире» получить призы.
- Спустя 3 дня конкурса бот закрывает прием работ, а всем зарегистрированным участником рассылает благодарность и имя победителя.
- После объявления победителя бот становится заглушкой с промо-сообщением.
![](https://habrastorage.org/files/0bb/d7a/3bf/0bbd7a3bf6d3489e9b153154566ae061.png)
Старт
За пару дней до начала «Игромира» бот был запущен. Окончательная проверка, что всё работает и… ожидание часа X. В день старта у нас на стенде стояли промоутеры, которые предлагали принять участие в квесте. Кроме того, информация активно продвигалась в группах Kingston в соц.сетях, в Telegram-канале @HyperX_Russia (и ещё нескольких дружественных каналах). Как обычно на «Игромире» мобильный интернет работал прескверно, высокая загрузка сети часто не позволяла работать в LTE и 3G, хоть какой-то трафик со стабильным сигналом можно было гонять только по EDGE. Но Telegram – едва ли не единственный мессенджер, который нормально функционирует в сетях 2G, так что у наших гиков всё было в порядке (а некоторые даже умудрялись скачивать мессенджер из AppStore или Google Play прямо на мероприятии).
![](https://habrastorage.org/files/cf9/b09/133/cf9b091330734a64b76077aed7fa03b6.png)
На этапе задумки мы недооценили число участников квеста, из-за чего мощности хостинга на нашем тарифе перестало хватать для быстро обработки очереди участников – люди начали активно присылать не только ссылки, но и сами фотографии и скриншоты, чем создали краткосрочный затор. Приходило до 16 подобных сообщений с изображениями в секунду. Во время выставки разработчики дежурили в системном мониторе Heroku, поэтому проблема была быстро решена увеличением производительности хостинга для RabbitMQ.
Второй проблемой стал интерфейс самого Telegram. В самом начале мы спрашивали пользователя «Ready? Steady?», а ему нужно было нажать на кнопку «Go!», т.к. наш бот был кнопочным. Нам казалось, что это очевидный и единственный сценарий использования, пока пользователи не начали вводить слово «Go» вручную в поле ввода, причем в разных вариациях. Разумеется, алгоритм не понимал, что это в него тут пишут. К сожалению, заблокировать поле ввода в Telegram невозможно, т.к. это всё же мессенджер в первую очередь. Переписывать и перезапускать бота было проблематично, т.к. люди им пользовались и перезапуск сломал бы многим квест.
![](https://habrastorage.org/files/526/cda/533/526cda53342f463d80b875b0e1fbd66d.jpg)
Поэтому наш костыль был самым что ни на есть материальным: на помощь снова пришли промо-девушки, к которым обращались пользователи за помощью. Но на будущее мы запомним, что надо продумать то, что пользователь может писать в текстовое поле и, значит, нужно сделать обработку полученных данных. А также то, что пока роботы без людей существовать не могут, только в тесном симбиозе.
![](https://habrastorage.org/files/65b/08b/957/65b08b9575e04cbe8508b0b172c11f7a.png)
За время работы над конкурсом мы выяснили несколько очевидных вещей:
1. Пользователь всегда найдёт способ повесить отказоустойчивую систему. В нашем случае графические файлы забили очередь, которая создавалась для коротких текстовых сообщений. Поэтому всегда надо оставлять солидный запас производительности на хостинге с возможностью ее быстрой настройки. Никогда не делайте всё «впритык».
2. Обязательно надо делать тест бота не только теми людьми, которые придумывали и разрабатывали механику, но и незнакомыми с квестом, чтобы проверить на неочевидные для нас сценарии поведения.
Сейчас бот @HyperX_bot продолжает свою работу с сообщением-заглушкой, однако базу и очередь мы уже отключили до следующего раза. За время выставки мы получили 5658 сообщений от 846 пользователей. Что интересно, хотя «Игромир» и считается мероприятием для молодой аудитории, средний возраст наших участников составлял 24-26 лет, что подтверждает нашу гипотезу об аудитории.
Параллельно мы запустили канал в Telegram — @HyperX_Russia, в котором на выставке у нас была прямая трансляция всего происходящего на стенде. И наши подписчики всегда могли узнать, поливают ли в данный момент там жидким азотом плашки памяти или Зевс раздаёт автографы. Изначально все активности в Telegram имели проектную основу, и были запанированы только на период выставки (и пару недель вокруг). Но за время работы на «Игромире» на наш канал подписалось более 1500 человек, поэтому мы решили не бросать его, а преобразовать его в некий филиал GeekTimes блога компании Kingston Technology. Для начала мы расширили тематику канала от игр в частности до технологий в целом и переименовали его в Red Head Pub (вы же знаете историю, почему на логотипе красная голова Рекс?). Сейчас там публикуются анонсы новых продуктов и акций, промо-коды на скидки, а также различные технологические новости, проводятся розыгрыши призов и многое другое. Заходите и смотрите сами: @HyperX_Russia (пст-пст, мы даже выпустили свой стикерпак!).
Конкурс
А теперь самое главное! Нам понравилось работать с ботом в Telegram, так что мы планируем и дальше его использовать, но сейчас решили обратиться за консультацией к сообществу. Итак, нам нужны ваши идеи, что можно реализовать в боте. Например, организовать в нём службу поддержки или использовать его для розыгрышей в канале. Но это может быть и какой-то квест или другая игра, ответы на часто задаваемые вопросы или что-то совершенно иное, но интересное.
![](https://habrastorage.org/files/5f6/920/84a/5f692084a7d54f85b9f59f048fe429f0.jpg)
Подумайте и напишите в комментарии к этому материалу все свои идеи, и обязательно подпишитесь на наш блог на 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, вместо того, чтобы на кнопку нажать. Бывает же… =)