Цель проекта: изучить базовые возможности чат-ботов телеграм.
Реализованные функции:
- Создание меню команд
- Создание inline-клавиатуры
- Передача сообщений в бот
- Получение сообщений, команд и callbacks
- Создание опросников и получение графических результатов
- Фиксация всей деятельности в базе данных
- Удаление сообщенний из бота
- Запуск веб-приложения телеграм
- Коммуникация с веб-приложением
Бот доступен по ссылке
Использовались библиотеки: irazasyed (базовая для работы с telegram), jpgraph (для создания графика), web application сделано в виде обычной HTML-страницы, в нее добавлены библиотеки JQuery и JQuery UI.
Бот обслуживается программой на PHP, которая работает у меня на хостинге в окне (screen) операционной системы. Запрос сообщений на сервере происходит раз в 5 секунд. Я решил сделать пока только один этот вариант, чтобы не терять сообщения при сбоях программы или связи. Работает следующая общая схема:
Алгоритм такой: PHP-скрипт раз в 5 секунд запрашивает новые обновления (updates) на сервере Telegram через его API, реализовано три команды в меню ввода: краткая информация о боте, тестовый опросник и запуск web application. Все сообщения от сервера записываются в базу данных, также записываются ответы бота (то есть обработчика команд). Это позволяет на регулярной основе удалять из бота сообщения, которые там находятся более 5 минут.
|
Сначала была сделана попытка реализовать опросник на основе poll Telegram, но оказалось, что такие опросники работают только в одном чате, то есть в группах или каналах, в простом боте опросник будет состоять из одного ответа конкретного пользователя и получить доступ к ответам других пользователей нельзя, также нельзя выдать результат опроса в виде графика, то есть доступен только один вариант: показ опросника, ответ пользователя и показ графика из одного показателя со значением 100%. Пришлось сделать полностью кастомный опросник и принимать ответы через inline-клавиатуру. В этом варианте пользователю разрешено вывзать опросник сколько угодно раз. Создание графика сделано с помощью библиотеки jpgraph. Пользователь не сможет вызвать опросник еще раз, если у него открыт предыдущий и он за 5 минут не был автоматически удален. |
Веб-приложение запускается через inline-keyboards, то есть кнопка запуска показывается в области сообщений. Это сделано специально, так как при вызове приложения через клавиатуру в области ввода туда не передается информация о пользователе и объект initData. Кроме этого на всякий случай в приложение передается chat_id и ссылка на скрипт API для обработки действий внутри приложения. Веб-приложение представляет собой обычную HTML-страницу, но вызываться она должна через HTTPS. | |
Дополнительный скрипт PHP для обеспечения функционала приложения необходим из-за того, что практически не существует связи между приложением и ботом. В библиотеке telegram javascript есть метод sendData(), но он позволяет только отправить некий текст в область ввода интерфейса и закрывает приложение, кроме этого, метод срабатывает только когда приложение вызывается через кнопку в области ввода, то есть при таком раскладе в приложение не поступает сведений о пользователе. Таким образом, если нужно что-то отдать в бот из приложения, то надо вызвать скрипт с API, он запишет сообщение в базу и отправит в телеграм сообщение, которое будет показано в боте. Если не записывать данные в базу, то это сообщение не будет получено основным обработчиком, такие сообщения telegram не передает в updates. Каких-то выдающихся коммерческих возможностей у веб-приложения я не обнаружил, это обычная веб-страница. У библиотеки javascript много возможностей по использованию смартфона, все остальные возможности для меня в этом исследовании пока не открылись. |