Файл: Телеграммбот построения маршрута с использованием общественного транспорта города Киева.pdf
Добавлен: 12.01.2024
Просмотров: 200
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Таблица 5.6.12 – Поля объекта InlineKeyboardMarkup
Поле
Тип
Описание
Массив строк, каждая из которых является массивом объектов
InlineKeyboardButton.
inline_keyboard
Массив
InlineKeyboardButton массивов с
Таблица 5.6.13 – Поля объекта Inline KeyboardButton
Поле
Text url
Тип
String
String
Описание
Текст на кнопке
Не обязательно. URL, который откроется при нажатии на кнопку
Не обязательно. Данные, которые будут отправлены callback_query нажатие на кнопку.
Не обязательно. Если этот параметр задан, то при нажатии кнопки дополнение предложит пользователю выбрать любой чат, откроет его и вставит в поле ввода сообщения юзернейм бота и определенный запрос для встроенного режима.
Если отправлять пустое поле, то будет вставлен только юзернейм бота.
callback_data
String в
при switch_inline_query
String
Письмо
ИТ51.320БАК.002 ПО
44
Изм.
Письмо
№ докум.
Подпись
Дата
Продолжение таблицы 5.6.13
Тип
Поле
Описание
Нет установлено,
кнопки введет имя бота и указан встроенный запрос в поле ввода текущего чата.
Может быть пустым, и в этом вставлено пользователя бота.
Описание игры, которая будет запущена, когда пользователь нажмет кнопку.
Обязательно.
нажатие
Если switch_inline_query_current_chat String случае только будет имя callback_game
CallbackGame
Примечание: Этот тип кнопки всегда первой первой строке.
должен кнопкой быть в
Письмо
ИТ51.320БАК.002 ПО
45
Изм.
Письмо
№ докум.
Подпись
Дата
6 БАЗА ДАННЫХ – MONGODB
MongoDB – это база данных, которая является документоориентированной с открытым исходным кодом и не требует описания схем таблиц. Главные черты и возможности:
а) поддержка отказоустойчивости и масштабируемости:
б) асинхронная репликация, набор реплик и распределения базы данных по узлам; в)
JSON-подобная схема хранения данных;
г) эффективное хранение больших объектов, административный интерфейс, серверные функции, Map/Reduce и прочее;
д) использование Javascript в качестве языка для формирования запросов; е) профилирование запросов;
ж) широкий набор атомарных операций над данными (условный поиск, сложная вставка/обновление и т.п.);
з) разные типы данных (в том числе поддержка массивов); поддержка индексов (B-Tree);
и) полнотекстовый поиск, в том числе на украинском языке, с поддержкой морфологии;
к) журнал операций, изменяющих данные в базе данных.
MongoDB предлагает документоориентированную модель данных в отличие от реляционных баз данных, благодаря чему она работает в разы быстрее, имеет лучшую масштабируемость и ее легче использовать. Однако, учитывая все недостатки традиционных баз данных и преимущества MongoDB, важным пониманием является то, что задачи бывают разные и методы их решения бывают также разные.
В определенной ситуации MongoDB действительно способна улучшить производительность программы, например возьмем ситуацию, которая существует потребность хранить сложные по структуре данные. В другой ситуации лучше будет использовать традиционные реляционные базы данных.
Письмо
ИТ51.320БАК.002 ПО
46
Изм.
Письмо
№ докум.
Подпись
Дата
MongoDB может представлять не только единственную базу данных, находящуюся на одном физическом сервере. Функциональность MongoDB позволяет разместить несколько баз данных на нескольких физических серверах, и эти базы смогут легко обмениваться данными и сохранять целостность.
В процессе создания телеграмма была спроектирована схема взаимодействия пользователя с базой данных, которая дает ответы на его сообщение (рисунок 6.1).
Рисунок 6.1 – Схема взаимодействия пользователя с базой данных
Вот несколько важных свойств этой базы данных:
а) формат данных в MongoDB. Одним из популярных стандартов обмена данными и их хранения является JSON (JavaScript Object Notation). JSON эффективно описывает сложные по структуре данные. Способ хранения данных в
MongoDB в этом плане похож на JSON, хотя формально JSON не используется. Для хранения в MongoDB применяется формат, который называется BSON или сокращение от binary JSON. BSON позволяет работать с данными быстрее: быстрее производится поиск и обработка. Хотя следует отметить, что BSON в отличие от хранения данных в формате JSON имеет небольшой недостаток: в целом данные в JSON-формате занимают меньше места, чем в формате BSON, с другой стороны, данный недостаток с лихвой окупается скоростью;
Письмо
ИТ51.320БАК.002 ПО
47
Изм. Письмо
№ докум.
Подпись
Дата
б) кроссплатформенность. MongoDB написана на C++, поэтому ее легко перенести на разные платформы. MongoDB может быть развернута на платформах Windows, Linux, MacOS, Solaris. Можно скачать исходный код и самому скомпилировать MongoDB, но рекомендуется использовать библиотеки с официального сайта;
в) коллекции. Если в традиционном мире SQL есть таблицы, то в мире
MongoDB есть коллекции. И если в реляционных БД таблицы хранят однотипные жестко структурированные объекты, то в коллекции могут содержать самые разные объекты, имеющие разную структуру и разный набор свойств;
г) репликация. Система хранения данных в MongoDB представляет набор репликов. В этом наборе имеется основной узел и может быть набор вторичных узлов. Все вторичные узлы сохраняют целостность и автоматически обновляются вместе с обновлением главного узла. И если основной узел по каким-то причинам выходит из строя, то один из вторичных узлов становится главным;
д) простота в использовании. Отсутствие жесткой схемы базы данных и в связи с этим потребности при малейшем изменении концепции хранения данных вновь создавать эту схему значительно облегчают работу с базами данных MongoDB и последующим их масштабированием. Кроме того, экономится время разработчиков.
Им больше не нужно думать о новом создании базы данных и тратить время на построение сложных запросов;
е) GridFS. Одной из проблем при работе с любыми системами баз данных есть сохранение данных большого размера. Можно хранить данные в файлах, используя разные языки программирования. Некоторые СУБД предлагают специальные типы данных для хранения бинарных данных в БД (например, BLOB в MySQL). В отличие от реляционных СУБД MongoDB позволяет хранить разные документы с разным набором данных, однако при этом размер документа ограничивается 16 Мб. Но MongoDB предлагает решение – специальную технологию GridFS, которая позволяет хранить данные по размеру больше, чем
16 Мб. Система GridFS состоит из двух коллекций. В первой коллекции, которая
Письмо
ИТ51.320БАК.002 ПО
48
Изм. Письмо
№ докум.
Подпись
Дата
в) коллекции. Если в традиционном мире SQL есть таблицы, то в мире
MongoDB есть коллекции. И если в реляционных БД таблицы хранят однотипные жестко структурированные объекты, то в коллекции могут содержать самые разные объекты, имеющие разную структуру и разный набор свойств;
г) репликация. Система хранения данных в MongoDB представляет набор репликов. В этом наборе имеется основной узел и может быть набор вторичных узлов. Все вторичные узлы сохраняют целостность и автоматически обновляются вместе с обновлением главного узла. И если основной узел по каким-то причинам выходит из строя, то один из вторичных узлов становится главным;
д) простота в использовании. Отсутствие жесткой схемы базы данных и в связи с этим потребности при малейшем изменении концепции хранения данных вновь создавать эту схему значительно облегчают работу с базами данных MongoDB и последующим их масштабированием. Кроме того, экономится время разработчиков.
Им больше не нужно думать о новом создании базы данных и тратить время на построение сложных запросов;
е) GridFS. Одной из проблем при работе с любыми системами баз данных есть сохранение данных большого размера. Можно хранить данные в файлах, используя разные языки программирования. Некоторые СУБД предлагают специальные типы данных для хранения бинарных данных в БД (например, BLOB в MySQL). В отличие от реляционных СУБД MongoDB позволяет хранить разные документы с разным набором данных, однако при этом размер документа ограничивается 16 Мб. Но MongoDB предлагает решение – специальную технологию GridFS, которая позволяет хранить данные по размеру больше, чем
16 Мб. Система GridFS состоит из двух коллекций. В первой коллекции, которая
Письмо
ИТ51.320БАК.002 ПО
48
Изм. Письмо
№ докум.
Подпись
Дата
называется files, сохраняются имена файлов, а также их метаданные, например размер. А в другой коллекции, которая называется chunks, в виде небольших сегментов хранятся данные файлов обычно сегментами по 256 Кб.
Письмо
ИТ51.320БАК.002 ПО
49
Изм.
Письмо
№ докум.
Подпись
Дата
Письмо
ИТ51.320БАК.002 ПО
49
Изм.
Письмо
№ докум.
Подпись
Дата
7 TELEGRAM
Telegram – современный популярный сервис по обмену информацией.
Кроме версии для браузеров, существуют также версии для ОС Linux, Mac и
Windows, а также для популярных мобильных ОС, таких как Android, iOS и
Windows Phone.
Одной из главных функциональных возможностей этого сервиса является возможность создания сторонних приложений, так называемых «ботов», которые могут взаимодействовать с пользователями, отвечать на любые пользовательские команды, а также отправлять им сообщения. К примеру, уже сегодня существует множество ботов для получения новостей, последнего прогноза погоды, для создания заметок и напоминаний, для проведения банковских операций и т.д.
Сообщения, команды и запросы, отправленные пользователями, передаются на сервер, а именно разработчикам поисковых роботов. Сервер
Telegram является только посредником и предоставляет свой API для разработчиков, доступный с помощью HTTPS-интерфейса, предлагающего упрощенную версию API Telegram, так называемый Bot API. Для того чтобы начать взаимодействовать с ботом, пользователь должен сначала добавить его к себе в чат или в группу. или отправляя команды из чата непосредственно какому- либо боту, используя символ @ перед его именем в сообщении с командой.
Детальнее о ботах можно почитать на официальном сайте Telegram, в данной работе нас интересует только возможность добавления бота в чат или группу, после чего он сможет посылать туда оповещения при любых отклонениях анализируемых метрик.
Следует уточнить этап создания нового бота и использования API, предоставляемого
Telegram. Согласно инструкции с официального сайта, для создания бота минимально необходимы следующие пункты:
а) добавить бота «BotFather» к себе в чат, позволяющий управлять созданием и настройкой новых ботов внутри Telegram;
Письмо
ИТ51.320БАК.002 ПО
50
Изм.
Письмо
№ докум.
Подпись
Дата
б) отправить боту команду «/newbot», после чего тот запросит полное и короткое имя создаваемого бота (полное имя используется для отображения пользователю названия бота в заголовке чата, короткое имя для ссылки быстрых команд) и сгенерирует уникальный токен авторизации, который потребуется для идентификации бота и взаимодействия через TelegramAPI при отправке запросов.
Письмо
ИТ51.320БАК.002 ПО
51
Изм.
Письмо
№ докум.
Подпись
Дата
Письмо
ИТ51.320БАК.002 ПО
51
Изм.
Письмо
№ докум.
Подпись
Дата
8 ТЕСТИРОВАНИЕ СИСТЕМЫ
Тестирование телеграмм бота производилось вручную. После каждого этапа разработки выполнялось тестирование работоспособности по заранее подготовленным тест-кейсам, которые были составлены при определении целей разработки и используемых инструментов.
Работа с Telegram ботом:
а) скорость отклика бота на сообщение о начале работы; б)корректная обработка сообщений разного типа от пользователя. в)корректное отображение диалога;
г)обработка нажатия на клавишу отправки сообщения; д) скорость отображения ответа после того, как пользователь написал сообщение;
е) скорость работы базы данных; ж) оценка корректности ответов.
Тестирование бота производилось на мобильном устройстве Apple Iphone 7 Plus со следующими техническими характеристиками.
а) экран: 5,5”, IPS LCD, 1920х1080, мультитач; б) процессор: Apple A10 Fusion, 4х1;
в) операционная система: iOS 12.1.4; г) оперативная память: 3 ГБ;
д) встроенная память: 128 ГБ; е) навигация: GPS;
ж) Telegram: Telegram v 5.7.
После подключения к чату пользователю доступна только одна команда
– start. Отправив эту команду, в ответ получаем основную информацию о ботах (рисунок 8.1).
Письмо
ИТ51.320БАК.002 ПО
52
Изм.
Письмо
№ докум.
Подпись
Дата
Рисунок 8.1 – Начало работы с ботом
После этого у нас появляется возможность отправить свое местонахождение, нажав кнопку Location или отправив команду /location. В свою очередь, бот в целях безопасности запросит разрешение на получение информации о местонахождении пользователя (рисунок 8.2).
1 2 3 4 5
Письмо
ИТ51.320БАК.002 ПО
53
Изм.
Письмо
№ докум.
Подпись
Дата
ИТ51.320БАК.002 ПО
53
Изм.
Письмо
№ докум.
Подпись
Дата
Рисунок 8.2 – Запрос на доступ к геопозиции
Как только пользователь согласится на получение ботом геопозиции, бот автоматически будет искать все возможные остановки общественного транспорта в радиусе 500 метров.
Введя адрес, который нужен пользователю, бот будет искать все возможные остановки общественного транспорта и отправит все найденные варианты в чат (рисунок 8.3).
Письмо
ИТ51.320БАК.002 ПО
54
Изм.
Письмо
№ докум.
Подпись
Дата
Рисунок 8.3 – Ответ бота по запросу
Также бот предоставляет возможность заранее видеть, какой общественный транспорт останавливается на той или иной остановке.
При выборе остановки общественного транспорта мы получаем информацию об ожидаемом времени прибытия общественного транспорта
(рисунок 8.4).
Письмо
ИТ51.320БАК.002 ПО
55
Изм.
Письмо
№ докум.
Подпись
Дата
Рисунок 8.4 – Подробная информация об остановке
Письмо
ИТ51.320БАК.002 ПО
56
Изм.
Письмо
№ докум.
Подпись
Дата
9 ОПИСАНИЕ СОБСТВЕННОЙ РЕАЛИЗАЦИИ
В соответствии с заданием дипломного проекта и в соответствии с рассмотренными подходами было решено с помощью средств TeleBot, CherryPy и
Requests на языке программирования Python создать телеграмм-бот, который будет предоставлять необходимую информацию.
Основные аспекты, которые планируется реализовать в ходе выполнения дипломного проекта:
а) получение запроса пользователя; б) обработка запроса пользователя;
в) при необходимости уточнить некоторые аспекты запроса;
г) в соответствии с обработанным запросом выдать необходимую информацию пользователю;
д) предусмотреть реакцию бота на непредвиденные запросы; Также при возможности рассмотреть и реализовать следующие аспекты:
а) создание базы данных общественного и остановок; б) получение координат местонахождения пользователя; в) предложить несколько вариантов остановок и маршрутов.
Более подробно опишем каждый из аспектов. Мы уверены, что пользователь захочет задать свой вопрос на естественном языке, или выбрать из предложенных нами вариантов, далее это сообщение будет передаваться в сервис, с помощью которого мы сможем получить необходимый нам контекст сообщения, затем эта информация будет передаваться в нашу программу, в которой мы будем определять что делать с этим сообщением, сразу предоставлять информацию, или нужно задать определенные уточняющие вопросы, процесс уточнения может повторяться до тех пор, пока мы не получим необходимую информацию для выдачи максимально полного ответа для пользователя, после завершения процесса получения запроса пользователя и его анализа, мы присылаем ему необходимую информацию.
Письмо
ИТ51.320БАК.002 ПО
57
Изм.
Письмо
№ докум.
Подпись
Дата