Как и обещали в предыдущем посте, в этом посте мы напишем своего бота для мессенджера Telegram. Этот мессенджер создал основатель ВКонтакте Павел Дуров. Telegram - чуть менее популярный аналог WhatsApp и Viber, однако более функциональный, в частности, позволяет создавать автоматических собеседников (ботов).
Нам потребуются:
1. Хостинг с PHP 5.4 (бот тестировался на 5.4, но должен работать на 5.3+).
2. Домен с SSL-сертификатом, доступный по HTTPS из внешней сети.
3. На хостинге должно быть доступно расширение CURL для PHP.
4. Базовые знания PHP.
Результат: бот для Telegram, который позволяет просмотреть содержимое папок на хостинге, например текстовые файлы в папках или картинки.
ЗАЧЕМ?
Указанный функционал бота приведен для примера, чем может быть полезен свой бот. А еще он может понадобиться для:
• мониторинга и управления вашими сервисами и сайтами на хостинге;
• при интеграции с сайтом - управления его контентом, например, ответы на комментарии - хотя в случае с Wordpress... уже есть готовые плагины :) НО! Сайты бывают разные;
• в случае портального решения для использования внутри компании - для уведомления сотрудников, для обмена контентом.
В любом из случаев, когда нет необходимости в очень сложных функциональных пользовательских интерфейсах ввода данных (таких как электронные таблицы), бот для Telegram предоставляет свой теплый ламповый текстовый интерфейс для интеграции с вашими системами. Вы делаете только логику - интерфейс уже есть. Впрочем, хватит уже о преимуществах...
Покажи мне код!Для тех, кто больше любит читать код, нежели текст, то он такой (кликните)
Чтобы создать бота, необходимо задать две переменные в начале файла. Одна - ссылка на бота, доступная Telegram, вторая - ключ (token), полученный от бота FatherBot, который регистрирует всех ботов в Telegram.
Принципиально, в данном случае код поделен на три части по две функции:
1. Часть, отвечающая за транспортный уровень обмена с сервером Telegram через CURL. Это функции curl_custom_postfields и exec_curl_request. На них я останавливаться не буду, пробегите глазами - это просто отправка http-запросов к API Telegram.
2. Часть, оборачивающая для удобства методы обращения к всё тому же API. Это функции api_request и api_request_file. Собственно, в них особой прикладной логики работы также нет - это просто кодирование-декодирование обмена с Telegram.
3. Функции handle_command и process_message собственно уже и содержат основную прикладную логику бота - что по какому запросу он делает. В нашем случае, он умеет 4 команды: pwd (показать директорию где сейчас), ls (вывести что есть в директории), cd directory (перейти в директорию directory), cat file (прислать содержимое файла file, и если это картинка - то как картинку).
В примере кода, бот умеет еще спрашивать кодовое слово, прежде чем дать доступ к указанным запросам. Поскольку бот всегда различает чаты, он может запоминать связанную только с этим чатом информацию (например, сохранять в файле текущую директорию пользователя, как это сделано в примере). Бот, как и любой обычный PHP-код, может обращаться к базам данных, другим PHP-скриптам, а также - раз он знает идентификатор чата - может и отправлять сообщения не только в ответ, но и по собственной инициативе (например, по расписанию, заданному на сервере).
Вам интересно было бы ежедневно получать графический отчет-картинку о состоянии вашего хостинга как сообщение в Telegram? Или может статистику посещений сайта? А может, у вас есть идеи получше? Пишите в комментариях.
P.S. Если вы хотите испытать бота из примера - тоже пишите в комментариях, я лично открою вам его имя :)