Телеграммбот построения маршрута с использованием общественного транспорта города Киева
Скачать 2.02 Mb.
|
String Нет курсивный, фиксированной или встроенные в нашего disable_web_page_ preview Boolean Нет предварительный для ссылок в этом InlineKeyboard Markup или ReplyKeyboard Markup или ReplyKeyboard Hide replay_markup Нет Расширенные поиск интерфейса. возможности Объект типа User предоставляет информацию о пользователе Telegram. Поля типа приведены в таблице 5.6.7 Письмо ИТ51.320БАК.002 ПО 37 Изм. Письмо № докум. Подпись Дата Таблица 5.6.7 – Поля объекта User Поле Id first_name last_name Username Тип Integer String String String Описание Уникальный идентификатор бота или пользователя Имя бота или пользователя Не обязательно. Фамилия бота или пользователя Не обязательно. Username бота или пользователя Объект типа Chat представляет собой информацию о чате. Поля типа приведены в таблице 5.6.8 Таблица 5.6.8 – Поля объекта Chat Поле Id Тип Integer Описание Уникальный Абсолютное значение не превышает 1e13 Тип чата: а) private; б) group; в) supergroup; г) channel; Не обязательно. Название для каналов или групп Не обязательно. Username, для чатов и некоторых каналов Не обязательно. Имя собеседника в чате Нет собеседника в чате Не обязательно. True, если все чат-участники являются администраторами. идентификатор чата. Type Enum Title String Username String first_name String last_name String Обязательно. Фамилия all_members_are_adminis trators Boolean Письмо ИТ51.320БАК.002 ПО 38 Изм. Письмо № докум. Подпись Дата Объект типа Message представляет собой информацию о сообщениях. Поля типа приведены в таблице 5.6.9. Таблица 5.6.9 – Поля объекта Message Поле message_id Тип Integer Описание Уникальный сообщение Не обязательно. Отправитель. Может быть пустым в каналах. Дата отправки сообщения (Unix time) Диалог, в котором было отправлено сообщение Не обязательно. Для пересланных сообщений: отправитель оригинального сообщения Не обязательно. Для отправки сообщений: дата отправки сообщения. Не обязательно. Ответ: оригинальное сообщение. Следует обратить внимание, что объект Message в этом поле не будет содержать дополнительных полей reply_to_message, даже если он сам является ответом. Не обязательно. Для текстовых сообщений: текст сообщения, 0-4096 символов. идентификатор From User Date Integer Chat Chat forward_from User forward_date Integer reply_to_message Message Text String Письмо ИТ51.320БАК.002 ПО 39 Изм. Письмо № докум. Подпись Дата Продолжение таблицы 5.6.9. Поле Entities Тип Массив с MessageEntity Тип Document Описание Не обязательно. Для текстовых сообщений: особое существо в тексте сообщения. Описание Не обязательно. Информация о фото с Не обязательно. Доступные размеры фото Не обязательно. Информация о стикерах Не обязательно. Информация о видеозаписи Не обязательно. Информация о голосовом сообщении Не обязательно. Подпись к файлу, фото или видео, 0-200 символов Не обязательно. Информация об отправленном контакте. Не обязательно. Информация о местонахождении. Не обязательно. Информация о местоположении на карте. Не обязательно. Информация о пользователе, добавленном в группу. Не обязательно. Информация о пользователе, которого удалили. Поле Document Photo массив PhotoSize Sticker Sticker Video Video Voice Voice Caption String Contact Contact Место Место Venue Venue new_chat_member User left_chat_member User Письмо ИТ51.320БАК.002 ПО 40 Изм. Письмо № докум. Подпись Дата Продолжение таблицы 5.6.9. Поле new_chat_title Тип String Описание Не обязательно. Название группы было изменено на поле. с Не обязательно. Фото группы было изменено на это поле. Описание Нет сообщение: группа создана Нет Обязательно. Сервисное сообщение: супергруппа создана. Нет Обязательно. Сервисное сообщение: канал создан. Не обязательно. группа превращена в супергруппу указанным идентификатором. Не превышает 1e13 Не обязательно. Cупергруппа была создана из группы с указанным идентификатором. Нет 1e13. Нет сообщение было Следует обратить внимание, что объект Message в этом поле не будет содержать дополнительные поля reply_to_message, даже если он сам является ответом new_chat_photo массив PhotoSize Тип Поле group_chat_created True Обязательно. Сервисное supergroup_chat_created True channel_chat_created True была с migrate_to_chat_id Integer migrate_from_chat_id Integer превышает Обязательно. Указанное прикреплен. pinned_message Message Письмо ИТ51.320БАК.002 ПО 41 Изм. Письмо № докум. Подпись Дата Объект типа ReplyKeyboardMarkup представляет собой клавиатуру с опциями ответа. Поля типа приведены в таблице 5.6.10. Таблица 5.6.10 – Поля объекта ReplyKeyboardMarkup Поле Тип массив массивов с KeyboardButton Описание Массив рядов кнопок, каждый из которых является массивом объектов KeyboardButton Keyboard Нет подогнать количество кнопок (сделать его меньше, если кнопок мало). По умолчанию False, то есть клавиатура всегда такого же размера, как стандартная клавиатура устройства. Не обязательно. скрыть клавиатуру использование (по нажатию на кнопку). Ее по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчанию False. Не обязательно. Этот параметр требуется для показа клавиатуры только некоторым пользователям. Пример: пользователь отправляет запрос на изменение языка бота. Бот отправляет клавиатуру со списком языков, видимую только этому пользователю. Обязательно. высоту Указывает клавиатуры клиенту под resize_keyboard Boolean Указывает клиенту после one_time_keyboard Boolean Selective Boolean Письмо ИТ51.320БАК.002 ПО 42 Изм. Письмо № докум. Подпись Дата Объект типа KeyboardButton является еще одной кнопкой в ответной клавиатуре. Для обычных текстовых кнопок этот объект может изменяться на строку, содержащую текст на кнопке. Поля типа приведены в таблице 5.6.11. Таблица 5.6.11 – Поля объекта KeyboardButton Поле Тип Описание Текст опциональные поля не использованы, то при нажатии на кнопку этот текст будет отправлен боту как простое сообщение. Не обязательно. Если значение True, то при нажатии на кнопку бота отправится пользовательский контакт с его номером телефона. Доступно только в диалогах с ботом. Не обязательно. Если значение True, то при нажатии на кнопку бота отправится местоположение пользователя. Доступно только в диалогах с ботом. на кнопке. Если ни одно с Text String request_contact Boolean request_location Boolean Объект InlineKeyboardMarkup представляет собой встроенную клавиатуру, которая появляется под соответствующим сообщением. Поля типа приведены в таблице 5.6.12. Объект типа InlineKeyboardButton – это еще одна кнопка встроенной клавиатуры. Мы обязательно должны задействовать ровно одно опциональное поле. Поля типа приведены в таблице 5.6.13. Письмо ИТ51.320БАК.002 ПО 43 Изм. Письмо № докум. Подпись Дата Таблица 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 Изм. Письмо № докум. Подпись Дата называется files, сохраняются имена файлов, а также их метаданные, например размер. А в другой коллекции, которая называется chunks, в виде небольших сегментов хранятся данные файлов обычно сегментами по 256 Кб. Письмо ИТ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 Изм. Письмо № докум. Подпись Дата 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). |