Мне интересно было познакомиться с Bot API, который используется в telegram, и в прошлые выходные я написал несложного бота для моего сайта.
Бот доступен по ссылке http://t.me/shrarubot или можно найти по имени в «телеге» — shra.ru.
Команды бота
Бот понимает несколько полезных команд, которые запрашивают данные с сайта.
/lastposts [N=10]
Выдаёт список последних записей блога, где N — кол-во элементов. По умолчанию это 10 последних записей.
/find KEYWORD
Поиск записей по ключевому слову. Выдаёт не более 10 записей.
/read POSTID
Выводит текст записи с указанным POSTID. Знать айди не требуется, т.к. первые две команды (lastposts и find) формируют их автоматически.
Не обязательно начинать команду с «/», т.к. я обрабатываю все текстовые сообщения, а не только те, что посланы как команды.
Нюансы
Как выяснилось, телеграмм поддерживает для HTML-текста лишь несколько тегов: <b>, <i>, <code>, <pre>, <em>, <a>, <strong>. Потому и список не вывести красиво, и картинки в статье показать не получается. (Над последним моментом можно ещё поработать — я думаю конвертировать картинки в ссылки.)
Вторая вещь, с которой я, возможно, не разобрался — это описание команд, которые имеют дополнительные параметры. Мой бот их понимает, т.к. со стороны сервера я могу анализировать приходящие сообщения сколь угодно сложным способом, но задать описание команд для пользователя в диалоге с @botFather я могу лишь вот так:
Т.е. можно указать описания команд без параметров. В итоге пользоваться подсказкой команд в чате получается весьма ограничено. Я ожидал чего то более крутого.
Команды подсвечиваются как ссылки в тексте сообщений. Но они не могут содержать пробелов.
Мой бот понимает все варианты из тех, что выше на скриншоте, но чтобы сформировать команду в виде кликабельной ссылки для пользователя мне приходится использовать вариант 3.
Wodpress специфика
Т.к. блог работает на WP, то архитектурно пришлось реализовывать это в виде плагина. Мне хотелось учесть возможность подключения в будущем нескольких ботов к одному сайту, и я оформил обработку каждого бота в виде отдельного php класса.
Проработкой архитектуры стал shrarubot, необходимый только для того, чтобы познакомиться и обкатать технические моменты, написать низкоуровневые классы, для приема и отправки сообщений, различные сервисные функции и т.п.
Данные от ‘телеги’ плагин принимает как WP ajax запросы.
Другие боты
Тематика с telegram-ботом меня заинтересовала как одна из идей реализации своего игрового проекта. Я давно хочу попробовать написание текстовой адвентюры.
Абсолютно точно, что можно обойтись и без ‘телеги’, но в контейнере сайта — текстовая адвентюра выглядит как то слишком просто и неинтересно. Много лишних элементов, которые принадлежат дизайну сайта, отвлекающих от игры.
Ясно, что возможно сделать особый дизайн специально для страницы с игрой, но слишком много мелочей и нюансов, которые мне не нравятся. И это меня отталкивает от реализации.
А выполненная в виде telegram bot-а — где нет ничего лишнего, а только диалог с ботом — игра смотрится иначе. Это как раз тот контейнер, оболочка, в которой есть только то, что нужно.
Кроме того, иногда меня спрашивают, не мог бы я написать им telegram-бота? Сейчас уже, возможно, возьмусь за подобный заказ.