Игры в Телеграме появились в 2016 году. Они представлены как HTML5 и чат-боты. В них можно играть самому с собой, с одним собеседником в переписке или с несколькими людьми в чате, открытом или приватном. Это игры с разнообразной графикой и звуком. Чтобы разработать такую игру, нужно от 3 часов до нескольких месяцев, в зависимости от планов и задуманного масштаба.
Разберем, какие игры в целом позволяет создавать Телеграм, что в тренде, какие технологии используются, особенности графики, как продвигать такие игры. Также ознакомимся с несколькими наглядными кейсами разработчиков.
Можно создавать не только простые, но и сложные игры. Простые HTML-5 игры похожи на игры в ICQ вроде War Sheep, Zoopaloola, Rock Paper Scissors. Их не нужно скачивать и отдельно устанавливать на телефон. Возможно играть прямо в браузере мессенджера, например в десктопной версии Телеграма, на iPhone новее 4+, Android 4,4+.
Преимущества простых игр: низкий порог входа как для разработчика, так и для игрока. Разработать такую игру может человек с нулевыми техническими навыками. Цель игры с самой простой механикой — набрать больше очков, выиграть у других людей. Для каждой группы игроков составляется турнирная таблица. Когда кто-то начинает выбиваться в победители, остальные получают уведомления об этом.
Также возможности Телеграм позволяют разработать сложный многоуровневый 3D-шутер, масштабную ролевую игру в стиле фэнтези или постапокалипсиса, крупную стратегию в реальном времени. Если требуется игра, выполняющая широкий круг задач, с продвинутым геймплеем и механикой, скорее всего будет нужна команда и более мощное сложное оборудование.
Игровая платформа ТГ позволяет создавать игры различного масштаба. Есть те, которые весят 1 килобайт, а те, что весят более 1 Гб. Игры, спроектированные на платформе Телеграма, не занимают места на устройстве. Они загружаются по требованию, работают как веб-страницы в браузере.
Создать игру может любой человек — Телеграм предоставляет для этого ресурсы. Для разработки такой простой игры достаточно несколько часов. Примеры: игра MathBattle была создана за 3 часа, Corsairs — за 5 часов, включая разработку, графику, музыку.
Чтобы найти другие примеры, можно воспользоваться ботом Gamee. Основные жанры — стратегии, RPG, баттлеры, интерактивные квесты, многопользовательские текстовые игры или MUD — Multi User Dungeon.
Разновидности популярных игр:
Кейс доказывает востребованность Телеграм-игр. Разработчик мобильных приложений Максим Газизов искал идею для игры и создал комплексную survival-MMORPG Wasteland Wars в формате бота для Telegram — t.me/WastelandWarsBot. В своем кейсе он подчеркивает, что на идею повлиял растущий тренд развития Телеграма как мессенджера. В Телеграме есть возможность создать игру и сразу получить для нее аудиторию.
Игры в Телеграме в схожем жанре постапокалипсиса востребованы у людей 18-50 лет, разного социального статуса — то есть у платежеспособной взрослой аудитории. Максим отмечает, что некоторые игроки проводят в игре-боте 16-18 часов в день.
Механика игры основана на текстовом формате. Чтобы создать игру, нужно только писать; нет необходимости делать сложную графику, звук. В игре Максима есть сюжетные квесты, лут, торговля, альянсы, битвы, NPC, рейды на боссов, наземный и подземный открытый мир. При создании Максим делал акцент на максимально простой интерфейс для пользователя, качественный UI/UX, буквально выверял каждую кнопку.
Максим периодически делает обновления. Например, это введение PvP-зоны для битв 1х1, добавление PvP для массовой битвы разных игроков из разных банд, расширение функциональности банд, возможности улучшить оружие и броню.
Результаты: В игру играло 500-1 000 человек в сутки. Средний суточный онлайн зависел от игровых событий, запланированных на этот день, праздников, выходных, поэтому менялся каждый день.
Реализована монетизация. За реальные деньги можно купить игровую валюту, за которую можно сменить ник, фракцию или на короткое время ускорить передвижение по Пустоши. Сколько было заработано за время существования проекта, автор кейса не дает такую информацию.
Пользователь переходит в каталог @Gamee. В открывшемся окне бот предложит выбрать тип или жанр игры. Пользователь может выбрать, с кем ему играть — самому с собой (с ботом-NPC), с друзьями, либо с неизвестными противниками из числа пользователей Телеграм.
Если пользователь хочет сыграть с друзьями, он нажимает на With Friends и выбирает друга из списка контактов. Этому другу бот присылает ссылку-приглашение, друг переходит и участвует в игре. Игру можно остановить в любой момент, продолжить позднее — действует сохранение. Пользователь может управлять своими действиями в игре с помощью кнопок в боте.
Преимущества Телеграм-игр для пользователя:
Один из несущественных минусов — запуск происходит через облако, возможны зависания на несколько секунд.
Условия Телеграм запрещают напрямую монетизировать игры, оставлять в них ссылки на сторонние ресурсы и сайты. Но игрового бота можно применять в рекламных, маркетинговых, мотивационных целях:
Можно интегрировать платежную систему, своевременно выбрав подходящее решение, через страницу на своем сайте. Нужно иметь в виду, что игрок будет уходить в браузер и не всегда сможет произвести оплату.
Анализ конкурентов поможет сэкономит время, даст понимание, что работает, а что нет. Как проводить анализ конкурентов и поиск идей перед разработкой:
После того, как идеи собраны, их можно протестировать с помощью интервью с потенциальной аудиторией. Таких людей-респондентов для выборки можно находить через тематические каналы и группы в Телеграме.
Чтобы разработать игру, нужно воспользоваться ботом @BotFather. Этапы работы:
После создания игру можно отправлять в группы, чаты — также как обычное сообщение. Также её можно отправить в inline-режиме.
Под сообщением с игрой будет кнопка inline, которая начинает игру. Если пользователь решает поиграть, жмет на кнопку, боту приходит call-back с информацией о выбранной игре. Разработчик отвечает уникальным url, который сформирован для этого конкретного игрока. Приложение открывает игру у игрока в браузере.
Если кнопка не будет добавлена разработчиком, система сама добавит ее автоматически. Также кроме кнопки запуска, можно добавлять другие кнопки, например с правилами, ссылками на официальный ТГ-канал.
Сообщение с игрой может содержать турнирную таблицу для игроков в конкретном чате. Когда выявляется победитель, другие люди получают уведомления, в турнирной таблице тоже все меняется автоматически. Можно запрашивать данные о рейтинге игроков и создавать таблицу прямо в игре.
В интерфейсе игры система предусматривает постоянную кнопку «Поделиться» вверху экрана. Разработчик может настроить другие кнопки на HTML-странице. Нажав на них, можно открыть желаемый чат и отправить туда сообщение с количеством набранных очков.
Если в URL используется хэш, то Telegram может к нему что-то добавить от себя. Названия добавленных параметров будет начинаться с tg. Чтобы достать собственные параметры из адреса, можно воспользоваться объектом TelegramGameProxy.initParams.
Дизайн похож на классические HTML5-игры. Важно учитывать вес и размер изображений: фона, игровых элементов. Если они будут тяжелыми, это может негативно сказаться на скорости игры. Лучше выбирать векторные изображения, а не растровые.
Ограничения по весу нигде не прописаны и определяются экспериментальным путем. Если в процессе тестов выяснилось, что игра хорошо загружается в обычном браузере, она с большой вероятностью будет также хорошо загружаться в браузере Telegram.
Окно Телеграма может растягиваться благодаря автомасштабированию по ширине. Игра должна быть адаптивной, подходить под любые разрешения. Для больших окон можно добавлять небольшие поля, из-за того что рендеринг изображений на больших экранах отнимает много ресурсов. Экраны и раскадровки анимаций можно собрать в Figma.
В игре Happy Farmer поля фермы динамически генерируются под каждого игрока:
Возможности коммуникации с игроками ограничены. Можно передавать сообщения игрового мира с помощью HTML-разметки. Получить ответ игрока затруднительно. Чтобы отправить такое сообщение, пользователь должен создать команду через знак «/», а это умеют не все. В сообщение может быть встроенная клавиатура, но добавить ее достаточно сложно для разработчика. Если игра должна быть локализована на много языков и работать на всех типах устройств — сложностей прибавляется.
На клавиатуре могут отображаться символы из набора UTF-16. При создании любой игры все основные игровые предметы должны помещаться в этот набор. Игроку такая стандартизация удобна: алмаз в одной игре — премиум-валюта, значит, в другой — тоже что-то ценное.
Текстовая направленность имеет плюс для разработчиков, которые не любят «заморачиваться» с красивой графикой. Текстовые игры создавать проще, расширять за счет текста мир. Помимо локализации понадобится качественная адаптация при выходе на разные рынки.
Преимущество текстовых игр:
Для создания Телеграм-игр подойдут любые технологии и библиотеки, которые доступны в браузере: JavaScript, WebGL-библиотеки, 3D-графика. Конечно, для работы с некоторыми веб-технологиями, возможно, придется освоить языки программирования на базовом уровне.
Например, движок Pixi.js удобен для игр, где используются столкновения объектов в игровой механике. Pixi.js предлагает подробную документацию, с которой разберется frontend-разработчик любого уровня.
В движениях объектов может применяться растровая графика, либо векторные анимации, например lottie-файлы, другие виды svg-анимации.
Чтобы игра интегрировалась в Телеграме, заработала в нем, нужен доступ в интернет. Также игра должна отправлять информацию об очках в API Телеграма. Поэтому нужен веб-сервер, который будет получать сообщения из Телеграм, отдавать игру с отмеченным идентификатором игрока, принимать от Frontend очки и отправлять их в API.
В конце игры очки игрока должны идти с frontend на backend. Из игры нужно отправлять запросы с подставленными очками и идентификатором пользователя. Этот идентификатор передается в ссылке на саму игру. Его нужно сохранить на время, чтобы вернуть обратно с набранным количеством очков. Для этого пишется код в Frontend.
Понадобится сервер, с которого игроки будут подгружать игру и где будет размещаться Телеграм-бот. Также будет нужен SSL-сертификат, посколько Телеграм работает с играми по HTTPS-протоколу для безопасного общения. Такой сертификат, привязанный к домену или поддомену, можно получить у Let's Encrypt.
Для игры не обязательно брать мощный сервер. Можно воспользоваться недорогим облачным вариантом, для решения небольших задач. Например, сервис My Host.
От расположения сервера зависит скорость доступа игроков из разных городов. Например, если предполагается, что ЦА — жители России, желательно выбирать сервера, которые находятся в Москве или Санкт-Петербурге. Операционную систему можно взять Ubuntu 20.04, либо выбрать другую или свой образ ISO или виртуальной машины.
Этапы настройки:
Чтобы создать бота, нужно запустить botfather в Телеграме, вызвать в меню команду newbot, далее по инструкциям получить токен доступа. Этот токен нужно сохранить в конфиденциальном месте, не показывать третьим лицам во избежание того, что кто-то может представиться вашим ботом. Далее потребуется включить возможность делиться игрой с друзьями через inline-запросы.
Затем нужно вызвать команду newgame и создать игру. Понадобится принять условия работы. Если нарушить эти правила — игру удалят с платформы. Запрещено:
Этапы работы с ботом:
Провести тестирование игры можно на коллегах. Важно вычислить баги и ошибки, внести доработки. К тестированию на финальных этапах можно привлечь клиентов из целевой группы, устроив розыгрыш призов.
Тестирование должно в себя включать UX. Нужно посмотреть и проконтролировать, как игра будет отображаться на разных экранах, вертикально и горизонтально. Если игра не срабатывает на экранах определенного типа, важно предупредить игроков об этом, прислать им уведомления, чтобы не вызывать негативной реакции.
Разработчики в этом кейсе решили создать игру в Телеграм, которая помогает развивать логику. Задумка была сделать игру такой, чтобы задачи закреплялись на то время. И что пока их решают, не появлялись новые, пока ответ игрока не наберет определенное количество баллов.
Сначала бот должен был давать задачи, их можно было пропускать, постоянно вызывая одну и ту же команду. Нашелся выход: сохранение текущей команды в базе: получая команду /get, бот дает задачу и сохраняет команду. Затем, перед тем как отреагировать на сообщения в чате, бот сравнивает команду, которую получил прямо сейчас, с последней командой в базе. Если они совпадают, бот никак не реагирует и вдобавок удаляет команду пользователя, чтобы она не висела в чате.
После запуска обнаружилось, что хэштеги не удобны для поиска. Задача может уйти вверх, листать до неё затруднительно и долго. Поэтому задачу бот закреплял сразу самостоятельно.
Для написания бота использовались Composer — стандарт при разработке на PHP, библиотека telegram-bot-sdk, symfony/dotenv для парсинга .env-файла. Composer позволяет скачивать сторонние библиотеки на проект и предоставляет механизм по автозагрузке классов. Вся работа с Composer происходит через консоль и в файле composer.json.
Файл app.php — точка входа в приложение, где вешается веб-хук. Это значит, что бот не будет постоянно опрашивать сервер на наличие обновлений; он их будет получать только тогда, когда они будут.
Затем нужно создать объекты всех нужных классов, проверить, в каком вы чате — приватном или супергруппе. Код можно разделить на независимые части. Настройки хранятся в файле .env, что позволяет пользователи вводить свои, и бот будет работать после создания всех нужных таблиц.
В кейсе команда Selectel создала игру, механика которой — построить башню из серверов. Цель — PR и реклама: среди клиентов-игроков проводился конкурс, те, кто построят от 100 этажей, участвуют в розыгрыше призов с мерчем.
В игре не была задействована физика, при которой пришлось бы подумать, как будут раскачиваться блоки на кране и башня. В качестве усложнения игры был добавлен летающий тиранозавр — брендовый персонаж Selectel.
Было отрисовано 3 персонажа и 3 локации. Стройка башни начиналась под землёй, затем шла в городе и после 50 блоков-этажей продолжалась в космосе. Фон был 23 000 пикселей: его пришлось разделять на 4 части, так как Android-смартфоны не справились с отрисовкой.
Для движения крана применялась растровая графика. Движение было заанимировано отдельно и вставлена уже готовая анимация. Для этого команда Selectel использовала спрайты — картинки, кадры анимации и спрайт-листы — наборы всех элементов графики. Загружалась картинка с несколькими спрайтами, это было экономичнее по ресурсам, чем грузить несколько картинок каждую отдельным файлом. В качестве сервера Selectel использовал свой вариант Shared Line.
С продвижением и рекламой есть определенные сложности. Не все знают о существовании игр в Telegram и их возможностях, несмотря на то что Телеграм-игры существуют уже больше 6 лет.
Пользователи ищут игры по ключевым словам в каталогах. Например, они могут забивать в поисковую строку название игры, либо ее жанр. Также пользователи могут узнать об игре, посещая каналы с раздачами, новостями.
Примеры таких каналов:
Основные способы продвижения, которые используют разработчики:
Другая сложность с маркетингом заключается в том, что в Телеграме трудно отслеживать статистику по пользователям, их данные. Этот мессенджер поддерживает анонимность. Даже с помощью инструментов парсинга можно собрать информацию по людям только из своих чатов и каналов, но не из чужих. Поэтому трудно проанализировать активность игроков, поведение пользователей в игре.
Но есть бот, который ведет лог взаимодействий: игра находится на сервере, любое взаимодействие игрока — команда на сервер. Другие способы получить статистику: использовать обобщенные числовые показатели, собирать обратную связь от аудитории.
Телеграм — международный мессенджер. Игра должна быть понятна всем пользователям. Если в планах стоит создать топовый проект, нужно задуматься о локализации минимум на 5 языков. Лучше ориентироваться не только на распространенные европейские языки вроде английского, французского, немецкого или испанского, но добавить португальский, персидский, арабский, так как на них говорит значительно большая часть населения планеты.
Можно столкнуться со сложностью в части развития проекта. Если в игре будут постоянные обновления, внедрения новых механик, важно собирать обратную связь от аудитории. Для этого потребуется игровой чат. Все пользователи разные, среди них может быть много неадекватных людей, которые пользуются анонимностью в Telegram. В итоге чатом может быть сложно управлять.
Аудиторию нужно сегментировать хотя бы по разным чатам и языкам. Это долгая работа, в результате которой можно выстроить сильное комьюнити вокруг бренда своей игры.
Идея началась с того, что команда хотела создать геймифицированный образовательный проект. По первой задумке игра должна была обучать начинающих программистов.
В течение первых 3 недель команда анализировала конкурентов, аудиторию, тренды, определялась с сеттингом. Для анализа конкурентов были рассмотрены Java Rush, LeetCode, CodeWars, Habitika, Жабабот, Mimo, Яндекс Практикум, Light Bot. Из этих проектов разработчики взяли «лучшие практики» и фишки. Смотрели на то, что мотивирует пользователей делиться контентом и приглашать друзей, с какими проблемами они сталкиваются, какие у аудитории предпочтения.
На следующем этапе, который занял примерно 5 недель, команда занималась проектированием основных механик, экранов, онбординга. Сначала механики отрисовывались в формате схем и экранов, но потом пришли к выводу, что это не удобно. У ботов и продуктов в Телеграме нет статичного экрана: экран — бесконечная лента, и подстраиваться нужно именно под нее.
Механики, которые придумала команда Dev’s Battle:
Онбординг — это этап, после которого пользователь принимает решение, играть или нет. Разработчики сделали онбординг в формате новеллы: пользователь должен был нативно пройти по всем шагам — создать персонаж, побиться с боссом.
На 6-15 неделе команда занималась разработкой MVP и основных механик. За 2 недели были собраны участники проекта: Middle Python Developer, опытный ментор-консультант. Использовали стек Python, Django, PostgreSQL, PyTelegrambotAPI, Nginx, grafana. Разработку вели по спринтам в Jira, первые 2-3 недели работали над базой данных.
После базы данных разработчики перешли к основным механикам, затем к онбордингу и дополнительным фишкам, которые решили запустить на стадии раннего MVP. На 10-й неделе уже была готовность к закрытому бета-тестированию, но выявилось много багов, которые устранялись в течение 5 последующих недель. Например, бесконечное количество карточек, падение крона, остановка бота, неверный расчет рейтинга.
Игра продвигалась с помощью посевов в ТГ-каналах, дополнительный PR шел через интервью с пользователями. В последующие недели разработчики внедряли новые фичи, делали расширенную аналитику, тестировали гипотезы, локализовали проект под бурж.
Результаты: 1269 зарегистрированных игроков спустя 3 недели с момента релиза. Всего на разработку и все этапы ушло 20 недель. Благодаря качественному онбордингу получилось 70% конверсии из входа в регистрацию и старт игры.
В чем основные проблемы при разработке Телеграм-игр и как их можно решать?
Сложности связаны с платформой Bot API. У Telegram есть 2 системы для связи их ботов с вашим сервером: Long Polling и Webhooks. Long Polling: сервер будет с определенным интервалом опрашивать Telegram на предмет наличия новых запросов, и при наличии обрабатывать, возвращая ответ Bot API. Webhooks: сервер говорит Telegram «если у тебя появятся какие-то запросы – кидай их вот на этот адрес». Для реализации бота на Webhooks необходим постоянный IP адрес и обязательно SSL сертификат. У Long Polling есть проблема: бот начинает тормозить, постоянно перезапускаться, причиняет неудобства игрокам. Лучше делать проект на Webhooks.
Другие сложности появляются, когда проект набирет масштабы. Бот может начать «подтупливать» при получении запроса. С нагрузкой на сервер это не связано: бот упирается в лимит Bot API по количеству одновременных запросов. С этой проблемой можно справиться, написав в поддержку Телеграм, попросить увеличить лимиты. Чаще всего бот упирается в лимиты по типу запросов callback на inline-кнопки. В случае моего проекта пришлось перерабатывать интерфейс.
Третий вид проблем — в среде разработки и коде, конкретно, в Python 3 и в том, как он работает с потоками. Каждый новый поток в Python 3 создается вместе с переменными окружения, занимая большое количество памяти. В игре полно таймеров, и когда они запускались в отдельных потоках, возникала утечка памяти. По мере роста игры утечка достигла безумных масштабов, сжирая оперативную память и подкачивая оставшуюся память SSD сервера. Это было решено созданием очередей таймеров, обрабатывающихся в одном потоке для каждого типа.
Из каких этапов состоит создание текстового квеста?
Технически, телеграм бот — это программа, которая запущена на вашем компьютере и общается с серверами телеграма через интернет. Можно представить, что при регистрации бота Телеграм выделяет нам почтовый ящик, через который мы можем получать сообщения от пользователей и отправлять их им.
Чтобы создать собственного бота, сперва его надо зарегистрировать с помощью @BotFather и далее следовать его инструкциям. После того, как мы введем название бота, @BotFather сообщит нам токен — пароль к нашему почтовому ящику.
Сначала нужно создать первого бота, добавить к нему пояснение, которое объяснит пользователю, что он делает. Затем нужно настроить взаимодействие с несколькими пользователями одновременно.
Удобнее всего хранить все данные, которые привязаны к конкретному пользователю в словаре. Ключом в этом словаре будет id пользователя, а значением — произвольные данные. Нужно использовать разные переменные хранения слова, чтобы сообщения от разных пользователей не путались.
Следующий этап — добавить несколько кнопок к сообщению и реагировать на их нажатия. На финальном этапе собирается текстовый квест полностью.
Игры в Телеграм не целесообразно рассматривать как конкурентов классических мобильных игр. Telegram-игры занимают свою отдельную нишу. Возможности ботов ограничены, не стоит ждать слишком продвинутого функционала и геймплея. В основном большинство игр направлены на то, чтобы скоротать время и создаются за 3-5 часов. Но при грамотном анализе трендов, аудитории можно создать масштабный популярный и востребованный проект.