{ "author_name": "Konstantin Panphilov", "author_type": "self", "tags": ["\u0431\u043e\u0442\u044b","telegram"], "comments": 19, "likes": 17, "favorites": 9, "is_advertisement": false, "section_name": "default", "id": "9808", "is_wide": "1" }
Konstantin Panphilov
8 855

Письмо в редакцию: Как я за один день сделал игрового бота для Telegram

Старший iOS-разработчик системного интегратора «КРОК» Андрей Шелудченко прислал в редакцию письмо о том, как один из недавних материалов ЦП вдохновил его на создание собственного бота для Telegram, и вкратце описал процесс разработки.

Здравствуй, дорогая редакция ЦП. Спасибо большое за ваши статьи. Они всегда вдохновляют меня на новые свершения. Именно поэтому я очень хочу поделиться с вашими читателями своей историей, которая произошла благодаря недавней статье « 18 бизнес-ботов для Telegram». Она будет интересна и, надеюсь, полезна всем, кто очень хочет написать своего бота, но еще не решился.

В последнее время все чаще слышу о появлении новых крутых Telegram-ботов. Сам уже пользуюсь парочкой и понимаю, насколько это удобно. Так вот, я хотел поделиться и своей историей.

Как и, наверное, многие другие iOS-разработчики, после прочтения статьи на ЦП «18 бизнес-ботов для Telegram» я размышлял, какого бы интересного бота мне написать. Хотелось чего-то веселого и очень простого.

Идея для бота пришла после работы, когда мы с друзьями (приговорив пару бутылочек красного) играли в Truth or Dare («Правда или действие», может, знаете). Мы весело придумывали друг другу задания, типа «выпей молоко носом» или «разбей яйцо головой», но в какой-то момент фантазия начала заканчиваться, а игривое настроение — еще нет.

И тут я понял, какой Telegram-бот я хочу сделать. Основная идея была такой: пишешь в мессенджер /Truth или /Dare и получаешь на выходе интересную идею для вызова. Вернувшись домой, закатав рукава и открыв ноутбук, я взялся за дело.

Шаг 1: Источник

Первое, что нужно было решить — где взять готовую базу, чтобы создать бота прямо сейчас и не ждать, пока эта идея не придет другим. Ход конем. Написал письмо наудачу в техподдержку Eristica с описанием своей идеи и просьбой поделиться базой споров из их фичи Shake'n'Dare (если потрясти телефон — получаешь случайный спор).

Несмотря на довольно позднее время, отдел разработки ответил мне в течение часа (редкость в наши дни). Команде очень понравилась идея, и они предложили не просто скинуть мне все споры, а сделать для меня API, чтобы при обновлении их базы мне не приходилось перекачивать файл заново. Это было отличной новостью.

Шаг 2: Telegram API

Однако с API Telegram-бота все сложилось не так радужно, как мне казалось. Чтобы создать своего бота, нужно в Telegram зайти на @BotFather. Вводим команду /newbot. Далее нам предлагается придумать имя своему боту, затем UserName. В нашем случае это Eristica и Eristicabot.

Далее создаём список команд для нашего бота, пока что будет одна — getdare — get random dare from Eristica.

Шаг 3: Серверная часть

Чтобы начать использовать Telegram Bot API, нам понадобится token нашего бота.

Чтобы его получить, введите в @BotFather команду /token. Все запросы к API Telegram имеют следующий вид: @https://api.telegram.org/bot<token>/METHOD_NAME

Вот пример запроса с сайта Телеграм: @https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

У Telegram есть два варианта, как реализовать связь между сервером и ботом: setWebHook и getUpdates.

setWebHook: этот метод цепляет вашего бота к функции на сервере, и каждый раз, когда происходит какое-то действие в боте, Telegram вызывает эту функцию и передаёт в неё объект типа Update.

Далее сервер этот запрос обрабатывает, к примеру, формирует сообщение для ответа, и посредством функции sendMessage может отправить это сообщение в конкретный чат (ID чата мы получаем, когда Telegram дергает наш сервер из объекта update).

Небольшой проблемой, с которой я столкнулся при использовании данного метода, была обязательная поддержка SSL-шифрования на вашем бэкенде.

Ссылка: @https://api.telegram.org/bot<token вашего бота>/setWebhook?url=https://www.your-website.com/getUpdatesFromTelegramBot

getUpdates: в отличие от предыдущего метода этот метод инициируется самим сервером. У него один параметр — offset — ID последнего апдейта (соответственно в первый раз отправляем 0). То есть, к примеру, можно поставить таймер на сервере, чтобы раз в минуту получать все обновления от своего бота, и каждый из них обрабатывать.

Cсылка: @https://api.telegram.org/bot<token вашего бота>/getUpdates?offset=0

Итог

Таким образом, буквально за один день, мне удалось сделать своего первого бота, который возвращает пользователю рандомный вызов, взятый из базы споров Eristica. Попробуйте сами: telegram.me/eristicabot

В планах на ближайшее будущее: добавить базу «Правд» и создать команды /gettruth и /getdare, чтобы такая игра стала полностью функциональной.

Буду рад ответить на вопросы по созданию бота в комментариях.

#боты #Telegram

Статьи по теме
18 бизнес-ботов для Telegram: финансы, путешествия, языки
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Голосовой помощник выкупил
компанию-создателя
Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-158433683", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxbwd&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&fmt=1&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } } ]