Uploaded by Bogdan Nesatiy

Otchet Kasparov A V IVTb-20-1-o

advertisement
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«СЕВАСТОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт информационных технологий
Кафедра «Информационные технологии и компьютерные системы»
№
Дата
Подпись
поступления
отв. за
на кафедру регистрацию
Подпись
преподавателя
ОТЧЕТ
о производственной (эксплуатационной) практике
в __ ГАУ "Цифровой Севастополь - МФЦ в Г. Севастополе" __
(наименование организации)
Выполнил Каспаров.А.В_____________
(Фамилия И.О. обучающегося)
ИВТ/б-20-1-о___________
(шифр группы)
Направление/ специальность 09.03.01
Информатика и вычислительная техника
(код, наименование)
Руководитель практики от Университета
доцент кафедры ИТиКС______
(должность)
Волкова Т.В.____________
(Фамилия И.О. руководителя)
Севастополь
2023 г.
2
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«СЕВАСТОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт информационных технологий ______________________________________________
Кафедра «Информационные технологии и компьютерные системы»______________________
Направление подготовки __09.03.01 Информатика и вычислительная техника
УТВЕРЖДАЮ
Зав. кафедрой ИТиКС
__________ Д.В.Моисеев
«___» _________ 2023 г.
ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ
по производственной (эксплуатационной) практике
Студент гр. ИВТ/б-20-1-о_________Каспарова Артема Витальевича__________________________
Тема практики __«Изучение современных IT-технологий. Разработка и эксплуатация__________
программного обеспечения» ____________________________________________________________
Руководитель практики _Волкова Татьяна Викторовна, к.т.н., доцент________________________
Содержание задания (по пунктам):
1.а.
Ознакомиться с задачами и технологиями разработки и тестирования программного
обеспечения, реализуемыми на современных IT-предприятиях. _______________________________
1.б. Изучить IT-технологии, применяемые для автоматизации технологических процессов и
документооборота на предприятиях.______________________________________________________
2. Выполнить
практическое
задание
по
разработке
IT-продукта
(программного
блока).______________________________________________________________________________
3.Разработать соответствующие программные документы.___________________________._______
Вариант№10
Структурные единицы отчета по практике:
Титульный лист
Индивидуальное задание на практику
Содержание
Введение
1. Постановка задачи на проектирование программного блока
2. Техническое задание на проектирование программного блока
3. Описание программы
4. Руководство программиста
5. Программа и методика испытаний
Заключение
Библиографический список
Приложение А
3
ГРАФИК
прохождения производственной (эксплуатационной) практики
Дата,
время
Место и/или телефон
1.
03.07.2023
Вокзальная 10, Севастополь
2.
03.07.2023
№
пп
Вокзальная 10, Севастополь
Вокзальная 10, Севастополь
3.
03.07.2023
7.
04.07.2023 Вокзальная 10, Севастополь
05.07.2023
06.07.2023 Вокзальная 10, Севастополь
08.07.2023
10.07.2023 Вокзальная 10, Севастополь
11.07.2023
Вокзальная 10, Севастополь
12.07.2023
8.
13.07.2023
9.
14.07.2023
15.07.2023
4.
5.
6.
A-101
A-101
Вид работ
Установочное
собрание по практике.
Инструктаж по
технике безопасности
Получение задания на
практику и
методических
рекомендаций
Выполнение п. 1 инд.
задания
Выполнение п. 2 инд.
задания
Выполнение п. 3 инд.
задания
Оформление
технического отчета
по практике
Представление
технического отчета
по практике на
кафедру
Защита технического
отчета по практике
Примечание
Родюкова.Е.В
Родюкова.Е.В
Форма защиты
определяется
кафедрой
Дата выдачи задания ___03.07.2023
Задание выдал
Задание к исполнению
руководитель практики________Волкова Т.В.
подпись, Фамилия, Инициалы
принял _______Каспаров.А.В
подпись, Фамилия, Инициалы
4
СОДЕРЖАНИЕ
ВВЕДЕНИЕ .............................................................................................................. 5
1. ПОСТАНОВКА ЗАДАЧИ НА ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО
БЛОКА...................................................................................................................... 8
2.1. Введение: ..................................................................................................... 10
2.2. Основания для разработки: ........................................................................ 10
2.3. Назначение разработки:.............................................................................. 10
2.4. Требования к программе или программному изделию: .......................... 11
2.5. Требования к программной документации: ............................................. 12
2.6. Технико-экономические показатели: ........................................................ 12
2.7. Стадии и этапы разработки: ....................................................................... 12
2.8. Порядок контроля и приемки: ................................................................... 13
3. ОПИСАНИЕ ПРОГРАММЫ ........................................................................... 14
3.1 Общие сведения: ....................................................................................... 14
3.2 Функциональное назначение: ................................................................... 14
3.3 Описание логической структуры: ........................................................... 14
3.4 Используемые технические средства: .................................................... 17
3.5 Вызов и загрузка: ...................................................................................... 17
3.6 Входные данные: ...................................................................................... 18
3.7 Выходные данные:.................................................................................... 18
4. РУКОВОДСТВО ПРОГРАММИСТА ............................................................. 19
4.1. Назначение и условия применения программ: ........................................ 19
4.2. Характеристика программы: ...................................................................... 19
4.3. Обращение к программе:............................................................................ 19
4.4. Входные и выходные данные: ................................................................... 19
4.5. Сообщения: .................................................................................................. 20
4.6. Приложение: ................................................................................................ 20
5. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ ............................................. 21
5.1 Объект испытаний; ...................................................................................... 21
5.2 Цель испытаний; .......................................................................................... 21
5.3 Требования к программе; ............................................................................ 21
5.4 Требования к программной документации; .............................................. 21
5.5 Состав и порядок испытаний; ..................................................................... 22
5.6 Методы испытаний: ..................................................................................... 22
ЗАКЛЮЧЕНИЕ ..................................................................................................... 23
БИБЛИОГРАФИЧЕСКИЙ СПИСОК ................................................................. 24
ПРИЛОЖЕНИЕ А ................................................................................................. 25
5
ВВЕДЕНИЕ
Цель производственной (эксплуатационной) практики – расширить
теоретические и практические знания, полученные в процессе обучения по
дисциплинам
«Программирование.
Языки
высокого
уровня»,
«Алгоритмизация вычислительных процессов», «Объектно-ориентированное
программирование», «Инструментальные средства обработки графических
объектов», «Базы данных», «Web-приложения и мобильные информационные
технологии», получить навыки разработки и эксплуатации современного
программного обеспечения, получить начальные навыки в разработке бизнеспланов и технических заданий на оснащение отделов, лабораторий, офисов
компьютерным и сетевым оборудованием, освоить возможности пакета
Microsoft Office по разработке презентаций, оформлению научно-технических
отчетов по результатам выполненной работы.
Основными задачами производственной практики являются:
 углубление и закрепление полученных теоретических знаний;
 ознакомление с задачами и технологиями разработки и тестирования
программного обеспечения (ПО), реализуемыми на современных IT
предприятиях;

изучение
IT-технологий,
применяемых
для
автоматизации
технологических процессов и документооборота на предприятиях;
 разработка ПО для автоматизации документооборота предприятия с
использованием технологий WEB-программирования.
В соответствии с задачами практики для получения навыков
профессиональной деятельности студент должен выполнить следующие
задания:
1) ознакомиться с существующими должностными инструкциями в
организации для сотрудников, в должности которых студент проходит
практику и правилами техники безопасности на рабочем месте;
6
2) выполнить индивидуальное задание, полученное от руководителя
практики от профильной организации;
3) оформить отчет о практике.
В настоящее время информационные технологии играют ключевую роль в
различных сферах деятельности, включая государственные и муниципальные
организации. Они позволяют улучшить эффективность и доступность
предоставления услуг, а также обеспечить оперативное взаимодействие с
гражданами.
В рамках моей практики я получил возможность принять участие в
проекте разработки телеграмм-бота для получения информации о работе
Многофункционального центра предоставления государственных услуг
(МФЦ). МФЦ является важным звеном государственного аппарата,
предоставляющим широкий спектр услуг для населения.
Основной целью данного проекта было создание удобного и интуитивно
понятного инструмента, позволяющего гражданам получить актуальную
информацию о работе МФЦ, а также о доступных услугах и требованиях для
их получения. Телеграмм-бот был выбран в качестве основного средства
коммуникации, поскольку он является популярным и широко
распространенным мессенджером, доступным на различных платформах.
Для реализации проекта я выбрал язык программирования Python,
который обладает мощными инструментами для разработки ботов и
обработки данных. Python также позволяет использовать различные
библиотеки и фреймворки, упрощающие создание и взаимодействие с API
телеграмма.
В ходе работы над проектом мне предстояло изучить и применить такие
концепции и технологии, как работа с API, парсинг данных, обработка
пользовательского ввода, хранение информации и деплоймент бота на
7
сервере. Я также провел анализ требований пользователей, чтобы обеспечить
максимально удобный и интуитивно понятный интерфейс.
Целью данного отчета является описание процесса разработки и
реализации телеграмм-бота для получения информации о работе МФЦ, а
также оценка его эффективности и функциональности. В рамках отчета будут
рассмотрены основные этапы работы, анализ полученных результатов и
предложены возможные пути для улучшения и дальнейшего развития
разработанного бота.
Данный проект представляет собой важный шаг в направлении
совершенствования информационных технологий в государственном секторе
и позволяет значительно упростить доступ граждан к необходимой им
информации. Представленный в отчете опыт и результаты разработки
телеграмм-бота могут быть полезными для дальнейших исследований в
области автоматизации государственных услуг и совершенствования
процессов в МФЦ.
8
1. ПОСТАНОВКА ЗАДАЧИ НА ПРОЕКТИРОВАНИЕ
ПРОГРАММНОГО БЛОКА
Постановка задачи на проектирование программного блока:
1. Анализ требований и спецификаций:
-
-
Проведение анализа требований граждан к функциональности и
удобству использования телеграмм-бота.
Изучение спецификаций МФЦ и необходимых данных для
предоставления актуальной информации.
2. Разработка архитектуры бота:
-
-
Проектирование архитектуры программного блока с учетом
модульности, масштабируемости и пере использования
компонентов.
Определение основных модулей, функциональных блоков и их
взаимосвязей.
3. Реализация взаимодействия с API телеграмма:
-
-
Настройка и подключение к API телеграмма для обработки
входящих и исходящих сообщений.
Реализация механизмов авторизации, аутентификации и защиты
данных взаимодействия.
4. Разработка функциональности запросов к базе данных:
-
-
Реализация механизма запросов к базе данных МФЦ для
получения актуальной информации о услугах, расписании
работы и требованиях.
Обеспечение эффективности и оптимизации запросов для
быстрого доступа к необходимым данным.
5. Внедрение механизма обработки естественного языка:
-
-
Использование библиотек и алгоритмов обработки естественного
языка для понимания и интерпретации запросов пользователей.
Реализация механизма поиска наиболее подходящего ответа на
основе анализа запросов и контекста.
9
6. Разработка механизма уведомлений и оповещений:
-
-
Реализация механизма отправки уведомлений пользователям о
статусе и изменениях в заявках или услугах.
Обеспечение возможности настройки и управления
уведомлениями для каждого пользователя.
7. Тестирование и отладка:
-
-
Проведение тестирования всех функциональных блоков и
компонентов телеграмм-бота.
Выявление и исправление ошибок, обеспечение стабильности и
надежности работы бота.
8. Документирование и подготовка руководства пользователя:
- Создание документации, описывающей функциональность,
особенности использования и инструкции по работе с телеграммботом.
- Подготовка руководства пользователя для облегчения начала
работы и устранения возможных вопросов и проблем.
В результате успешного выполнения поставленных задач ожидается
получение полнофункционального и стабильного телеграмм-бота, который
обеспечит гражданам удобный доступ к актуальной информации о работе
МФЦ и снизит время и усилия, затрачиваемые на получение
государственных услуг.
10
2. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОЕКТИРОВАНИЕ
ПРОГРАММНОГО БЛОКА
2.1. Введение:
Настоящее техническое задание представляет собой описание процесса
разработки
телеграмм-бота
для
получения
информации
о
работе
Многофункционального центра предоставления государственных услуг
(МФЦ). Бот будет использоваться в МФЦ для обеспечения гражданам
удобного и быстрого доступа к необходимой информации о услугах,
расписании работы и требованиях МФЦ.
2.2. Основания для разработки:
Основаниями для разработки телеграмм-бота являются следующие
документы:
-
Задание на практику, выданное МФЦ, с указанием требований к
разработке бота.
-
Письменное согласие руководства МФЦ на разработку и внедрение
телеграмм-бота.
-
Документы, определяющие стандарты и требования к информационным
системам и программному обеспечению в МФЦ.
2.3. Назначение разработки:
Назначением разработки является создание телеграмм-бота, который
позволит гражданам получать всю необходимую информацию о работе МФЦ.
Бот будет предоставлять данные о доступных услугах, расписании работы,
требованиях и процедуре их получения. Основными функциями бота будут
обработка запросов пользователей, предоставление актуальной информации и
отправка уведомлений о статусе заявок.
11
2.4. Требования к программе или программному изделию:
2.4.1. Требования к функциональным характеристикам:
-
Бот должен предоставлять информацию о доступных услугах МФЦ.
-
Бот должен отображать расписание работы МФЦ.
-
Бот должен предоставлять требования и процедуры для получения
услуг.
-
Бот должен обеспечивать возможность запроса статуса заявки и оценки
времени ожидания.
-
Бот должен иметь механизм отправки уведомлений и оповещений
пользователям о статусе заявок или изменениях в услугах.
2.4.2. Требования к надежности:
-
Бот должен обеспечивать надежное функционирование и контроль
входной и выходной информации.
-
Бот должен иметь механизм обработки ошибок и восстановления после
возможных сбоев.
2.4.3. Условия эксплуатации:
-
Бот должен работать в условиях обычной рабочей температуры и
относительной влажности.
-
Бот должен обеспечивать надежность и стабильность работы при
обращении большого количества пользователей.
2.4.4. Требования к составу и параметрам технических средств:
-
Для работы бота требуется наличие сервера или хостинга для
развертывания и обеспечения доступа к боту.
12
-
Бот должен поддерживаться и работать на платформе Python версии
3.11.0.
2.4.5. Требования к информационной и программной совместимости:
-
Бот должен быть совместим с API телеграмма для взаимодействия с
пользователем.
-
Бот должен использовать библиотеки aiogram и openpyxl для обработки
сообщений и работы с базой данных.
2.5. Требования к программной документации:
Требования к программной документации включают следующее:
-
Техническое описание архитектуры и компонентов бота.
-
Инструкции по развертыванию бота на сервере и его настройке.
-
Руководство
пользователя,
описывающее
функциональность
и
инструкции по использованию бота.
2.6. Технико-экономические показатели:
В
данном
разделе
указываются
предварительная
экономическая
эффективность разработки телеграмм-бота и предполагаемая годовая
потребность в использовании бота. Также проводится сравнение с лучшими
отечественными и зарубежными образцами или аналогами.
2.7. Стадии и этапы разработки:
Стадии и этапы разработки определяют необходимые работы и сроки их
выполнения, а также указываются исполнители:
-
Анализ требований и спецификаций.
-
Проектирование архитектуры и функциональности бота.
-
Реализация и тестирование функциональности бота.
13
-
Отладка и исправление ошибок.
-
Создание программной документации.
2.8. Порядок контроля и приемки:
Указываются виды испытаний и общие требования к приемке работы,
включая проверку соответствия требованиям и оценку работоспособности
бота.
Приложения:
-
Перечень научно-исследовательских и других работ, обосновывающих
разработку.
-
Схемы алгоритмов, таблицы, описания, расчеты и другие документы,
которые могут быть использованы при разработке.
-
Другие источники разработки.
14
3. ОПИСАНИЕ ПРОГРАММЫ
3.1 Общие сведения:
- Наименование программы: Телеграмм бот для услуг МФЦ.
- Программное обеспечение, необходимое для функционирования
программы: Python версии 3.11.0, Visual Studio Code, PuTTy, WinSCP.
- Язык программирования: Python.
3.2 Функциональное назначение:
Телеграмм бот разработан для обеспечения гражданам удобного и
быстрого доступа к информации о работе МФЦ. Он позволяет получать всю
необходимую информацию о доступных услугах, расписании работы,
требованиях и процедурах для получения услуг. Бот обладает
функциональными ограничениями, связанными с предоставлением
информации о конкретных услугах и структурой данных МФЦ.
3.3 Описание логической структуры:
-
-
-
Алгоритм программы: Бот работает на основе асинхронного
программирования и обрабатывает входящие сообщения от
пользователей с помощью библиотеки aiogram.
Для хранения информации о состояниях пользователей используется
конечная машина состояний (FSM). Бот обращается к базе данных
МФЦ с использованием библиотеки openpyxl для получения
актуальной информации.
Функции и компоненты бота взаимодействуют друг с другом,
обеспечивая функциональность и логику работы.
Ниже будут приведены скриншоты работы бота.
15
Рисунок 3.1 – Робота с ботом.
На представленном выше рисунке мы можем наблюдать работу с телеграмм
ботом. Для начала использования бота нажать кнопку старт и появится
выбор.
16
Рисунок 3.2 – Выбор режима работы конкретного отделения МФЦ.
Далее будет предоставлена диаграмма использования телеграмм бота
пользователем.
17
Рисунок 3.3 – Диаграмма использования телеграмм бота пользователем.
3.4 Используемые технические средства:
Для работы программы используются следующие технические средства:
электронно-вычислительные машины и устройства, на которых
происходит развертывание и функционирование бота.
3.5 Вызов и загрузка:
-
-
Способ вызова программы: Бот вызывается из мессенджера Telegram
при взаимодействии пользователя с интерфейсом бота.
Входные точки: Входные данные представляют собой сообщения,
которые пользователь отправляет боту для получения информации или
выполнения определенных команд.
18
3.6 Входные данные:
-
-
Характер, организация и предварительная подготовка входных данных:
Входные данные представлены сообщениями от пользователей,
содержащими запросы на получение информации о работе МФЦ.
Формат, описание и способ кодирования входных данных. Входные
данные передаются в текстовом формате и обрабатываются ботом в
соответствии с определенными командами и ключевыми словами.
3.7 Выходные данные:
-
-
Характер и организация выходных данных: Выходные данные
представляют собой сообщения, которые бот отправляет
пользователям в ответ на их запросы. Они содержат информацию о
доступных услугах, расписании работы, требованиях и процедурах для
получения услуг.
Формат, описание и способ кодирования выходных данных: Выходные
данные представлены в текстовом формате и могут включать ссылки,
расписание и другую необходимую информацию.
19
4. РУКОВОДСТВО ПРОГРАММИСТА
4.1. Назначение и условия применения программ:
-
-
Назначение и функции программы. Телеграмм бот для услуг МФЦ
предназначен для обеспечения гражданам удобного и быстрого
доступа к информации о работе МФЦ, предоставляя информацию о
доступных услугах, расписании работы, требованиях и процедурах для
получения услуг.
Условия, необходимые для выполнения программы. Программа
требует наличия оперативной памяти для исполнения, подключения к
серверу Telegram и наличия актуальных данных МФЦ в формате,
поддерживаемом программой.
4.2. Характеристика программы:
-
-
Описание основных характеристик и особенностей программы:
Программа разработана на языке Python с использованием библиотеки
aiogram для работы с Telegram API и библиотеки openpyxl для работы с
базой данных МФЦ.
Она работает в асинхронном режиме, обрабатывает входящие
сообщения пользователей и предоставляет информацию о работе
МФЦ. Программа обладает возможностью контроля правильности
выполнения и самовосстановления в случае ошибок.
4.3. Обращение к программе:
-
-
Описание процедур вызова программы. Программа запускается на
сервере и ожидает входящих сообщений от пользователей через
Telegram.
Команды и запросы, отправленные пользователем, обрабатываются
программой и возвращаются соответствующие ответы.
4.4. Входные и выходные данные:
-
Описание организации, используемой входной и выходной
информации: Входными данными являются сообщения, отправленные
пользователями через Telegram, содержащие запросы на получение
информации о работе МФЦ. Выходные данные представляют собой
сообщения, отправляемые программой пользователю в ответ на их
запросы. Информация кодируется в текстовом формате.
20
4.5. Сообщения:
-
Тексты сообщений, выдаваемых программисту или оператору:
Программа может выдавать различные сообщения программисту или
оператору в ходе выполнения, такие как информация об ошибках,
успешных операциях или запросах дополнительной информации.
Описание содержания сообщений и необходимых действий
предоставляется в руководстве программиста.
4.6. Приложение:
Рисунок 4.1 – Пример входных данных.
Как видно из рисунка 4.1 Практически вся коммуникация пользователя с
ботом это выбор ответов из списка.
Рисунок 4.2 – Пример не правильного ввода номера услуги.
21
5. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ
5.1 Объект испытаний;
Наименование, область применения и обозначение испытуемой
программы:
Испытуемой программой является телеграмм бот для услуг МФЦ,
разработанный для предоставления информации о работе МФЦ гражданам.
5.2 Цель испытаний;
Цель проведения испытаний:
Целью испытаний является проверка соответствия программы
требованиям, определенным в техническом задании, а также оценка ее
функциональности, надежности и удобства использования.
5.3 Требования к программе;
Требования, подлежащие проверке во время испытаний и заданные в
техническом задании на программу, включают:
-
Корректное отображение информации о работе МФЦ, доступной для
пользователей.
-
Правильная обработка запросов и команд от пользователей.
-
Соблюдение требований безопасности и защиты информации.
-
Удобный и понятный интерфейс пользователя.
5.4 Требования к программной документации;
Состав программной документации, предъявляемой на испытания, включает:
-
Техническое задание на программу.
-
Описание функциональности и особенностей программы.
-
Инструкции по установке и запуску программы.
-
Руководство пользователя.
-
Документация по использованию библиотек aiogram и openpyxl.
22
5.5 Состав и порядок испытаний;
Технические и программные средства, используемые во время
испытаний:
-
-
Сервер, на котором развернут телеграмм бот.
Тестовые аккаунты и сообщения для проверки
функциональности бота.
Инструменты для записи результатов испытаний, такие как
таблицы или журналы.
Порядок проведения испытаний:
-
-
Установка и настройка программы на сервере.
Отправка различных запросов и команд боту для проверки его
функциональности и соответствия требованиям.
Анализ результатов и сравнение с ожидаемыми результатами.
5.6 Методы испытаний:
Описания используемых методов испытаний:
-
-
-
-
Тестирование функциональности бота, включая проверку всех
доступных команд и запросов.
Тестирование надежности и устойчивости бота при большой
нагрузке или при возникновении ошибок.
Тестирование безопасности и защиты информации, включая
проверку механизмов авторизации и шифрования данных.
Анализ временных характеристик бота, таких как время отклика
и скорость обработки запросов.
23
ЗАКЛЮЧЕНИЕ
В ходе продолжительной работы по разработке телеграмм бота для услуг
МФЦ были использованы различные программные средства и библиотеки.
Для разработки бота были использованы Visual Studio Code и Python версии
3.11.0. Дополнительно, для взаимодействия с сервером были применены
PuTTy и WinSCP. Для работы с состояниями пользователей было решено
использовать конечную машину состояний FSM.
Программа бота была разработана с целью предоставления гражданам
удобного и быстрого доступа ко всей необходимой информации о работе
МФЦ. Были определены требования к функциональным характеристикам,
надежности, условиям эксплуатации, составу и параметрам технических
средств, информационной и программной совместимости, маркировке и
упаковке, транспортированию и хранению, а также специальные требования.
В описании программы были приведены общие сведения, функциональное
назначение, описание логической структуры, используемые технические
средства, вызов и загрузка, входные данные и выходные данные. Было
рассмотрено назначение и условия применения программы, характеристики
программы, обращение к программе, входные и выходные данные, а также
сообщения.
Программа и методика испытаний были разработаны для проверки
соответствия программы требованиям, определенным в техническом
задании. Были указаны объект испытаний, цель испытаний, требования к
программе и программной документации, состав и порядок испытаний, а
также методы испытаний.
В процессе разработки бота были применены различные методы
тестирования функциональности, надежности, безопасности и временных
характеристик. Использовались технические и программные средства, такие
как сервер, тестовые аккаунты и инструменты для записи результатов
испытаний.
В итоге, разработка телеграмм бота для услуг МФЦ позволяет гражданам
удобно и быстро получать необходимую информацию о работе МФЦ.
Программа прошла испытания, соответствует требованиям и готова к
дальнейшему использованию.
24
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Документация по библиотеке aiogram. [Онлайн]. Доступно по адресу:
https://docs.aiogram.dev/.
2. Документация по библиотеке openpyxl. [Онлайн]. Доступно по адресу:
https://openpyxl.readthedocs.io/.
3. Документация по Python. [Онлайн]. Доступно по адресу:
https://docs.python.org/.
4. Документация по Visual Studio Code. [Онлайн]. Доступно по адресу:
https://code.visualstudio.com/docs.
5. Документация по PuTTY. [Онлайн]. Доступно по адресу:
https://www.chiark.greenend.org.uk/~sgtatham/putty/.
6. Документация по WinSCP. [Онлайн]. Доступно по адресу:
https://winscp.net/eng/docs/.
7. ГОСТ Р 7.0.5-2008. "Справки по оформлению списка литературы".
Москва: Издательский дом стандартов, 2008.
25
ПРИЛОЖЕНИЕ А
Текст программы
import openpyxl
import os
import asyncio
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from aiogram.types import ReplyKeyboardMarkup
from openpyxl.utils import get_column_letter
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
storage = MemoryStorage()
TOKEN = '5954684990:AAFBO-wsnOLX8GLVq4390ZEOeMhAr1nJvIY'
bot = Bot(token=TOKEN)
# bot = Bot(token=os.getenv("TOKEN"))
dp = Dispatcher(bot, storage=storage)
# # Установка Webhook при запуске бота
# async def on_startup(dp):
#
await bot.set_webhook('https://bot.mfc92.ru/{TOKEN}'.format(TOKEN=TOKEN))
# # Удаление Webhook при прерывании работы бота
# async def on_shutdown(dp):
#
await bot.delete_webhook()
26
class Form(StatesGroup):
firstChoice = State()
servicesList = State()
servicesNum = State()
statement = State()
# Словарь для хранения id пользователя в качестве ключа и выбранного им
ведомства в качестве значения
all_keys = {}
# Define variable to load the wookbook
wookbook = openpyxl.load_workbook("services2.xlsx")
# Define variable to read the active sheet:
worksheet = wookbook.active
# Iterate the loop to read the cell values
@dp.message_handler(commands=["start", "Главное меню"], state=None)
async def startBot(message: types.Message):
startMarkup = ReplyKeyboardMarkup(resize_keyboard=True)
startMarkup.add(
types.KeyboardButton("📖Информация об услугах, памятки для заявителей")
)
startMarkup.add(types.KeyboardButton("🗓Информация о работе офисов МФЦ"))
startMarkup.add(types.KeyboardButton("✏️Способы и правила предварительной
записи"))
await Form.firstChoice.set()
await message.answer(
27
"<b>👋🙂Здравствуйте\n Вас приветствует чат-бот МФЦ города
Севастополя❗️\n\n С помощью нашего бота вы сможете получить информацию об
интересующих вас услугах, о режимах работы офисов МФЦ, а также о способах и
условиях предварительной записи\n\nНаберите команду /start для
перезапуска\n\nВыберите пункт из меню ниже</b>",
parse_mode="html",
reply_markup=startMarkup,
)
@dp.message_handler(content_types=["text"], state=Form.firstChoice)
async def getCategoryScheduleRules(message: types.Message, state: FSMContext):
if message.text == "/start":
return await startBot(message)
if message.text == "📖Информация об услугах, памятки для заявителей":
async with state.proxy() as data:
data["firstChoice"] = message.text
markup = ReplyKeyboardMarkup(resize_keyboard=True)
markup.add(types.KeyboardButton("/start"))
for i in range(0, 1):
for col in worksheet.iter_cols(1, worksheet.max_column):
category = col[i].value
markup.add(types.KeyboardButton(category))
await bot.send_message(
message.from_user.id,
"<b>Выберите ВЕДОМСТВО, которое оказывает интересующую Вас
услугу</b>❗️\nДождитесь полного формирования списка",
28
parse_mode="html",
reply_markup=markup,
)
return await Form.servicesList.set()
elif message.text == "🗓Информация о работе офисов МФЦ":
async with state.proxy() as data:
data["firstChoice"] = message.text
markup = ReplyKeyboardMarkup(resize_keyboard=True)
markup.add("/Главное меню")
markup.add(
types.KeyboardButton(
"МФЦ № 1. Адрес: г. Севастополь, ул. Вокзальная, д.10"
)
)
markup.add(
types.KeyboardButton(
"МФЦ № 2. Адрес: г. Севастополь, ул. пр-т Генерала Острякова, д.15"
)
)
markup.add(
types.KeyboardButton(
"МФЦ № 3. Адрес: г. Севастополь, ул. Леваневского, д.24"
)
29
)
markup.add(
types.KeyboardButton(
"МФЦ № 4. Адрес: г. Севастополь, пр-т Героев Сталинграда, д.64"
)
)
markup.add(
types.KeyboardButton(
"МФЦ № 5. Адрес: г. Инкерман, ул. Умрихина, д.1"
)
)
markup.add(
types.KeyboardButton(
"ТОСП МФЦ № 6. Адрес: с. Орлиное, ул. Тюкова Владимира, д.60А"
)
)
markup.add(
types.KeyboardButton(
"ТОСП МФЦ № 7. Адрес: с. Верхнесадовое, ул. Севастопольская,
д.82"
)
)
markup.add(
types.KeyboardButton(
30
"МФЦ № 8. Адрес: пгт. Кача, ул. Авиаторов, д.9"
)
)
markup.add(
types.KeyboardButton(
"МФЦ № 9. Адрес: г. Севастополь, ул. Новикова, д.4"
)
)
markup.add(
types.KeyboardButton(
"МФЦ № 10. Адрес: г. Севастополь, ул. Бориса Михайлова, д.6"
)
)
markup.add(
types.KeyboardButton("МФЦ № 11. Адрес: г. Севастополь, ул. Рабочая,
д.4")
)
markup.add(
types.KeyboardButton(
"Бизнес-окно МФЦ. Адрес: г. Севастополь, пр-т. Октябрьской
Революции, д.42Б, корп.6"
)
)
markup.add(
31
types.KeyboardButton(
"МФЦ № 12. Адрес: г. Севастополь, ул. Корчагина Павла, д.34"
)
)
markup.add(
types.KeyboardButton(
"МФЦ для Бизнеса. Адрес: г. Севастополь, пр-т Героев Сталинграда,
д.64"
)
)
markup.add(
types.KeyboardButton(
"Центр телефонного обслуживания Адрес: г. Севастополь, пр-т.
Генерала Острякова, д.15"
)
)
await bot.send_message(
message.from_user.id,
"Выберите отделение МФЦ\nСправочная служба:\n\n +7 (8692) 417100\nmfc@mfc92.ru",
reply_markup=markup,
)
return await Form.statement.set()
elif message.text == "✏️Способы и правила предварительной записи":
32
async with state.proxy() as data:
data["firstChoice"] = message.text
await bot.send_message(message.from_user.id, "✅Запись через портал:
через личный кабинет портала mfc92.ru. Потребуется учетная запись в
ЕСИА\n\n✅Call-центр: +7 (8692) 417-100, Единый номер 122(добавочный
5)\n\n✅Инфомат самообслуживания в отделениях МФЦ (потребуется
паспорт)\n\n✅При личном посещении отделения МФЦ через регистратора стойки
(иметь при себе документ, удостоверяющий личность).")
return await Form.firstChoice.set()
@dp.message_handler(content_types=["text"], state=Form.statement)
async def getSchedule(message: types.Message, state: FSMContext):
if message.text == "/Главное меню" or message.text == "/start":
await state.finish()
return await startBot(message)
async with state.proxy() as data:
data["statement"] = message.text
if message.text == "МФЦ № 1. Адрес: г. Севастополь, ул. Вокзальная, д.10":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 19:00\nВторник: 09:00 - 19:00\nСреда:
08:00 - 20:00\nЧетверг: 08:00 - 18:00\nПятница: 08:00 - 20:00\nСуббота: 09:00 17:00\nВоскресенье: выходной",
)
photo = open("MFC 1.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
33
# return await getCategoryScheduleRules(message, Form.statement)
return await Form.statement.set()
elif message.text == "МФЦ № 2. Адрес: г. Севастополь, ул. пр-т Генерала
Острякова, д.15":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 08:00 - 17:00\nВторник: 09:00 - 18:00\nСреда:
10:00 - 20:00\nЧетверг: 09:00 - 18:00\nПятница: 08:00 - 17:00\nСуббота: 08:00 16:00\nВоскресенье: выходной",
)
photo = open("MFC 2.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 3. Адрес: г. Севастополь, ул. Леваневского, д.24":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00\nВторник: 09:00 - 18:00\nСреда:
09:00 - 18:00\nЧетверг: 10:00 - 20:00\nПятница: 09:00 - 18:00\nСуббота: 09:00 17:00\nВоскресенье: выходной",
)
photo = open("MFC 3.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 4. Адрес: г. Севастополь, пр-т Героев Сталинграда,
д.64":
34
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00\nВторник: 09:00 - 18:00\nСреда:
09:00 - 18:00\nЧетверг: 11:00 - 20:00\nПятница: 09:00 - 18:00\nСуббота: 09:00 18:00\nВоскресенье: выходной",
)
photo = open("MFC 4.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 5. Адрес: г. Инкерман, ул. Умрихина, д.1":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00\nВторник: 09:00 - 18:00\nСреда:
09:00 - 18:00\nЧетверг: 09:00 - 18:00\nПятница: 09:00 - 18:00\nСуббота:
выходной\nВоскресенье: выходной",
)
photo = open("MFC 5.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "ТОСП МФЦ № 6. Адрес: с. Орлиное, ул. Тюкова
Владимира, д.60А":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00, перерыв: 13:00 13:45\nВторник: 09:00 - 18:00, перерыв: 13:00 - 13:45\nСреда: 09:00 - 18:00,
перерыв: 13:00 - 13:45\nЧетверг: 09:00 - 18:00, перерыв: 13:00 - 13:45\nПятница:
35
09:00 - 18:00, перерыв: 13:00 - 14:00\nСуббота: выходной\nВоскресенье:
выходной",
)
photo = open("MFC 6.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "ТОСП МФЦ № 7. Адрес: с. Верхнесадовое, ул.
Севастопольская, д.82":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 08:00 - 17:00, перерыв: 12:00 12:45\nВторник: 08:00 - 17:00, перерыв: 12:00 - 12:45\nСреда: 08:00 - 17:00,
перерыв: 12:00 - 12:45\nЧетверг: 08:00 - 17:00, перерыв: 12:00 - 12:45\nПятница:
08:00 - 16:00, перерыв: 12:00 - 13:00\nСуббота: выходной\nВоскресенье:
выходной",
)
photo = open("MFC 7.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 8. Адрес: пгт. Кача, ул. Авиаторов, д.9":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 08:00 - 17:00\nВторник: 08:00 - 17:00\nСреда:
08:00 - 17:00\nЧетверг: 08:00 - 17:00\nПятница: 09:00 - 18:00\nСуббота:
выходной\nВоскресенье: выходной",
)
36
photo = open("MFC 8.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 9. Адрес: г. Севастополь, ул. Новикова, д.4":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 08:00 - 17:00\nВторник: 08:00 - 17:00\nСреда:
08:00 - 17:00\nЧетверг: 08:00 - 17:00\nПятница: 08:00 - 17:00\nСуббота: 08:00 17:00\nВоскресенье: выходной",
)
photo = open("MFC 9.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 10. Адрес: г. Севастополь, ул. Бориса Михайлова,
д.6":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 11:00 - 20:00\nВторник: 09:00 - 18:00\nСреда:
09:00 - 18:00\nЧетверг: 09:00 - 18:00\nПятница: 09:00 - 18:00\nСуббота: 09:00 18:00\nВоскресенье: выходной",
)
photo = open("MFC 10.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
37
elif message.text == "МФЦ № 11. Адрес: г. Севастополь, ул. Рабочая, д.4":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00\nВторник: 09:00 - 18:00\nСреда:
09:00 - 18:00\nЧетверг: 10:00 - 20:00\nПятница: 09:00 - 18:00\nСуббота: 09:00 17:00\nВоскресенье: выходной",
)
photo = open("MFC 11.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "Бизнес-окно МФЦ. Адрес: г. Севастополь, пр-т. Октябрьской
Революции, д.42Б, корп.6":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00, перерыв: 13:00 13:45\nВторник: 09:00 - 18:00, перерыв: 13:00 - 13:45\nСреда: 09:00 - 18:00,
перерыв: 13:00 - 13:45\nЧетверг: 09:00 - 18:00, перерыв: 13:00 - 13:45\nПятница:
09:00 - 16:45, перерыв: 13:00 - 13:45\nСуббота: выходной\nВоскресенье:
выходной",
)
photo = open("Бизнес-окно.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ № 12. Адрес: г. Севастополь, ул. Корчагина Павла,
д.34":
38
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 08:00 - 17:00\nВторник: 10:00 - 20:00\nСреда:
08:00 - 17:00\nЧетверг: 08:00 - 17:00\nПятница: 08:00 - 16:00\nСуббота:
выходной\nВоскресенье: выходной",
)
photo = open("MFC 12.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "МФЦ для Бизнеса. Адрес: г. Севастополь, пр-т Героев
Сталинграда, д.64":
await bot.send_message(
message.from_user.id,
"Часы работы:\nПонедельник: 09:00 - 18:00\nВторник: 09:00 - 18:00\nСреда:
09:00 - 18:00\nЧетверг: 09:00 - 18:00\nПятница: 09:00 - 16:45\nСуббота:
выходной\nВоскресенье: выходной",
)
photo = open("МФЦ для бизнеса.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
elif message.text == "Центр телефонного обслуживания Адрес: г. Севастополь,
пр-т. Генерала Острякова, д.15":
await bot.send_message(
message.from_user.id,
39
"Часы работы:\nПонедельник: 08:00 - 17:00\nВторник: 08:00 - 17:00\nСреда:
08:00 - 17:00\nЧетверг: 08:00 - 17:00\nПятница: 08:00 - 16:45\nСуббота: 08:00 15:00\nВоскресенье: выходной",
)
photo = open("Центр.jpg", "rb")
await bot.send_photo(message.from_user.id, photo)
return await Form.statement.set()
await state.finish()
@dp.message_handler(content_types=["text"], state=Form.servicesList)
async def loadServices(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data["servicesList"] = message.text
flag = False
if message.text == "/start":
await state.finish()
return await startBot(message)
for i in range(0, 1):
for col in worksheet.iter_cols(1, worksheet.max_column):
if message.text == col[i].value.strip():
flag = True
break
if flag == False:
await bot.send_message(
message.from_user.id,
40
"<b>Такого ведомства нет в списке❗️</b>",
parse_mode="html",
)
await state.finish()
return await startBot(message)
deleteCategories = types.ReplyKeyboardRemove()
deleteCategories = types.ReplyKeyboardMarkup(resize_keyboard=True)
deleteCategories.add(types.KeyboardButton("/start"))
deleteCategories.add(types.KeyboardButton("/Главное меню"))
for i in range(0, 1):
for col in worksheet.iter_cols(1, worksheet.max_column):
if message.text == col[i].value.strip():
for j in range(1, worksheet.max_row):
for k in worksheet.iter_cols(col[i].column, col[i].column):
if k[j].value == None:
continue
# Нижняя строчка - задержка отправки сообщения
await asyncio.sleep(0.3)
await bot.send_message(
message.from_user.id,
k[j].value,
reply_markup=deleteCategories,
parse_mode="html",
41
)
all_keys[message.from_user.id] = {}
all_keys[message.from_user.id] = k[j].column
await bot.send_message(
message.from_user.id,
"❗️<b>Введите НОМЕР УСЛУГИ❗️\n\n Номер указан в названии услуги</b>",
parse_mode="html",
)
await Form.servicesNum.set()
@dp.message_handler(content_types=["text"], state=Form.servicesNum)
async def loadFile(message: types.Message, state: FSMContext):
try:
async with state.proxy() as data:
data["servicesNum"] = message.text
if message.text == "/Главное меню" or message.text == "/start":
all_keys.pop(message.from_user.id)
return await startBot(message)
document = open(str(all_keys[message.from_user.id]) + "/" + message.text +
".docx", "rb")
await bot.send_message(
message.from_user.id,
"Скачайте файл-памятку по предоставлению выбранной услуги👇👇👇",
parse_mode="html",
)
42
await bot.send_document(message.from_user.id, document)
await bot.send_message(
message.from_user.id,
"Для скачивания другой памятки по какой-либо услуге данного ведомства
наберите номер требуемой услуги. Либо нажмите на значок меню и вернитесь к
выбору ведомств.",
)
if message.text != "/start" or message.text != "/Главное меню":
return await Form.servicesNum.set()
elif message.text == '/start' or message.text == '/Главное меню':
all_keys.pop(message.from_user.id)
await state.finish()
return await startBot(message)
# await state.finish()
# return await startBot(message)
except (FileNotFoundError, UnboundLocalError):
await bot.send_message(
message.from_user.id,
"❗️<b>Неверно введён номер услуги. Попробуйте снова</b>❗️",
parse_mode="html",
)
# await state.finish()
# return await startBot(message)
return await Form.servicesNum.set()
43
await state.finish()
# Polling
executor.start_polling(dp, skip_updates=True)
# Webhook
# executor.start_webhook(
#
dispatcher=dp,
#
webhook_path='',
#
on_startup=on_startup,
#
on_shutdown=on_shutdown,
#
skip_updates=True,
#
host='0.0.0.0',
#
port=443
#)
Download