Старший iOS-разработчик системного интегратора «КРОК» Андрей Шелудченко прислал в редакцию письмо о том, как один из недавних материалов AD вдохновил его на создание собственного бота для Telegram, и вкратце описал процесс разработки.
Здравствуй, дорогая редакция AD. Спасибо большое за ваши статьи. Они всегда вдохновляют меня на новые свершения. Именно поэтому я очень хочу поделиться с вашими читателями своей историей, которая произошла благодаря недавней статье «
18 бизнес-ботов для Telegram». Она будет интересна и, надеюсь, полезна всем, кто очень хочет написать своего бота, но еще не решился.
В последнее время все чаще слышу о появлении новых крутых
Telegram-ботов. Сам уже пользуюсь парочкой и понимаю, насколько это удобно. Так вот, я хотел поделиться и своей историей.
Как и, наверное, многие другие iOS-разработчики, после прочтения статьи на AD «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/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/setWebhook?url=https://www.your-website.com/getUpdatesFromTelegramBot
getUpdates: в отличие от предыдущего метода этот метод инициируется самим сервером. У него один параметр — offset — ID последнего апдейта (соответственно в первый раз отправляем 0). То есть, к примеру, можно поставить таймер на сервере, чтобы раз в минуту получать все обновления от своего бота, и каждый из них обрабатывать.
Ссылка: https://api.telegram.org/bot/getUpdates?offset=0
Итог
Таким образом, буквально за один день, мне удалось сделать своего первого бота, который возвращает пользователю рандомный вызов, взятый из базы споров Eristica. Попробуйте сами:
telegram.me/eristicabot
В планах на ближайшее будущее: добавить базу «Правд» и создать команды /gettruth и /getdare, чтобы такая игра стала полностью функциональной.
Буду рад ответить на вопросы по созданию бота в комментариях.
About the author