Модуль автоматизации обслуживания клиентов предприятия в информационной системе IP-телефонии

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    706,84 Кб
  • Опубликовано:
    2016-12-10
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Модуль автоматизации обслуживания клиентов предприятия в информационной системе IP-телефонии

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего образования

"Пензенский государственный технологический университет"

(ПензГТУ)

Факультет информационных и образовательных технологий

Кафедра "Информационные технологии и системы"



ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

на тему: "Модуль автоматизации обслуживания клиентов предприятия в информационной системе IP-телефонии"




Выполнил: студент группы 13ИС2б Чинков М.Ю.

Руководитель: доцент каф. ИТС Коновалов А.В.






Пенза, 2016 г.

Перечень принятых сокращений


1)      ВКР - выпускная квалификационная работа

2)      БД - база данных

)        СУБД - система управления баз данных

4)      РСУБД - реляционная система управления баз данных

5)      ТФОП - телефонная сеть общего пользования

6)      EA - Sparx Enterprise Architect

)        ПО - программное обеспечение

)        СПО - свободное программное обеспечение

)        ИС - информационная система

Содержание

 

Перечень принятых сокращений

Введение

1. Описание инфрмационной системы

1.1 Постановка задачи

1.2 Основная концепция системы

1.3 Анализ требований к системе

1.4 Описание предметной области

1.5 Сравнение систем IP-телефонии

1.5.1 Анализ существующих аналогов проектируемого модуля

Выводы по разделу

2. Проектирование информационной системы

2.1 Разработка UML-диаграмм

2.1.1 Разработка моделей AS-IS

2.1.2 Разработка моделей TO-BE

2.1.2.1 Диаграмма вариантов использования (use-case diagram)

2.1.2.2 Диаграмма деятельности (activity diagram)

2.1.2.3 Диаграмма состояний (state diagram)

2.1.2.4 Диаграмма развертывания (deployment diagram)

2.1.2.5 Диаграмма последовательности (sequence diagram)

2.1.2.6 Диаграмма компонентов (component diagram)

2.2 Проектирование модели хранилища информации

2.2.1 Выделение сущностей, атрибутов, ключей, связей

2.2.1.1 Проектирование клиентской базы данных

2.2.1.2 Проектирование базы данных информационной системы

2.2.2 Проектирование диаграмм "сущность-связь"

2.3 Выводы по разделу

3. Реализация информационной системы

3.1 Формирование окружения для разработки системы

3.1.1 Система контроля версий

3.1.2 Контейнеризация тестового окружения

3.1.3 Выбор SIP-клиента

3.2 Реализация баз данных системы

3.3 Разработка модулей системы

3.3.1 Разработка диалплана информационной системы

3.3.2 Разработка основного модуля

3.3.3 Разработка подсистемы речевой обработки данных

3.3.4 Разработка подсистемы контроля вызовов

3.3.5 Разработка интерфейса базы данных

3.4 Тестирование работы системы

3.5 Реализация требований к модулю

3.6 Выводы по разделу

Заключение

Библиографический список

Приложения

Введение

Данная выпускная квалификационная работа имеет следующую цель: реализовать встраиваемый модуль информационной системы IP-телефонии sip_response. В данной работе рассматривается проектирование, разработка и реализация модуля. Основным назначением данного модуля является автоматизация рутинных бизнес-процессов технической поддержки организации, используя в качестве в качестве базовой технологии систему IP-телефонии.

Задачи, поставленные в рамках выполнения выпускной квалификационной работы:

)        анализ предметной области, существующих решений на рынке информационных систем и выбор базовой системы для дальнейшего проектирования модуля;

2)      постановка задачи, выбор целевого потребителя, формирование концепции проекта, описываемого в работе, выбор необходимых инструментов для реализации;

)        проектирование составных компонентов модуля системы IP-телефонии, баз данных, необходимых для поддержки проекта;

)        реализация модуля информационной системы IP-телефонии sip_response посредством переноса концепции проекта в исходный код, предварительно выбрав инструменты для формирования окружения и тестирования проекта.

Предметной областью выпускной квалификационной работы является IP-телефония. Под IP-телефонией подразумевается набор коммуникационных протоколов, технологий и методов, обеспечивающих традиционные для телефонии набор номера, дозвон и двустороннее голосовое общение, а также видеообщение как по сети Интернет, так и по локальной сети. IP-телефония является современным аналогом телефонной сети общего пользования (далее - ТФОП), позволяя реализовать те задачи, которые реализуются в ТФОП, проще и дешевле. Модуль информационной системы IP-телефонии sip_response, работающий на базе платформы Asterisk, нацелен на усовершенствование такой функции IP-телефонии, как двухстороннее речевое общение в формате диалога.

Данная работа включает в себя 3 основных раздела:

)        анализ информационной системы: описание предметной области, а также модуля sip_response в частности; постановка задачи, поставленной перед непосредственной реализацией проекта; анализ требований, в рамках которых реализуется встраиваемый модуль; сравнение существующих систем IP-телефонии с последующим выбором одной из них, а также сравнение потенциальных конкурентов модуля на рынке;

2)      проектирование модуля информационной системы: описание концепции проекта посредством реализации UML-диаграмм, проектирование составных компонентов (подмодулей) модуля sip_response, а также проектирование БД для поддержки работы модуля;

)        реализация спроектированного модуля информационной системы: описание предварительной конфигурации тестового окружения модуля с подробным описанием инструментов, реализация на практике баз данных информационной системы, последовательное описание разработки составных компонентов модуля и конечные результаты тестирования сформированного программного продукта.

Также данная работа в качестве приложения содержит:

)        ключевые части исходного кода проекта, в котором описывается базовая логика модуля sip_response;

2)      SQL-скрипты создания баз данных;

)        результаты работы проекта в виде снимков тестового окружения проекта.

1. Описание инфрмационной системы


В данном разделе приводится описание системы sip_response как модуля ИС IP-телефонии Asterisk. В данной части выпускной квалификационной работы описываются:

1)      поэтапная постановка задач,

2)      анализ требований к целевому программному продукту,

)        описание предметной области, на базе которой происходит реализация модуля,

)        анализ систем IP-телефонии, после которого сделан окончательный выбор базовой платформы для разработки модуля;

)        анализ существующих на рынке аналогов разрабатываемому модулю sip_response.

1.1 Постановка задачи


Постановка задачи является наиболее важным этапом разработки проекта. Именно на постановку задачи должна отводиться большая часть времени проектирования. Постановка задачи на внедрение/разработку ИС направлена на достижение следующих целей:

)        Внедрение ИС, отвечающей текущим и будущим потребностям целевой организации;

2)      Повышение эффективности вложений.

В рамках постановки задачи рассматривался такой проект, как реализация стороннего модуля IP-телефонии для автоматизации обслуживания клиентов в крупной организации. Данный модуль получил название sip_response. Основным назначением модуля является интеграция бизнес-логики клиентского обслуживания организаций с существующей системой IP-телефонии.

Модуль sip_response является встраиваемым модулем системы IP-телефонии Asterisk, выполняющей роль сервера в сеансах VoIP. Основным предназначением данного модуля является автоматизация обработки клиентских вызовов, направляемых в техническую поддержку целевой организации и обрабатываемых в основном первой линией технической поддержки. В качестве языка реализации модуля использован язык программирования Python.

Автоматизация процесса модулем sip_response состоит в самостоятельной обработке простых клиентских запросов модулем sip_response с использованием системы IP-телефонии Asterisk в качестве целевой платформы. Целевыми организациями могут являться компании с большой клиентской базой, которую необходимо обслуживать 24 часа в сутки без перерывов и выходных. Примерами клиентских запросов, которые проектируемый модуль способен обработать, является запрос баланса на счете в банке или вопрос по расписанию поездов в железнодорожной компании по заданному направлению.

Модуль взаимодействует с клиентом IP-телефонии через диалплан системы Asterisk. Диалплан (номерной план) - формальное описание схемы маршрутизации и обработки телефонных звонков. Диалплан подробно описывает, что система должна делать со входящими и исходящими звонками: передавать их дальше, сохранять, отвечать на них самостоятельно и так далее. В случае взаимодействия с модулем sip_response диалплан записывает клиентский запрос в аудиофайл и передает его на вход модулю. Модуль состоит из основной системы и связанных с ней подсистем.

Принцип работы модуля sip_response заключается в следующем:

)        голосовой запрос пользователя конвертируется в текст подсистемой речевой обработки сигналов;

2)      сформированный текстовый запрос переходит в подмодуль контроля вызовов для выбора подходящего типа запроса пользователя, после этого выбирается конкретная тема запроса на основании ключевых слов, найденных в тексте фразы пользователя;

)        если запрос выбран правильно (об этом система предварительно спрашивает пользователя), то пользователю отдается сформированный ответ на основании данных из клиентской базы.

Дополнительно при запросе на конфиденциальные данные пользователь предварительно проходит процесс многофакторной аутентификации. Если система не нашла ключевых слов или просто не смогла отгадать цель пользовательского запроса, то основной модуль подает сигнал на перенаправление вызова в узкоспециализированный центр технической поддержки (вторая линия поддержки). Общение между системой и модулем происходит через программный шлюзовой интерфейс.

В соответствии с планом по достижению описанных целей при постановке задачи на внедрение/разработку ИС выполняется такая работа, как обследование предприятия. В данном случае под анализом предприятия воспринимается анализ бизнес-целей и автоматизируемых функций.

Процесс анализа бизнес-целей предприятий показал, что внедрение модуля sip_response в целевые организации соответствует обоим вышеприведенным целям. Любая организация с большой клиентской базой имеет потребность в автоматизации любых рутинных процессов с целью переключения внимания штаба работников на задачи по непосредственному развитию компании. Также данное решение интегрируется с уже реализованными технологиями в организации, т.к. в большинстве случаев общение с клиентами управляется системами IP-телефонии. Дополнительно сокращается статья расходов по клиентскому обслуживанию организации. Тем самым увеличивается эффективность вложений в целевую организацию.

телефония модуль информационная система

1.2 Основная концепция системы


Основное назначение концепции заключается в следующем. Так как большая автоматизированная система охватывает более одной критической для дальнейшей деятельности группы бизнес-процессов, у такой системы будет фактически несколько заказчиков. Разработка концепции позволит идентифицировать этих заказчиков и учесть их требования, а также договориться им между собой. Таким образом, концепция даст возможность на ранних стадиях проработки вопросов автоматизации правильным образом выстроить ожидания, закрепить концептуальные и частные требования нескольких заказчиков, реализация которых в последующем призвана обеспечить успех и эффективность внедрения.

В рамках формировании концепции модуля системы IP-телефонии sip_response выделена следующая проблема. Организация ООО "ПриветБанк" имеет огромное количество рутинных операций в бизнес-процессах клиентского обслуживания. Ответы на такие банальные запросы, как информация о банковском счете, получение списка доступных кредитов и депозитов и т.д. до сих пор обрабатывается человеком. Оператор технической поддержки первой линии самостоятельно ищет информацию подобного рода через специальное ПО в клиентской БД и только после этого может обслужить клиентский запрос. Из этой проблемы вытекают два дополнительных недостатка существующей инфраструктуры: повышенные расходы (приходится держать на окладе дополнительный штат персонала, дополнительно оплачивая социальные взносы) и влияние человеческого фактора на бизнес-процессы банка (велика вероятность ошибки в простых операциях).

На основании сформированной проблемы определена следующая цель реализации модуля: автоматизация рутинных процессов организации, связанных с обслуживанием клиентов по телефону. Разрабатываемая система должна уметь самостоятельно обработать простые вызовы, постепенно накапливая базу знаний в процессе совершенствования продукта.

После того, как стала известна цель проекта, сформирован следующий перечень основных задач со стороны заказчика ООО "ПриветБанк":

Интеграция решения с существующей инфраструктурой организации. В данном случае целевыми продуктами интеграции являются система IP-телефонии Asterisk, через которую происходит обработка клиентских запросов и СУБД PostgreSQL, в которой хранятся данные о клиентах организации.

Минимизация человеческого вмешательства в процесс обработки клиентских запросов. В данном случае система должна максимально перенести нагрузку по обслуживанию клиентов на себя, перенося в узкоспециализированный центр технической поддержки только комплексные запросы, где клиент нуждается в общении со специалистом.

Отсутствие финансовых расходов на ПО, формирующее окружение модуля sip_response. Это говорит о том, что должна отпасть необходимость в закупке лицензий дополнительного ПО, а также в их обновлении.

Также дополнительно определен круг задач со стороны разработчика модуля на перспективу:

Стандартизация объектов модуля. Это нужно сделать для того, чтобы система нуждалась в минимальном вмешательстве со стороны разработчиков при переносе логики приложения на другую предметную область. Например, при разработке модуля для бизнес-нужд железнодорожной компании основные объекты системы должны работать точно так же, как и в предметной области банков.

Ориентир на свободное программное обеспечение. Это говорит о том, что при разработке модуля необходимо использовать только программы с открытым исходным кодом, предпочитая их проприетарным решениям.

1.3 Анализ требований к системе


При постановке задачи на внедрение/разработку ИС выполняется определение следующих требований:

1)      функциональные требования;

2)      требования к безопасности;

)        требования к удобству использования;

)        требования к производительности;

)        требования к срокам внедрения;

6)      требования к ПО для сопровождения проекта;

)        требования к расходам на сопровождение проекта.

Источником функциональных требований является основная цель разработки и реализации модуля, а также вытекающий из нее перечень задач. В конечном итоге постановки задач сформирован следующий перечень функциональных требований к модулю sip_response:

)        обработка базовых клиентских запросов (перечень запросов устанавливается на этапе проектирования модуля исходя из пожеланий заказчика);

2)      возможность быстрого перенаправления вызова в случае ошибок выбора запроса системой контроля вызова.

В случае проекта выпускной квалификационной работы проведена имитация организации, имеющей собственные бизнес-процессы, в которые планируется интегрировать модуль sip_response. Данной организацией является ООО "ПриветБанк", являющееся примером банка, имеющего огромную клиентскую базу и проблему с масштабированием нагрузки в плане поддержки клиентов. По итогам предварительного анализа выделены следующие типы клиентских запросов, входящих в рамки функциональных требований:

)        Прослушать историю операций на банковском счете;

2)      Получить информацию о действующих пенсионных программах;

)        Получить информацию о действующих кредитах;

)        Получить информацию о действующих вкладах;

)        Получить состояние пенсионной программы на банковском счете;

)        Получить состояние кредитов на банковском счете;

)        Получить состояние депозитов на банковском счете;

)        Получить последние новости нашего банка;

)        Получить информацию о текущем курсе валют нашего банка.

Проектируемый модуль имеет повышенные требования к безопасности в виду того, что организации в своих бизнес-процессах обрабатывают конфиденциальную информацию, утечка которой подвергает целевую организацию наказанию по законодательству РФ, а также способствует оттоку клиентов из-за ухудшения репутации. В рамках требований по безопасности сформировано обязательство по строго аутентификации пользователей системы.

Также дополнительным требованием по безопасности является запрет на открытое использование данных доступа к внешним ресурсам внутри исходного кода. Это говорит о том, что программный код должен брать такие данные, как пароль пользователя к базе данных или ключ для использования внешнего API из внешнего конфигурационного файла, но никак не из локальной переменной.

В рамках целевой организации ООО "ПриветБанк" существует перечень данных, доступ к которым должен иметь только владелец данных, т.е. клиент организации. Для соблюдения данного свойства в модуле sip_response сформировано требование по проведению многофакторной аутентификации пользователей для доступа к конфиденциальным данным. Для разрешения на доступ пользователь должен назвать свое фамилия, имя, отчество и год рождения, а также подтвердить свою личность, назвав номер кредитной карты, CVV-код, а также код доступа к карте. Таким образом, в системе сформировано свойство информационной безопасности, которое не нарушается даже при утере пользователем кредитной карты.

Под требованиями к удобству использования подразумевается простота установки, настройки и сопровождения программного продукта. В случае реализации модуля IP-телефонии sip_response появляется требование в автоматической установке модуля в существующую систему IP-телефонии без ручной установки дополнительного ПО.

Требования к производительности рассматривают:

1)      идентичность поведения системы IP-телефонии в двух ситуациях: до и после установки модуля;

2)      добавление модулем сравнительного небольшой нагрузки на систему в процессе работы;

)        способность асинхронной работы, возможность обработки/удержания нескольких запросов одновременно.

Требования к срокам внедрения в случае проекта, описываемого в выпускной квалификационной работе, не являются жесткими. Требования к срокам внедрения первой версии продукта установлены мной как разработчиком модуля. Требования к расходам на сопровождение проекта подразумевают минимизацию расходов как основной цели реализации модуля sip_response. Основным требованием является запрет на использования выбор продуктов СПО при выборе инструментов реализации.

Проектируемый модуль должен для корректной работы взаимодействовать с внешним ПО. В процессе постановки задач сформирован следующий перечень ПО, необходимого для запуска и эксплуатации модуля sip_response на сервере. Данный перечень показан в таблице 1.2.1 В системах, поле версии которых содержат символ "*", отсутствуют какие-либо требования по версии продукта.

Таблица 1.2.1 - перечень ПО, необходимый для работы модуля sip_response

Название

Тип

Версия

Описание

1

Linux

ОС (ядро)

>= 2.6

Платформа IP-телефонии Asterisk может работать только на Linux-дистрибутивах

2

Asterisk

Платформа IP-телефонии

>= 1.2

Целевая платформа запуска модуля sip_response

3

PostgreSQL

СУБД

>= 9.0

Необходим доступ к 2-м БД: клиентской БД и БД для модуля sip_response

4

Python

Интерпретатор ЯП

2.7

Необходим для запуска модуля

5

pip

Пакетный менеджер Python

*

Необходим для установки модулей Python, используемых модулем sip_response

6

ffmpeg

Программа

*

Транскодер mp3-файлов в wav

7

sox

Программа

*

Транскодер gsm-файлов в wav

8

libpq-dev

Системная библиотека

*

Системная библиотека для разработки под PostgreSQL

9

psycopg2

Модуль Python

*

Интерфейс к PostgreSQL

10

pyst2

Модуль Python

*

Интерфейс к Asterisk

11

pydub

Модуль Python

*

Интерфейс к ffmpeg

12

SpeechRecognition

Модуль Python

*

Интерфейс к API распознавания голосовых сигналов

13

gTTS

Модуль Python

*

Интерфейс к API конвертации текста в речь


1.4 Описание предметной области


Анализ предметной области - одна из первых задач, с решением которых сталкивается разработчик информационной системы. Предметная область влияет на все аспекты проекта: требования к системе, взаимодействие с пользователем, модель хранения данных, реализацию и т.д. Анализ предметной области, позволяет выделить ее сущности, определить первоначальные требования к функциональности и определить границы проекта.

Предметная область данной выпускной квалификационной работы - IP-телефония. Это технология, которая использует сеть с пакетной коммутацией сообщений на базе протокола IP для передачи голоса в режиме реального времени.

IP-телефония является приложением более общей технологии VoIP (англ. Voice over IP) для организации двустороннего общения. Технология VoIP в общем случае подразумевает все варианты передачи голоса через IP, в том числе не имеющие никакого отношения к телефонии и общению людей.

IP-телефонию можно назвать альтернативой ТФОП, решая предназначенные ей задачи более простым и дешевым способом. Основным преимуществом данной технологии является тот факт, что голосовая информация и обычные данные могут передаваться по одной и той же сети. Дополнительные преимущества IP-телефонии:

1)      возможность передавать более одного телефонного звонка в рамках высокоскоростного телефонного подключения. Поэтому IP-телефония используется в качестве простого способа для добавления дополнительной телефонной линии дома или в офисе;

2)      конференция, переадресация звонка, автоматическое повторение номера, определение номера звонящего, предоставляются бесплатно, тогда как в традиционных телекоммуникационных компаниях обычно выставляются в счёт;

)        независимость от месторасположения. Нужно только Интернет-соединение для подключения к провайдеру IP-телефонии;

)        интеграция с другими сервисами через интернет, включая видеозвонок, аудиоконференции, вебинары.

На рисунке 1.4.1 представлена обобщенная схема работы IP-телефонии, а также возможность её синхронизации с ТФОП.

Рисунок 1.4.1 - схема работы IP-телефонии

Стоимость вызова в IP-телефонии определяется по так называемой "системе с минимальной стоимостью маршрутизации звонка" (LCR, Least Cost Routing System), которая основана на том, что осуществляется проверка пункта назначения каждого телефонного звонка, как только он сделан внутри сети, что даёт потребителю самую низкую цену. Протоколы IP-телефонии обеспечивают регистрацию клиентского устройства (шлюз, терминал или IP-телефон) на сервере провайдера, вызов или переадресацию вызова, установление соединения, передачу имени и номера абонента. В настоящее время широкое распространение получил протокол SIP - протокол сеансового установления связи, обеспечивающий передачу голоса, видео, сообщений систем мгновенного обмена сообщений и произвольной нагрузки, для сигнализации обычно использует порт 5060 протокола установления соединения UDP. Поддерживает контроль присутствия.

1.5 Сравнение систем IP-телефонии


В настоящее время на рынке свободного программного обеспечения существует немало решений для развертывания системы IP-телефонии на базе серверного программного обеспечения. Ниже приводится таблица сравнения платформ для развертывания серверного программного обеспечения IP-телефонии. Критерии объема документации системы и величины пользовательского сообщества оценивались по десятибалльной шкале (0 - отсутствие критерия в структуре программного продукта, 10 - компонент программного обеспечения доведен до совершенства и является одним из его основных преимуществ).

Таблица 1.5.1 - Сравнение серверного ПО IP-телефонии по данным на 03.12.2015 г.

Сервер IP-телефонии

Asterisk

FreeSWITCH

FreePBX

Elastix

Протоколы соединения

SIP

+

+

+

+


H.323

+

+

+

+


VOFR

+

-

-

-


XMPP

+

+

+

+


IAX

+

+

+

+


GT

+

+

-

-


TDM

+

-

-

-


Skype

-

+

-

-

Релизный цикл

1 год

1 год

1 год

2 года

Оценка объема документации системы

10

9

7

6

Оценка величины пользовательского сообщества

10

8

5

4

Самые известные из рассмотренных в таблице платформ - это Asterisk и FreeSwitch. В рамках анализа предметной области и разработки модуля распознавания и обработки речевых сигналов в качестве базового ПО выбран сервер Asterisk, так как информация о конфигурации и основных принципах работы данной системы более понятна и доступна, чем в FreeSwitch, что наиболее важно для новичков в области IP-телефонии. Также весьма важным фактором является разделение рассматриваемых систем на рынке по популярности. Таким образом, спроектированный модуль sip_response будет иметь все возможности использования свойства популярности базовой платформы.

1.5.1 Анализ существующих аналогов проектируемого модуля

Перед непосредственным стартом процесса разработки необходимо провести анализ рынка на предмет похожих решений и набора функций, которые они решают.

В ходе анализа существующих аналогов модуля sip_response найдено небольшое количество похожих решений, имеющих ограниченный функционал по сравнению с реализуемым программным продуктом. В таблице 1.5.2 приводятся результаты сравнения подобных программных модулей, работа которых имеет общую аналогию с модулем sip_response. Стоит добавить, что оба модуля имеют лицензирование GPL (General Public License), продукты которого распространяются бесплатно с возможностью участия в дальнейшей разработке ПО.

Таблица 1.5.2 - Сравнение аналогов программного модуля sip_response

Название модуля

res_speech

ASR

Платформа IP-телефонии

Asterisk

FreeSWITCH

Функция распознавания речи.

+

+

Лицензирование модуля

GPL

GPL

Конвертация речи в текстовый формат.

-

+

Грамматическая проверка сообщения.

+

-

Наличие полноценной документации.

-

-

Наличие бизнес-логики.

-

-


Существующие модули помогают распознать речевой сигнал в процессе соединения, но не имеют функции ответа по результатам распознавания, что говорит об отсутствии у модулей свойства интерактивности. Эту проблему должен решить Asterisk-модуль sip_response, основная задача которого - обеспечить полноценный диалог с клиентом любой целевой организации с минимальным вмешательством работников этой организации. Автоматизация подобного рода позволяет достичь главной цели бизнеса - максимизации прибыли при минимизации издержек.

Выводы по разделу


Основной целью данного раздела являлся описание системы IP-телефонии как предметной области данной работы. В рамках данного раздела описана постановка задачи, подкрепленная перечнем проанализированных требований к разрабатываемому программному продукту. Далее сделан анализ предметной области с целью введения потенциальных заказчиков в домен работы модуля sip_response. В заключение проведен анализ как платформ IP-телефонии с целью осознанного выбора базовой платформы для разработки, так и аналогичных модулей - конкурентов модуля sip_response, умеющих распознавать речь с помощью протокола.

2. Проектирование информационной системы


На стадии проектирования информационная система обретает собственный облик, отличный от других систем. Именно на этом этапе происходит формирование логики работы программного продукта перед дальнейшим переносом в исходный код.

В данном разделе ВКР описана основная концепция системы, выделена идея, которая отображена в формате UML-диаграмм. Далее в разделе приведено описание проектирования хранилища данных, состоящего из двух баз данных - БД приложения sip_response и БД клиентов организации (в данном случае банка).

 

2.1 Разработка UML-диаграмм


2.1.1 Разработка моделей AS-IS

Модель AS-IS - модель существующего состояния организации (в переводе с английского означает "как есть"). Данная модель позволяет систематизировать протекающие в данный момент процессы, а также используемые информационные объекты. На основе этого выявляются узкие места в организации и взаимодействии бизнес-процессов, определяется необходимость тех или иных изменения в существующей структуре. Такую модель часто называют функциональной и выполняют с использованием различных графических нотаций и case-средств. На этапе построения модели AS-IS важным считается строить максимально приближенную к действительности модель, основанную на реальных потоках процессов, а не на их идеализированном представлении.

В разработанном комплексе диаграмм UML в качестве моделей AS-IS воспринята та модель процессов организации, которая существовала до начала использования модуля IP-телефонии sip_response. Модель AS-IS описана в виде диаграммы вариантов использования, показанной на рисунке 2.2.1 Данная диаграмма показывает следующий подход к обработке запросов клиентов. В любом случае в любой момент времени на запрос отвечает оператор первой линии технической поддержки. Перенаправление на рабочую станцию оператора осуществляет диалплан сконфигурированной системы Asterisk. После консультации и удовлетворения потребности пользователя в информации вызов завершается. Однако даже после вызова происходит рутинная работа со стороны оператора. Оператор протоколирует сведения о вызове через специальное приложение для работы с базой данных организации.

Рисунок 2.2.1 - диаграмма вариантов использования (use-case) до внедрения модуля sip_response

Данный подход к клиентскому обслуживанию имеет существенные недостатки. В первую очередь, неэффективное использование ресурсов оператора в принципе. В данной модели человек должен ответить на любой запрос, даже тот, ответ на который может быть сгенерирован автоматически (например, расписание поездов или баланс на счете клиента). Во-вторых, наличие дополнительных издержек в финансовом плане организации, связанных с содержанием многочисленного штаба операторов call-центра, закупкой и поддержкой оборудования, используемого операторами (компьютеры, телефоны). Реализация модуля sip_response в бизнес-процессах организации позволит избавиться от этих проблем.

2.1.2 Разработка моделей TO-BE

Проектирование информационных систем и управление процессами подразумевает построение модели AS-IS и дальнейший переход к модели TO-BE, что является залогом автоматизации "правильных", усовершенствованных процессов.

TO-BE - модель "как должно быть". Как правило, данная модель создается на основе AS-IS, с устранением недостатков в существующей организации бизнес-процессов, а также с их совершенствованием и оптимизацией. Это достигается за счет устранения выявленных на базе анализа AS-IS узких мест. В традиционном реинжиниринге именно на основе модели TO-BE рекомендуется производить автоматизацию бизнес-процессов и проектировать информационные системы. Подразумевается, что это позволяет существенно снизить риск проявления автоматизации как исключительно источника затрат из-за автоматизации несовершенных процессов.

В разработанном комплексе диаграмм UML в качестве моделей TO-BE можно представить следующие виды диаграмм:

1)      диаграмма вариантов использования;

2)      диаграмма деятельности;

3)      диаграмма состояний;

4)      диаграмма развертывания;

5)      диаграмма последовательности;

6)      диаграмма компонентов;

7)      диаграмма классов.

 

2.1.2.1 Диаграмма вариантов использования (use-case diagram)

Диаграмма вариантов использования - диаграмма, на которой изображаются отношения между актерами и вариантами использования.

Полный вариант диаграммы вариантов использования показан в приложении А. Основными компонентами данной диаграммы являются актеры и варианты использования.

Диаграмма включает в себя следующих актеров:

)        пользователь системы - главный актер в системе, который передает запрос и принимает ответ на него, а также может в любой момент прервать соединение;

2)      диалплан IP-телефонии - механизм управления модулем sip_response от лица системы IP-телефонии Asterisk; подтверждает завершение вызова и выводит сообщение клиенту системы;

)        специалист технической поддержки - принимает пользовательский запрос и отвечает на него вместо автоматизированной системы, у которой недостаточно данных для самостоятельного ответа.

Диаграмма включает в себя следующие варианты использования:

)        запрос в службу технической поддержки организации;

2)      формирование ответа на запрос (включает в себя процесс запроса в службу поддержки, а также подпроцессы преобразования сообщения в текстовый формат, проверку контекста запроса и аутентификацию пользователя);

)        вывод сгенерированной фразы (включает в себя процессы формирования ответа на запрос и самого факта запроса в службу технической поддержки, а также подпроцесс преобразования сообщения из текстового формата в речевой);

)        завершение вызова (включает запись информации о вызове в базу данных);

)        перенаправление вызова специалисту центра технической поддержки.

Подводя итоги данного анализа, можно отметить, что проектируемая система позволит решить проблемы и искоренить недостатки бизнес-процессов традиционной модели call-центра организации.

 

2.1.2.2 Диаграмма деятельности (activity diagram)

Диаграммы деятельности - частный случай диаграмм состояний. Они позволяют реализовать в языке UML особенности процедурного и синхронного управления, обусловленного завершением внутренних действий и деятельности.

Диаграмму деятельности можно увидеть в приложении А. Данная UML-модель показывает концепцию модуля sip_response как структуру, совершающую определенное действие в определенный момент времени. Диаграмма имеет несколько видов деятельности, процессы которых разделены на несколько подсистем:

)        Диалплан IP-телефонии - данная подсистема воспроизводит пользователю стартовый вопрос, ответ на пользовательский запрос, сгенерированный модулем sip_response, перенаправляет вызов в центр технической поддержки, а также обрабатывает процесс завершения вызова;

2)      Модуль распознавания речи - данная подсистема в качестве основной задачи имеет процесс преобразование пользовательского запроса из речевого формата в текстовый посредством запросов к API внешней системы распознавания речи Google Speech;

)        Модуль контроля вызова - данный модуль обрабатывает множество условий, от которых зависит результат ответа на пользовательский запрос и запускает процессы формирования ответа на запрос, аутентификации пользователя, а также записи в базу данных;

)        Интерфейс БД - данная подсистема отправляет запросы к базам данных, полученные от модуля контроля вызова, и передает их в окончательном итоге;

)        Хранилище данных - под хранилищем данных представлены 2 базы данных - БД организации-клиента и БД модуля sip_response, из которых считывается информация подсистемами модуля sip_response.

 

2.1.2.3 Диаграмма состояний (state diagram)

Диаграмма состояний показывает, как объект переходит из одного состояния в другое. Диаграммы такого вида служат для моделирования динамических аспектов системы.

Диаграмму состояния, разработанную в ходе выполнения ВКР, можно увидеть в приложении А. Характерными чертами модуля sip_response, которые ярко выражены в данной модели, являются контролируемая цикличность, и взаимосвязь компонентов и операций используемых подсистем.

В качестве точки входа в диаграмме показан процесс пользовательского запроса в систему IP-телефонии. Первым шагом работы модуля sip_response является прием ссылки на аудиофайл с записанным клиентским вызовом от диалплана IP-телефонии. В свою очередь, диалплан получает пользовательский вызов через Интернет-соединение.

Данная диаграмма показывает следующие состояния работы модуля sip_response:

)        преобразование ответа в текстовый формат - голосовое сообщение пользователя преобразуется в текстовый формат, при этом текст хранится в файле;

2)      аутентификация пользователя - после обработки клиентского запроса происходит процесс подтверждения личности пользователя на основании данных, которые пользователь сообщил системе;

)        формирование ответа на клиентский запрос - после подтверждения личности пользователя система генерирует полноценный ответ на запрос на основании найденного запроса и данных из клиентской БД;

)        преобразование ответа в речевой формат - сформированный текст запроса преобразуется в голосовое сообщение с помощью запроса к системе обработки речевых сигналов;

)        вывод голосового сообщения - диалплан воспроизводит пользователю сформированное голосовое сообщение, ожидая его ответ;

)        соединение со специалистом - система может перейти в данное состояние только в том случае, если система не нашла запрос, удовлетворяющий потребностям клиента; в таком случае происходит ручная обработка запроса специалистом центра технической поддержки;

)        завершение соединения - система может перейти в данное состояние в любой момент времени, когда пользователь повесил трубку, тем самым разорвав соединение с системой; на данном этапе происходит обработка данных о вызове и запись сформированной информации в базу данных.

В качестве точки выхода система имеет процесс разрыва соединения с абонентом. В таком случае для повторного вызова пользователь будет вынужден начать с нового запроса, перейдя на точку входа состояний системы. Также в диаграмме показано хранилище данных в виде БД модуля sip_response, в которую записывается информация о соединениях, обработанных модулем sip_response.

 

2.1.2.4 Диаграмма развертывания (deployment diagram)

Диаграмма развертывания - диаграмма, на которой представлены узлы выполнения программных компонентов реального времени, а также процессов и объектов.

Диаграмму развертывания, разработанную в ходе выполнения ВКР, можно увидеть в приложении А. В диаграмме наиболее пристальное внимание уделяется отображению концепции модуля sip_response как комплекса аппаратного и программного обеспечения. Данная модель описывает все шаги, которые проходит вызов пользователя и его последующий запрос, для обеспечения корректной и полнофункциональной работы модуля.

Список компонентов, показанных на диаграмме развертывания:

)        телефон пользователя, с которого пользователь совершает вызов в систему;

2)      банк каналов - инструмент преобразования аналогового сигнала, полученного от линии АТС, в сетевые пакеты, которые впоследствии передаются по IP-сети;

)        физический сервер - представление вычислительной машины, на которой происходят все операции по обработке вызова;

)        операционная система - ПО абстракции пользовательских программ от особенностей и спецификаций аппаратного обеспечения на машине;

)        система IP-телефонии - ПО, обрабатывающее пользовательские запросы;

)        модуль IP-телефонии sip_response - объект проектирования данной работы;

)        СУБД PostgreSQL - система, которая управляет базами данных, используемыми в процессе работы модуля sip_response;

)        телефон специалиста - устройство, на которое система IP-телефонии перенаправляет запрос в том случае, если модуль sip_response его не может обработать;

)        рабочая станция специалиста - место обработки пользовательского запроса оператором центра технической поддержки. Под рабочей станцией подразумевается офис технической поддержки.

 

2.1.2.5 Диаграмма последовательности (sequence diagram)

Диаграмма последовательности относится к диаграммам, описывающим поведенческие аспекты системы, при этом рассматривая взаимодействие объектов во времени.

В рамках данной выпускной квалификационной работы спроектированы две диаграммы последовательности. Диаграмма последовательности, описывающая обработку клиентского запроса, показана на рисунке 2.1.2.5.1.

Рисунок 2.1.2.5.1 - диаграмма последовательности обработки клиентского запроса

Данная диаграмма описывает обработку запроса модулем IP-телефонии sip_response в состоянии, когда запрос обработан успешно. В данном случае сам запрос не является чрезвычайно сложным для модуля и соединение с клиентом не разорвано. Каждый компонент схемы (клиент как актер, подсистемы модуля как activity-классы) выполняет определенную операцию, результатом которой является перенос управления работой информационной системы к другому компоненту.

Исключение составляет процедура аутентификации, где вместо перехода работы модуля на следующий этап происходит дополнительная проверка пользовательских данных в рамках того же самого компонента. Работа модуля показывается в виде непрерывной последовательности операций.

Диаграмма последовательности процесса обработки разрыва соединения показана на рисунке 2.1.2.5.2.

Рисунок 2.1.2.5.2 - диаграмма последовательности процесса обработки разрыва соединения

Данная диаграмма описывает последовательность действий модуля после завершения соединения с клиентом и обработки клиентского запроса в частности. Задачей совместной работы структурных компонентов диаграммы является запись в БД модуля sip_response информации о соединении (дата начала и окончания, текст запроса, факт успешной обработки запроса системой, факт перенаправления запроса в центр поддержки):

)        диалплан вызывает подсистему контроля вызова через основную подсистему для записи информации о вызове в базу данных;

2)      подсистема контроля вызова фиксирует данные соединения с пользователем и отправляет их в базу модуля sip_response через SQL-запрос;

)        запрос проходит через интерфейс базы данных, установивший соединение с СУБД PostgreSQL.

 


2.1.2.6 Диаграмма компонентов (component diagram)

Диаграмма компонентов описывает особенности физического представления системы. Диаграмма компонентов позволяет определить архитектуру разрабатываемой системы, установив зависимости между программными компонентами проектируемой системы.

Диаграмму компонентов, можно увидеть в приложении А. На диаграмме указаны следующие компоненты:

1)      система IP-телефонии Asterisk;

2)      диалплан как компонент системы IP-телефонии;

)        модуль системы IP-телефонии sip_response (объект проектирования данной выпускной квалификационной работы);

)        подсистемы модуля sip_response (основная подсистема, подсистема контроля вызова, интерфейс БД);

)        клиентская БД, в которой хранятся сведения о клиентах организации;

)        БД модуля sip_response, в которой хранится информация, необходимая для обработки пользовательского запроса;

)        СУБД PostgreSQL, которая управляет доступом к данным БД, перечисленных выше;

)        хранилище аудиофайлов, представленное в виде директории в файловой системе сервера;

)        транскодер аудиофайлов, преобразующий аудиофайлы в формат wav и gsm;

)        система распознавания речи Google Speech.

Основные процессы взаимодействия между компонентами:

взаимодействие между пользователем и системой IP-телефонии (диалплан записывает пользовательский запрос, отправляет его на обработку в модуль sip_response, и по окончанию обработки отправляет пользователю, сгенерированный модулем ответ на запрос);

взаимодействие между основной подсистемой и подсистемой обработки речевых сигналов (основная подсистема отправляет запрос на преобразование пользовательского запроса из речевого формата в текстовый);

взаимодействие между подсистемой обработки речевых сигналов и транскодером FFmpeg (транскодер преобразовывает аудиофайлы в форматы wav и gsm, отправляя ссылку на сгенерированные файлы подсистеме обработки речевых сигналов);

взаимодействие между подсистемой обработки речевых сигналов и системой распознавания речи Google Speech (подсистема обработки речевых сигналов отправляет запрос на распознавание в Google Speech API через модуль Python SpeechRecognition и получает ответ в виде текста, записывая его в файл);

взаимодействие между основной подсистемой и подсистемой контроля вызовов (основная подсистема вызывает функции поиска запроса, аутентификации и генерирования ответа на пользовательский запрос);

взаимодействие между подсистемой контроля вызовов и интерфейсом БД (подсистема контроля вызова отправляет запрос на выборку или вставку данных в базу через интерфейс);

взаимодействие между подсистемой контроля вызовов и хранилищем аудиофайлов (подсистема контроля вызовов находит по абсолютному пути к файлу необходимую фразу-шаблон и вставляет её в ответ пользователю);

взаимодействие между интерфейсом БД и базами данных (интерфейс напрямую общается с клиентской БД и с БД модуля, отправляя SQL-запросы, полученные от подсистемы контроля вызовов).

2.2 Проектирование модели хранилища информации


С точки зрения теории разработку модели хранилища информации можно разделить на 5 стадий: выбора СУБД, формализации, графического отображения, реализации и проверки корректности схемы БД. Перед началом разработки модели рассмотрено встроенное хранилище данных системы IP-телефонии Asterisk - NoSQL базу данных BerkleyDB, которая данные в формате ключ-значение. В ходе анализа сформулирована мысль о непригодности данного формата хранения информации для нужд модуля sip_response, поэтому хранилище информации разрабатывалось независимо от решения в системе Asterisk.

На стадии выбора РСУБД проведен анализ существующих решений на рынке и выбор одной из рассматриваемых платформ. Выбор пал на реляционные базы данных в виду всеобщей популярности данной модели хранилища, а также простоте дальнейшей эксплуатации по сравнению с NoSQL-решениями, где в процессе эксплуатации администратор должен преодолеть предварительный порог по обучению работе с целевой базой данных.

Среди наиболее популярных РСУБД (PostgreSQL, MySQL, SQLite, Firebird, Oracle, MS SQL) для реализации хранилища информации выбрана платформа PostgreSQL. Выбор сделан по той причине, что PostgreSQL является продуктом СПО, имеет открытый исходный код, проста в эксплуатации небольших баз данных и имеет более высокий темп развития по сравнению с аналогами.

На стадии формализации сформирована схема базы данных встраиваемого модуля Asterisk sip_response, распределены данные по таблицам в соответствии с теориями нормальных форм, выделены сущности, атрибуты, ключи, связи между таблицами - компоненты, формирующие БД.

Стадия применения графических средств отображения модели реализована инструментом визуального моделирования Sparx Enterprise Architect посредством добавления таблиц, атрибутов, формирования первичных и внешних ключей и визуализации конечной схемы БД.

Стадия реализации состояла заключалась в переносе структурной схемы хранилища данных непосредственно в РСУБД посредством запуска сгенерированного SQL-кода.

Стадия проверки заключалась в непрерывном тестировании использования сущностей баз данных в процессе тестирования работы приложения. В ходе тестирования обнаружены и исправлены несколько логических ошибок, допущенных в ходе проектирования.

2.2.1 Выделение сущностей, атрибутов, ключей, связей

Сущность базы данных - это непосредственно сам элемент, хранящийся в базе. Атрибут - название столбца в БД. Первичный ключ БД - уникальное значение, по которому идентифицируется запись (строка) в таблице. В правильно спроектированной таблице должен быть обязательно один первичный ключ. Внешний ключ БД - атрибут, значения которого связаны со значениями первичного ключа другой таблицы. С помощью внешнего ключа можно создать связи между таблицами. Внешний ключ также может играть роль первичного ключа таблицы. Связи в БД позволяют моделировать отношения между таблицами базы.

В процессе формализации предметной области БД созданы 2 базы данных: клиентская база данных customers, содержащая необходимую информацию о клиентах организации ООО "ПриветБанк" и база данных sip_response, в которой находится информация, необходимая для контроля вызова модулем sip_response, в рамках которого генерируется автоматизированный ответ на клиентский запрос.

Распределенная архитектура баз данных обеспечивает мобильность БД, сокращение времени запросов и отсутствие избыточности в элементах базы данных. Базы данных спроектированы в соответствии с теорией пяти нормальных форм:

) значения всех атрибутов таблицы атомарны (неделимы);

) каждый неключевой атрибут функционально полно зависит от первичного ключа таблицы;

) каждый неключевой атрибут нетранзитивно зависит от первичного ключа (т.е. зависит только от первичного ключа, и больше ни от одного другого атрибута);

) отсутствуют многозначные зависимости, не являющиеся функциональными зависимостями;

) любая зависимость определяется только его возможными ключами таблицы.

2.2.1.1 Проектирование клиентской базы данных

В рамках данной ВКР смоделирована БД организации, основным назначением которой является хранение данных о пользователях услугами организации и состоянии их учетной записи.

В данном случае спроектирована база данных ООО "ПриветБанк". Всего в рамках проектируемой БД выделены 4 сущности: клиенты банка, доступные программы банка, платежные транзакции, а также внешняя информация о банке (такая, как курс обмена валют и новости). Дополнительно спроектировано несколько связей "многие-ко-многим" в виде отдельных таблиц. Всего база данных customers содержит 12 таблиц.

Статическая информация о клиентах банка находится в трех таблицах: customers, customers_accounts и auth. Таблица customers содержит уникальный ID клиентов банка, а также их имена, фамилии, отчества и дату рождения.

Несмотря на создание уникальных атрибутов вместе с таблицей, данные атрибуты будут храниться отдельно внутри последовательностей. Это особенность СУБД PostgreSQL - хранить ID записи только тогда, когда нужно разработчику.

Таблица customers_accounts содержит банковские счета, прикрепленные к клиентам банка. В данном случае присутствует связь "один ко многим", где связаны атрибут customer_id таблицы customers_accounts и атрибут id таблицы customers. Дополнительно каждый счет имеет свой уникальный ID, а также состояние баланса на банковском счете.

Таблица auth содержит данные, необходимые для распознавания личности. Кроме своих инициалов, в общении с модулем sip_response пользователь должен назвать номер своей кредитной карты, CVV-код на обратной стороне карты, а также код доступа к карте. Данные должны совпадать с значениями в таблице auth, иначе в доступе к информации по запросу будет отказано.

Сущность финансовых транзакций описана в таблице transactions. Каждая финансовая транзакция имеет собственный уникальный ID. Также в таблице записан партнер транзакции (это может быть другой банковский счет, оператор сотовой связи и т.д.), формат транзакции (cash-in, где баланс пополняется или cash-out где баланс уменьшается) и сумма транзакции.

Сущность доступных в банке программ описана в таблицах credits, deposits и pension_programs. В данных трех таблицах записана информация о доступных в банке кредитах, вкладах и пенсионных программах. Также в таблицах хранятся недоступные, однако используемые клиентами услуги. У каждой услуги есть собственный уникальный ID, название, описание, процентная ставка и временной срок (если это кредит или вклад). Доступ к данным подобного рода осуществляется в модуле sip_response без дополнительной аутентификации.

Связи между клиентами банка и услугами, которыми они пользуются описываются в БД customers как отдельные таблицы, где присутствуют связи "многие-ко-многим". Данные связи олицетворяют 3 таблицы: customers_credits, customers_deposits и customers_pensions. В данных таблицах рассматриваются связи пользовательских ID и ID банковских услуг, состояние баланса в рамках программы (например, оставшаяся сумма погашения кредита или накопившаяся сумма по вкладу), а также срок окончания действия услуги (если это не пенсионная программа).

Дополнительно БД customers также хранит данные, доступ к которым может быть предоставлен без аутентификации. Информацией, указанной в 2 таблицах news и exchange_rate, может воспользоваться любой полноправный гражданин, даже если он не является клиентом банка. Таблица news хранит последние новости банка, состоящие из даты и полноценного описания.

Таблица exchange_rate хранит свежие данные о курсе валют - цифры по сумме покупки и продажи, а также уникальный ID самой валюты.

Дополнительно хотелось подчеркнуть, что в рамках ВКР происходила имитация не всей базы данных клиентов банка, а только той части, необходимой первой версии модуля sip_response для ответов на базовые пользовательские запросы.

2.2.1.2 Проектирование базы данных информационной системы

В рамках проектируемой ИС смоделирована база данных sip_response, отвечающая за хранение данных, необходимых для функционирования модуля sip_response. Основным назначением данных является подсказка модулю sip_response в выборе наиболее точного запроса, удовлетворяющего потребностям пользователя. БД sip_response состоит из 10 таблиц.

Всего в спроектированной базе данных можно выделить 3 основные сущности: база запросов, на которые может ответить система, база метаданных, помогающая выбрать запрос наиболее точно, а также журнал с историей вызовов, обработанных модулем sip_response. Дополнительно база запросов и база метаданных образуют отдельные таблицы, хранящие связи между сущностями в формате "многие-ко-многим".

База запросов описана в таблице requests. Эту таблицу можно считать основной, так как именно из нее модуль sip_response достает конечный запрос и спрашивает пользователя, верно ли система поняла его потребности. Каждый запрос содержит собственный уникальный ID, формулировку запроса, статус запроса (требует аутентификацию или нет), а также путь в файловой системе к аудиофайлу, в котором проигрывается формулировка запроса.

В дальнейшем будет показано, что почти все текстовые данные базы sip_response ссылаются на относительные пути к аудиофайлам, из которых впоследствии "склеивается" полноценный запрос, который система возвращает пользователю.

Комплекс метаданных состоит из 4-х таблиц: keywords, answers, templates и statements. Таблица keywords содержит список ключевых слов, которые могут быть связаны с запросами. Именно на основании ключевых слов система может определиться с тем, связан ли запрос с клиентской потребностью.

Таблица answers содержит шаблонные фразы, которые являются частью ответа, отдаваемого пользователю. Примером может быть фраза "История ваших кредитов" или "Название пенсионной программы". В таблице также содержатся ссылки на файл в локальной файловой системе.

Таблица templates также содержит шаблонные фразы, участвующие в формировании ответа пользователю. Однако части этих фраз обычно используются в попытках наиболее точно узнать пожелания пользователя. Примером может быть фраза "Ваш запрос". В таблице также содержатся ссылки на файл в локальной файловой системе.

Таблица statements содержит SQL-запросы в текстовом формате. Эти запросы впоследствии используются модулем sip_response для поиска подходящего ответа в клиентской базе данных. Например, в базе хранится команда запроса для нахождения ID пользовательской транзакции, информация о которой должна быть отдана пользователю.

Связи между базой знаний и метаданными хранятся в отдельных 4-х таблицах requests_answers, requests_statements, requests_templates и requests_keywords. Именно в этих таблицах каждый запрос имеет связь с информацией, необходимой для точного ответа на запрос. Именно в подобных таблицах можно найти список ключевых слов, связанных с конкретным запросом или составные части, формирующие в совокупности ответ на запрос (таблицы requests_answers и requests_statements соответственно). В каждой таблице описывается связи сущностей БД "многие-ко-многим".

Также в БД sip_response описывается сущность журнала вызовов, описанная таблицей call_history. После каждого вызова пользователя, вне зависимости от результата записываются данные о звонке, обработанном модулем sip_response. В таблице содержится уникальный ID звонка, ID, отмеченный системой Asterisk в атрибуте call_agi_id, время завершения вызова, ссылка на сгенерированный аудиофайл ответа пользователю, ID запроса из таблицы requests, ID клиента из БД customers и статус ответа пользователю (успешно/не успешно/перенаправление в центр технической поддержки).

Таким образом, спроектирована отдельная база данных для модуля sip_response, удовлетворяющая всем необходимым требованиям для решения задач, поставленных перед разрабатываемой системой.

2.2.2 Проектирование диаграмм "сущность-связь"

Для наглядности предметной области спроектированы диаграммы БД "сущность-связь" с применением графических средств отображения модели. В качестве средства визуализации использован программный продукт EA 12. Сначала созданы таблицы проектируемой БД. Затем добавлены атрибуты с выделением первичных ключей и присвоением ограничения "NOT NULL" для некоторых атрибутов. Напоследок средствами EA проведена визуализация полученной базы данных с последующим нанесением связей между таблицами. В приложении Б показаны итоговые физические схемы двух БД: клиентской БД и БД модуля sip_response.

2.3 Выводы по разделу


Основной задачей данного раздела работы проектирование модуля информационной системы IP-телефонии sip_response как полноценного программного продукта. сформирована концепция системы, описана логика работы модуля в виде UML-диаграмм. Далее в разделе спроектировано хранилище данных, состоящее из двух баз данных - БД модуля sip_response и БД клиентов организации (в данном случае ООО "ПриветБанк").

3. Реализация информационной системы


В разделе приведено описание по формированию тестового окружения, реализация которого наиболее близка к среде целевой организации. Далее описывается создание баз данных, необходимых для работы модуля. Затем следует основная часть работы - реализация проекта sip_response как приложения, осуществляющего общение с платформой Asterisk через шлюзовой интерфейс AGI. Реализация проекта расписана по частям, каждая из которых охватывает отдельный модуль системы. После этапа реализации описан процесс непрерывного тестирования системы в совокупности с платформой IP-телефонии Asterisk. В заключение раздела подводится итог проделанной работы путем описания всех реализованных требований, описанных в первом разделе выпускной квалификационной работы, а также конкретный путь реализации и преимущества, которые несет в себе реализация работы модуля sip_response.

3.1 Формирование окружения для разработки системы


Одним из важнейших в разработке архитектуры системы является подбор необходимых инструментов. Ключевыми факторами подбора являлись формат лицензии (открытый или проприетарный продукт) и популярность на рынке существующих решений. В рамках реализации модуля sip_response выделено несколько функций, под каждую из которых отдельно подбирался инструмент.

)        Операционная система. Основным требованием к окружению создание среды на базе операционной системы GNU/Linux в виду того, что платформа IP-телефонии Asterisk в данный момент может работать только на Linux системах.

Таким образом, средой программного окружения выбрана операционная система Debian 8 (Jessie). В данной операционной системе имеется пакетный менеджер apt, с помощью которого можно устанавливать необходимое ПО.

Тестирование функционала в локальной среде, как и сама разработка, проходила в рамках операционной системы Fedora 24, также построенной на ядре Linux. Основным различием между системами являлся пакетный менеджер. В ОС Fedora используется пакетный менеджер dnf. Однако данный факт не повлиял на работоспособность окружений, как и на сам процесс разработки.

)        СУБД. В рамках реализации модуля sip_response для формирования хранилища данных выбрана СУБД PostgreSQL. Выбор СУБД обоснован в разделе 2.2 данной ВКР.

3)      Язык программирования. В рамках разработки модуля sip_response в качестве языка программирования выбран язык Python. Рабочим интерпретатором языка являлся интерпретатор версии 2.7 сделан принципиальный отказ от разработки под интерпретатор версии 3 ввиду отсутствия его поддержки интерфейсом Asterisk.

Выбор среди существующих решений для реализации интеграции модуля с существующим функционалом Asterisk состоял из девяти языков программирования: Bash, Java, Pascal, Perl, PHP, Python, Ruby, C и Haskell. В конечном итоге для разработки модуля sip_response был выбран язык Python по следующим причинам:

знание языка Python разработчиком модуля sip_response, что впоследствии значительно сократило время, отведенное на разработку;

простота языка и высокая скорость разработки;

поддержка обновленного интерфейса Asterisk;

возможность неограниченного расширения посредством подключаемых модулей;

архитектура языка, позволяющая разбить программу на составные модули, а также отказаться от парадигмы объектно-ориентированного программирования, значительно нагружающую логику программы, как и сам процесс ее выполнения;

высокая скорость эволюции языка, что делает проект актуальным как минимум в ближайшие несколько лет.

)        Интерфейс системы IP-телефонии. В платформе IP-телефонии Asterisk существует возможность расширения существующего функционала за счет выполнения сторонних программ через шлюзовой интерфейс Asterisk (Asterisk Gateway Interface - AGI). Именно AGI выбрано в качестве интерфейса общения между интерпретатором Python и диалпланом Asterisk.

Реализация обмена данными с диалпланом Asterisk проведена через внешний модуль Python под названием pyst2. Процесс обмена данными в основном заключался в передаче состояния системы другой системе посредством переменных. Таким образом, логика работы каждого из компонентов модуля сохранялась только внутри модуля.

)        Среда разработки. Очень важным моментом являлся выбор среды для написания программного кода модуля sip_response. В итоге выбрана связка текстового редактора Sublime Text 3 с необходимыми расширениями для языка Python, а также терминал командной строки Linux, в которой запускался интерпретатор Python 2.7 для тестирования изменений.

Впоследствии в процессе анализа данного решения сделан вывод о том, что можно улучшить подход к написанию программного кода. Дальнейшие разработки продукта будут проводиться в текстовом редакторе Vim, расширенный несколькими плагинами, внутри которого будет запускаться интерпретатор Python.

)        Транскодер аудиофайлов. Необходимо выбрать инструмент, осуществляющий преобразование аудиофайлов в формат, наиболее подходящий как для системы Asterisk, так и для конвертации в текст.

Платформа Asterisk способна проигрывать аудиофайлы в процессе соединения с клиентом в формате gsm. Для конвертации аудио в формат gsm использовалась утилита sox, запускаемая программой на языке Python в виде выполнения системной командой. Утилита sox, приняв на вход аргумент формата файла, осуществляет его транскодирование в формат gsm, сохраняя результат в новом файле, который впоследствии проигрывается платформой Asterisk.

Для конвертации речи в текст через запрос к внешнему API речевого распознавания наиболее четко работает с аудиофайлами в формате wav. Для конвертации в формат wav использовалась утилита FFmpeg, запускаемая подключаемым Python-модулем pydub. Аналогично функция конвертации файла принимает на вход необходимый исходный формат файла и преобразует его в wav. Предполагалось использовать модуль pydub и в транскодировании в формат gsm, однако возникли проблемы с поддержкой gsm-кодеков утилитой FFmpeg.

)        Интерфейс СУБД. После выбора самой СУБД необходимо также выбрать интерфейс работы с базами данных, через который можно бы осуществить подключение к базе и проводить тестовые запросы. В качестве интерфейса к СУБД PostgreSQL был выбран модуль языка Python psycopg2.

8)      Интерфейс конвертации речи в текст. Для речевого распознавания клиентских запросов решено использовать сторонний инструмент. Это позволило в дальнейшем сократить время на разработку программы, а также сохранить умственные ресурсы разработчика для полноценной концентрации на самом программном продукте. Основной задачей речевого распознавания конвертация запроса клиента, записанного в аудиофайл, в текстовый файл для дальнейшей обработки подсистемой контроля вызова в модуле sip_response.

Для выполнения данной задачи импортирован сторонний модуль Python SpeechRecognition, представляющий собой API для общения с внешними системами речевого распознавания. В качестве систем распознавания использованы две среды: Google Speech API и Wit. ai. Выбор данных систем обосновывается в разделе 3.3.3, где наиболее подробно описывается механизм речевой обработки данных.

)        Интерфейс конвертации текста в речь. В реализации модуля sip_response также выполняется процесс конвертации текста в речевой формат для формирования части полноценного ответа на клиентский запрос перед непосредственным слиянием частей в общий ответ. Для этого использована система Google Speech, позволяющая запрашивать обработку текста в голос на нескольких речевых языках. Взаимодействием с Google Speech управляет сторонний модуль Python gTSS (Google Text-to-Speech), позволяющий упростить процедуру конвертации текста в речь до двух-трех строчек программного кода.

Взаимодействие модуля sip_response с вышеперечисленными инструментами показано на диаграмме компонентов в приложении В. В разделе 2.1.2 наиболее подробно описаны процессы взаимодействия модуля sip_response с внешними системами.

)        Шаблоны ответа на пользовательский запрос. В рамках реализации модуля необходимо подготовить шаблоны для дальнейшего слияния утилитой sip_response в единый ответ для отдачи клиенту в ответ на его запрос. Под шаблоном в данном случае воспринимается кусок фразы, который можно встроить в начало, середину или конец фразы. Дополнительно необходимо реализовать фразы приветствия и прощания с клиентом системы, которые не должны изменяться сторонними программами и быть доступными для воспроизведения диалпланом Asterisk.

В итоге данная проблема решена подготовкой шаблонов-аудиофайлов посредством нескольких запросов в Google Speech API через командную строку Linux. Итогом подготовки шаблонов стал отсортированный перечень аудиофайлов, относительные пути к которым прописаны в базе данных. На рисунке 3.1.2 представлена визуализация дерева аудиофайлов-шаблонов, доступных как для диалплана системы Asterisk, так и для модуля sip_response.

Рисунок 3.1.2 - дерево файловой системы аудиофайлов-шаблонов

Данное дерево файловой системы состоит из следующих узлов:

1)      asterisk - раздел, в котором хранятся готовые фразы для ответа пользователю без необходимости дополнительной обработке. В перечень таких фраз входят запросы на прохождение аутентификации, стартовый вопрос пользователю, перенаправление в систему технической поддержки и т.д.;

2)      builtin - раздел, в котором хранятся конкретные фразы, которые будут являться частями полноценного ответа на пользовательский запрос; в свою очередь фразы отсортированы в файловой системе по трем категорям:

а) answers (для окончательного ответа на конкретный пользовательский запрос, например, состояние транзакции или информация о вкладах пользователя);

б) requests (для воспроизведения формата пользовательского запроса, выбранного системой для дальнейшей обработки);

в) templates (дополнительные фразы, которые могут быть включены и в категорию requests, и в категорию answers).

Все полноценные утилиты установлены через пакетный менеджер операционной системы Debian apt. Подключаемые модули языка Python установлены через менеджер зависимостей pip, предназначенный конкретно для установки модулей Python.

Все реализуемые инструменты находятся в открытом доступе и являются продуктами СПО, позволяющими при необходимости отследить работу программного кода сторонних процедур и разобраться в возможных ошибках работы с внешними инструментами.

Также после ручной установки всех необходимых программ написан отдельный скрипт на языке Bash - языке командной оболочки Linux, который автоматически устанавливает все необходимые утилиты. Работа данного скрипта полностью протестирована и отлажена на новой "пустой среде", созданной запуском отдельного виртуального контейнера.

Далее описываются ключевые инструменты непосредственного самого процесса разработки и тестирования модуля sip_response.

 

.1.1 Система контроля версий

Система контроля версий (CVS) - это система, регистрирующая изменения в одном или нескольких файлах с тем, чтобы в дальнейшем возможность вернуться к определённым старым версиям этих файлов. Ни один из современных проектов разработки ПО не обходится без системы контроля версий ввиду как усложнения архитектуры программы, так и наличия дополнительных окружений, которые необходимо использовать в процессе разработки.

В начале разработки модуля sip_response возникла проблема несовместимости локального и тестового окружений. Установить для тестов дополнительную систему IP-телефонии означало существенное увеличение нагрузки на локальный компьютер, а также нецелесообразность расхода аппаратных ресурсов.

Нужен механизм разделения проекта на разработку в локальном окружении и тестирование в специальном окружении, т.е. разделение отдельных частей программного кода с сохранением общей кодовой базы. Именно поэтому решено использовать версионирование кода посредством CVS.

Выбор среди решений по системам контроля версий проведен достаточно быстро ввиду отсутствия конкуренции на рынке решений. Для разработки выбрана система контроля версий Git, основной концепцией которого являются две составляющие: сохранение изменений в программном коде в виде отдельных кусков (commit), которые впоследствии можно легко откатить назад, а также разделение окружений и задач на несколько ветвей (branch).

В рамках разработки проект sip_response разделен на 3 ветки:

master - ветка со стабильным программным кодом;

testing - ветка для разработки в локальной среде с последующим тестированием на основании входных данных, имитирующих реальные рабочие процессы программного продукта;

intermediate - промежуточный программный код, который проходит через этап тестирование на окружении, аналогичном инфраструктуре организации, где работает как система IP-телефонии Asterisk, так и СУБД PostgreSQL.

Таким образом, путем разделения кодовой базы на несколько веток удалось достигнуть консенсуса между стабильной кодовой базой проекта и его непрерывным совершенствованием.

3.1.2 Контейнеризация тестового окружения

На начальном этапе процесса разработки стояла проблема использования системы IP-телефонии для тестирования работы модуля sip_response. Система IP-телефонии является достаточно тяжеловесным программным обеспечением, которое трудно развернуть на локальной среде и еще труднее поддерживать его в рабочем состоянии. Именно поэтому принято решение развернуть полноценное тестовое окружение с необходимым ПО (в частности, с платформой Asterisk) внутри контейнера. Данное решение можно называть "контейнеризацией" тестового окружения.

Под словом "контейнеризация" понимается виртуализация на уровне операционной системы, т.е. создание изолированного окружения пользовательского уровня ОС, работающего на той же версии ядра ОС, что и среда виртуализации. Преимущества данного подхода заключаются в уменьшении накладных расходов на утилизацию аппаратного обеспечения, так как в данный момент процессор использует только одно ядро ОС, а также возможность быстро развернуть окружение в любой среде, на которой работает ОС типа GNU/Linux.

Программным обеспечением для реализации контейнера на локальной машине, работающей на ОС Fedora 24, являлся такой продукт, как Docker. Docker - программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы, например LXC. Docker позволяет "упаковать" приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.

Инструкция по созданию контейнера описывается как код в отдельном конфигурационном файле - Dockerfile. В качестве основного контейнера взят шаблон asterisk-testsuite из общего репозитория контейнеров Docker Hub. Контейнер asterisk-testsuite содержит не только установленную систему IP-телефонии Asterisk, но и тестовое окружение Asterisk testsuite, позволяющего запускать тесты, проверяющие работу платформы IP-телефонии как единого целого.

После получения конфигурационного файла контейнера проведена его дополнительная доработка посредством добавления команд установки ПО, описанного в данном разделе. После этого запущен процесс сборки контейнера. После успешной сборки готовый контейнер стартовал на локальной среде. В дальнейшем подключение к Docker-контейнеру осуществлялось посредством вызова командной строки интерпретатора Bash и вводом команд, необходимых для конфигурации тестового окружения. В листинге 3.1.2.1 указан скрипт, описывающий перечень процедур, выполненных для развертывания тестового окружения в контейнере.

docker build - t asterisk-testsuite github.com/sboily/asterisk-testsuite. gitrun - i - t asterisk-testsuite /bin/bash ps - a

Листинг 3.1.2.1 - развертывание тестового окружения в Docker-контейнере

3.1.3 Выбор SIP-клиента

Под SIP-клиентом воспринимается программное обеспечение, способное подключаться к серверу IP-телефонии и поддерживать клиентские вызовы к этой системе. По своему существу SIP-клиенты действуют как обычные телефоны, только работают не по АТС, а по IP-сети, передавая данные по локальной или глобальной сети.

Основным назначением SIP-клиентом в разработке и тестировании модуля sip_response являлась имитация вызова к IP-телефонии от лица клиента как часть end-to-end тестирования. Таким образом, совершая вызов к системе IP-телефонии Asterisk, тестировался функционал системы, отдельные части и нововведения в программный код.

Выбор SIP-клиента для разработки основывался на ОС, поддерживаемых программой. Необходимо выбрать тот клиент, который работал бы на операционной системе Fedora. Всего рассмотрено порядка 10-15 клиентов. Задачу выбора усложняли отчетливо видимые недостатки инструментов. Например, утилита Zoiper не поддерживала проигрывание аудиофайлов системой Asterisk, а программа Jitsi могла работать только на Java 7 - устаревшей версии интерпретатора.

В итоге выбран SIP-клиент Ring - полнофункциональный инструмент, с помощью которого наиболее удобно совершать звонки к утилите Asterisk. Перед осуществлением вызовов необходимо сконфигурировать подключение к клиенту сначала источника звонка (использована та же тестовая среда Asterisk, что и в разработке приложения), а затем и адреса назначения (сконфигурирован адрес, который в рамках тестирования имитировал центр технической поддержки организации).

3.2 Реализация баз данных системы


В ходе разработки модуля sip_response реализованы две базы данных в рабочую СУБД PostgeSQL 9.5: клиентская БД customers и база данных модуля sip_response. Процесс реализации разбит на 4 этапа: создание баз данных, создание таблиц, добавление тестовых данных и тестирование запросов средствами языка программирования Python.

Создание баз данных осуществлено посредством подключения к командной строке PostgreSQL и ввода команды CRAETE DATABASE дважды: один раз для создания БД customers и один раз для создания БД sip_response.

Создание таблиц осуществлено посредством наката SQL-скриптов в базы данных, к которым происходило подключение через командную строку. введены команды исполнения скриптов, указанные в листинге 3.2.1, после чего интерпретатор командной строки PostgreSQL поочередно выполнял запросы CREATE TABLE, написанные в скриптах, создавая новые таблицы.

\i sql/create_tables_customers. sql

\i sql/create_tables_sip_response. sql

\i sql/insert_into_customers. sql

\i sql/insert_into_sip_response. sql

Листинг 3.2.1 - выполнение SQL-скриптов создания схемы БД

Далее сгенерированы тестовые данные посредством наката SQL-скриптов с SQL-операторами INSERT. Команды выполнения скриптов также доступны для просмотра в листинге 3.2.1.

Для клиентской базы данных customers в качестве сущности клиента добавлен клиент банка, у которого есть собственный банковский счет, активы в виде вклада, пенсионной программы и пассив в виде кредита. В качестве сущности услуг банка добавлен 1 услуга кредита, 1 услуга вклада и 1 услуга пенсионной программы. Также добавлена тестовая транзакция и данные, необходимые для аутентификации пользователя. Кроме, того, добавлены данные в другие сущности, не связанные напрямую с клиентами и услугами банка напрямую, такие, как новость банка и состояние курса доллара и евро.

Для базы данных sip_response добавлены реальные данные, необходимые для функционирования модуля sip_response. добавлены базовые запросы, которые модуль sip_response должен обрабатывать самостоятельно, ключевые слова, по которым проводится поиск в клиентском запросе, шаблоны ответа пользователю, а также SQL-запросы поиска информации, необходимой для ответа на клиентский запрос. Сущности запросов и сопутствующих метаданных связаны в смежных таблицах БД по уникальным ID. Данные в таблицу call_history заранее планировалось добавлять в процессе работы модуля.

Тестирование запросов к СУБД осуществлялось посредство запуска командной строки интерпретатора Python 2.7, импортированием модуля psycopg2 как интерфейса работы с PostgreSQL и запуском функции подключения к базам данных, имея необходимые данные для полноценного доступа. Дополнительно после этого протестированы отдельные запросы, чтобы проверить корректность их выполнения и понять принцип упаковки данных модулем psycopg2 для последующей обработки результатов запроса.

3.3 Разработка модулей системы


С точки зрения архитектуры модуль sip_response решено разделить на несколько подсистем, которые также можно назвать модулями в терминологии языка Python. Однако, чтобы не путаться в терминологии в рамках данной ВКР, составные части модуля sip_response будут названы подсистемами, а основной запускаемый файл - основным модулем.

Модульный подход имеет гораздо больше преимуществ, чем недостатков. В первую очередь преимуществом является разделение бизнес-логики приложения и отсутствие единой точки отказа. Далее модульный подход имеет преимущество в упрощении задачи сопровождении программы. Гораздо легче найти ошибку в программном коде на 200 строк, чем искать и отлаживать ее в коде на 1000 строк. Дополнительно данный подход является полноценно масштабируемым. В дальнейшем разрабатываемые подсистемы гораздо проще разделить в команде разработчиков и даже между несколькими командами разработчиков.

В случае разработки модуля sip_response выделено несколько подсистем:

1)      диалплан платформы Asterisk extensions. conf;

2)      основной модуль main. py как запускаемый файл;

)        подсистема речевой обработки данных recognition. py;

)        подсистема контроля вызовов control. py;

)        интерфейс работы с базами данных db_interface. py.

Каждая из подсистем отдельно описывается в следующих подразделах ВКР.

3.3.1 Разработка диалплана информационной системы

Любая операция, происходящая с соединением по каналу связи, управляется Asterisk исходя из настроек, указанных в файле диалплана. В операционных системах GNU/Linux полным названием файла диалплана является /etc/asterisk/extensions. conf. В контексте конфигурации диалплана для реализации модуля sip_response подразумевается:

) запуск кода на Python в системе Asterisk;

) последующая конфигурация логики диалплана для обмена данными с модулем.

Запуск стороннего программного кода решается посредством оформления специальных AGI-скриптов. Под аббревиатурой AGI подразумевается шлюзовой интерфейс Asterisk (Asterisk Gateway Interface), позволяющий расширять семантику диалплана Asterisk. Фактически модуль работает в виде отдельного приложения, где исполняемый файл main. py запускается встроенной функцией диалплана AGI. Интерфейс AGI может выполнять программы на многих языках программирования при наличии соответствующих библиотек, однако создателями Asterisk рекомендуется использовать язык Python, выбранный для разработки модуля.

Обмен данными между диалпланом и подсистемами модуля sip_response сконфигурирован путем использования стандартных функций диалплана. Основной концепцией будет передача данных в потоках stdin, stdout и stderr, что является основой межпроцессорного взаимодействия в операционных системах GNU/Linux.

На рисунке 3.3.1.1 показана блок схема, отображающая последовательность обработки вызова диалпланом системы Asterisk в соответствии с заданными условиями.

Рисунок 3.3.1.1 - блок-схема работы диалплана Asterisk

Конфигурация диалплана, описанная специфичным языком конфигурации DSL, разделена на несколько логических частей.

1)      Создание пользователей.

2)      Начало вызова.

3)      Прием вызова и просьба озвучить запрос.

)        Опрос пользователя на корректность данных по распознаванию запроса.

5)      Аутентификация пользователя.

)        Ответ на запрос пользователя.

)        Прерывание вызова.

В приложении В указан отрывок кода конфигурации диалплана Asterisk. Данный перечень команд управляет абонентскими вызовами, предназначенными для обработки модулем sip_response.

3.3.2 Разработка основного модуля

Основным модулем системы является файл main. py. Именно этот файл совершает обмен данными между модулем sip_response и системой IP-телефонии Asterisk, а также выполняет базовые операции, запрашиваемые диалпланом. В основной модуль импортированы как внутренние подсистемы, являющиеся частью приложения, так и AGI-оболочка для общения с Asterisk - модуль pyst и модули стандартной библиотеки Python для работы с системой: sys, os и re.

На рисунке 3.3.2.1 показана блок схема, отображающая последовательность обработки вызова основным файлом модуля sip_response main. py в соответствии с заданными условиями.

Рисунок 3.3.2.1 - блок-схема работы модуля main. py

В самом начале модуль main. py загружает состояние вызова в виде присвоения переменных диалплана локально, а также устанавливая путь к корневой директории аудиофайлов, запрашиваемых пользователем. Основными переменными состояния являются счетчик ключевых слов (keyword_flag) и счетчик запросов (request_flag). Далее принцип работы заключается в исполнении одной из пяти операций, которую запросил диалплан.

1)      Обработка запроса.

2)      Опрос пользователя на корректность распознанного запроса.

3)      Аутентификация.

4)      Генерирование ответа на пользовательский запрос.

5)      Логгирование.

3.3.3 Разработка подсистемы речевой обработки данных

Основным назначением подсистемы речевой обработки данных является работа с аудиоданными, получаемыми и генерируемыми модулем информационной системы IP-телефонии sip_response. Функционал подсистемы разбит на несколько функций, вызываемых как основным модулем main. py, так и системой контроля вызова.

Всего подсистема речевой обработки данных способна выполнять 4 функции.

1)      Конвертация аудиофайлов. Основной целью процесса конвертации является преобразование аудиоданных в тот формат, который наиболее пригоден для обработки целевым компонентом системы, в данном случае системой IP-телефонии.

На данный момент функция работает следующим образом: все запросы по конвертации направляются в модуль pydub, который в свою очередь вызывает FFmpeg. Исключение составляет формат GSM, который преобразуется через утилиту sox.

2)      Преобразование речевого запроса в текстовые данные. На рисунке 3.3.3.1 показана блок схема, отображающая процесс конвертации речевого запроса пользователя в текстовый формат для последующей обработки подсистемой контроля вызовов.

Рисунок 3.3.3.1 - блок-схема работы процесса конвертации речевого запроса

)        Преобразование текстовых данных в речевой запрос. Процесс переноса текстовых данных в речь кажется наиболее сложным, чем обратный процесс распознавания человеческой речи. Однако данная функция, необходимая модулю sip_response для вставки клиентских данных из БД в полный ответ, также отдается на выполнение внешнему API.

В данном случае используется внешний Python-модуль gTTS, работающий с Google Speech API. Речь генерируется в том же формате, что и в популярном внешнем сервисе Google Translate. В данном случае при вызове функции просто запускается функция генерирования аудиоданных из API с последующей записью в бинарный файл. В итоге подсистеме контроля вызова на выход отдается ссылка на аудиофайл для дальнейшей генерации полноценного ответа.

)        Слияние файлов. Основной целью процесса слияния файлов является генерация полноценного связанного ответа пользователю посредством последовательного склеивания кусков файла, поступающих на вход функции. Для этого вызывается модуль pydub который в свою очередь посылает запрос на утилиту FFmpeg по слиянию файлов.

3.3.4 Разработка подсистемы контроля вызовов

Подсистема контроля вызовов является основополагающим компонентом модуля информационной системы IP-телефонии sip_response. Именно здесь описывается логика обработки клиентского запроса, а также генерирования ответа на пользовательский запрос.

Для доступа к хранилищу данных используется импортированный интерфейс БД. Данные для доступа к БД подсистема получает из внешнего конфигурационного файла через модуль ConfigParser. Весь функционал подсистемы заключен в несколько функций, вызываемых основным модулем main. py. Ниже приводится полный список функций системы.

1)      Поиск запроса. На рисунке 3.3.4.1 показана блок схема, отображающая процесс поиска запроса в соответствии с текстовыми данными, полученными от пользователя.

Рисунок 3.3.4.1 - блок-схема работы процесса поиска подходящего запроса

2)      Аутентификация по пользовательским данным. На рисунке 3.3.4.2 показана блок схема, отображающая процесс аутентификации пользователя в соответствии с достоверностью запрашиваемых данных.

Рисунок 3.3.4.2 - блок-схема работы процесса аутентификации пользователя

3)      Ответ на запрос пользователя. На рисунке 3.3.4.3 показана блок схема, отображающая процесс формирования полноценного ответа на пользовательский запрос.

Рисунок 3.3.4.3 - блок-схема работы процесса формирования ответа

4)      Логгирование. Процесс логгирования состоит из 2-х операций: подключения к БД и выполнению INSERT-запроса с теми данными, которые поступили на вход от основного модуля.

3.3.5 Разработка интерфейса базы данных

Процедура подключения к базе данных в языке программирования Python представляет собой рутинную операцию, которая в ходе выполнения программы вызывается несколько раз. В разработке проектов на языке Python операции такого рода обычно заключают либо в отдельные функции внутри определенного модуля, либо выносят как отдельный модуль в принципе.

В случае разработки модуля sip_response решено вынести операции создания соединений с БД в виде отдельного модуля, который будет играть роль интерфейса доступа к хранилищу данных. Данный интерфейс называется db_interface. py и работает как модуль, импортируемый в подсистему контроля вызовов. Сам интерфейс для подключения к хранилищу данных использует внешний модуль psycopg2.

Всего интерфейс может выполнять 2 операции, описанные в виде отдельных функций: подключение к базе (функция connect) и запрос к базе (функция query). Данные функции представляют собой лишь оболочку основных методов модуля psycopg2, однако теперь в подсистеме контроля вызовов мы можем выполнить подобные операции уже в одну строку. Таким образом, программный код получается более структурированным и менее громоздким.

3.4 Тестирование работы системы


Тестирование программного обеспечения является одним из ключевых этапов в процессе разработки информационных систем. Именно тестирование ПО позволяет ответить на вопрос, работает ли новая версия программного продукта, успешно ли проведена интеграция новых функций в уже устоявшуюся систему и по каким причинам продукт перестал работать в совокупности с новыми изменениями.

Всего существуют несколько видов тестирования программного обеспечения: unit-тестирование, интеграционное тестирование, smoke-тесты, приемочно-пользовательское тестирование, тесты производительности, end-to-end тестирование, а также нагрузочное тестирование. В итоге на первых стадиях разработки решено использовать стратегию end-to-end тестирования (E2E). E2E-тестирование заключается в тестировании функционала программного продукта со стороны пользователя.

Например, каждое новое введение дополнительного функционала проверялось посредством тестового звонка в систему со стороны SIP-клиента на локальном компьютере с целью проверки именно нового функционала. Таким образом, в разработке можно столкнуться с ошибками изменений, повлиявшими на старый функционал, которые в итоге быстро обнаруживались и редактировались.

В ходе разработки проводилось непрерывное тестирование программного продукта. Вообще после реализации "каркаса" модуля sip_response разработка проводилась следующим образом:

)        переход на ветку testing в системе контроля версий;

2)      написание функционала, контактирующего с внешними API без участия системы IP-телефонии Asterisk с возможностью добавления входных данных;

)        проверка функционала посредством запуска приложения с соответствующими входными данными; корректировка возникших ошибок в коде;

4)      commit изменений в ветке testing переход на ветку intermediate с дальнейшим слиянием изменений из ветки testing коммандой git cherry-pick;

)        доведение исходного кода в ветке intermediate до рабочего состояния;

)        выкат изменений в git-репозиторий и дальнейшая загрузка изменений в тестовую среду IP-телефонии;

)        тестирование функционала путем тестового звонка в систему Asterisk;

)        выявление ошибок и корректировка исходного кода в локальной среде с дальнейшей загрузкой в git-репозиторий;

)        повтор шага 7 до тех пор, пока код из ветки intermediate не станет полноценно работать;

)        слияние работающих изменений в ветку master;

)        проверка работы ветки master; корректировка появившихся ошибок;

)        регистрация изменений; закрытие поставленной задаче в личном to-do листе; переход к новой задаче, возвращаясь к шагу 1 итерации разработки.

Данная стратегия разработки ни в коем случае не является совершенной и имеет свои недостатки. Однако эта стратегия позволила сохранить стабильный код в "боевой" среде, а также проводить тестирование без опасения отказов, после которых нельзя вернуть систему к прежнему состоянию.

В дальнейшем при совершенствовании программного продукта планируются написать отдельные тесты на языке Python, которые будут прогоняться автоматически при загрузке commit-а в удаленный Git-репозиторий.

3.5 Реализация требований к модулю


При постановке задачи на внедрение/разработку ИС определены следующие требования:

) функциональные требования;

) требования к безопасности;

) требования к удобству использования;

) требования к производительности;

) требования к срокам внедрения;

) требования к ПО для сопровождения проекта;

) требования к расходам на сопровождение проекта.

Под функциональными требованиями охарактеризована задача обработки перечня базовых запросов, поступающих в техническую поддержку организации. В данном случае для реализации модуля sip_response для технической поддержки ООО "ПриветБанк" сформирован конкретный перечень запросов.

По итогам тестирования продемонстрировано умение системы отвечать на все запросы, описанные в рамках технических требований. Дополнительно стоит отметить тот факт, что схема обработки запросов является масштабируемой и способной к увеличению перечня базовых запросов, хранимых в БД модуля.

Дополнительно протестировано требование отказоустойчивости и перенаправления вызова в узкоспециализированный центр технической поддержки в случае невозможности точно определить потребности клиента. Перенаправление осуществляет непосредственно сама система IP-телефонии Asterisk, переключая SIP-клиентов на стороне организации.

Требование по безопасности выполнено посредством реализации процесса аутентификации в модуле sip_response для доступа к конфиденциальным данным. Для входа в систему пользователь должен назвать не только свое имя и номер кредитной карты, но и CVV-код, а также код доступа к кредитной карте. Таким образом, спроектированный механизм обеспечения информационной безопасности соответствует трем базовым свойствам: конфиденциальность (только владелец информации о коде доступа к кредитной карте может иметь доступ к данным), целостности (даже при утере/краже клиентской кредитной карты, злоумышленнику недостаточно приобретенной информации для доступа к данным) и доступности (процесс входа в систему в целом напоминает общеизвестную аутентификацию в банкоматах, где также требуется ввести код доступа).

Также соблюдено дополнительное требование по безопасности, а именно хранение данных для доступа к внешним ресурсам за пределами исходного кода. В настоящий момент компоненты модуля sip_response получают данные для доступа из конфигурационного файла myresponse. conf, который находится внутри корневой директории проекта.

Файл myresponse. conf представляет собой структурированный текст конфигурации, описанный в формате ini. Подсистемы получают данные для доступа путем вызова модуля стандартной библиотеки Python ConfigParser, вызывая отдельные параметры внутрь локальных переменных. Таким образом, сейчас во внешнем конфигурационном файле отдельно хранятся данные для доступа к следующим компонентам системамы:

1)      клиентская БД;

2)      БД модуля sip_response;

3)      Google Speech API;

4)      Wit. ai.

Требование к удобству использования выполнено в процессе реализации системы посредством запуска shell-скрипта, устанавливающего необходимое ПО для работы модуля, а также осуществляющего необходимую конфигурацию. Таким образом, процесс настройки окружения модуля sip_response является полностью автоматизированным. Также при разработке отмечен тот факт, что созданная система не имеет каких-либо ярко выраженных проблем, связанных с сопровождением системы.

Требования к производительности рассматривают:

) идентичность поведения системы IP-телефонии в двух ситуациях: до и после установки модуля;

) добавление модулем сравнительного небольшой нагрузки на систему в процессе работы;

) способность асинхронной работы, возможность обработки/удержания нескольких запросов одновременно.

В ходе процесса тестирования работы модуля sip_response доказано удовлетворение всех вышеперечисленных требований по работе окружения системы IP-телефонии. Существующее решение системы по-прежнему отвечает на определенные виды звонков, перенаправляя вызовы к необходимым объектам диалплана.

Нагрузка, добавленная модулем sip_response при активной работе, сравнительно небольшая. Интерпретатор языка Python, в отличие от Java Virtual Machine, потребляет гораздо меньше ресурсов на обработку запросов, существенно выигрывая в производительности запущенной машины в целом. Также разработанный модуль может обрабатывать несколько ресурсов одновременно, обрабатывая несколько запросов к БД одновременно.

Требования по срокам внедрения проекта также успешно выполнены. С большим временным запасом в полгода модуль sip_response спроектирован и реализован, предварительно пройдя этап постановки задачи и анализа требований к системе.

Требования к ПО для сопровождения проекта успешно реализованы в процессе тестирования. установлены, сконфигурированы и протестированы в рабочих процессах приложения все необходимые программные продукты и модули, описанные в первой части ВКР.

Требования к расходам на сопровождение программного продукта также успешно выполнены. Все необходимое ПО для запуска модуля sip_response является свободным программным обеспечением, которое имеет свойство свободного распространения без взимания какой-либо дополнительной платой. Таким образом, основной частью статьи расходов на реализацию модуля будут являться только расходы на рабочие часы разработчика.

Таким образом, итогом этапа реализации модуля информационной системы IP-телефонии Asterisk под названием sip_response стало выполнение полного перечня требований, согласованного в процессе постановки задачи как со стороны заказчика, так и со стороны разработчика информационной системы.

3.6 Выводы по разделу


Основной целью данного раздела ВКР описание ключевого этапа реализации модуля информационной системы IP-телефонии sip_response. Данный этап включал в себя описание таких шагов, как:

1)      формирование окружения проекта, выбор подходящих инструментов для разработки и тестирования;

2)      создание клиентской БД customers и БД модуля sip_response, образующих в комплексе хранилище данных системы;

)        реализация модуля sip_response посредством написания исходного кода проекта, разделенного на несколько взаимосвязанных модулей;

)        процесс непрерывного интеграционного тестирования системы, верификация работы инкрементальных изменений;

)        подведение итогов реализации посредством пересмотра технических требований к проекту и описания шагов, реализованных для выполнения этих требований.

Заключение


По итогам исследований, описанных в данной выпускной квалификационной работе, удалось достичь главной цели - полноценной реализации модуля sip_response, встраиваемого в информационную систему IP-телефонии Asterisk. В конечном итоге создан полноценный программный продукт, готовый для продаж и пригодный для дальнейшего совершенствования и технической поддержки. В рамках работы выполнены следующие задачи:

) анализ предметной области, существующих решений на рынке информационных систем и выбор базовой системы для дальнейшего проектирования модуля;

) постановка задачи, выбор целевого потребителя, формирование концепции проекта, описываемого в работе, выбор необходимых инструментов для реализации;

) проектирование составных компонентов модуля системы IP-телефонии, баз данных, необходимых для поддержки проекта;

) реализация модуля информационной системы IP-телефонии sip_response посредством переноса концепции проекта в исходный код, предварительно выбрав инструменты для формирования окружения и тестирования проекта.

В ходе выпускной квалификационной работы:

1)      проанализирована предметная область;

2)      путем исследований выявлены наиболее актуальные решения в предметной области, выбрана целевая платформа для реализации системного модуля и конкуренты в целевой отрасли;

)        сформированы как общие, так и технические требования к проекту;

)        разработаны модели на языке UML, формирующие и отображающие концепцию как всей информационной системы, так и реализуемого программного продукта в частности;

)        проанализировано, смоделировано и реализовано хранилище данных системы, представляющее собой слияние существующей клиентской базы данных и отдельной базы данных модуля IP-телефонии в логике программного кода;

)        разработан модуль sip_response в виде полноценного встраиваемого программного компонента, позволяющего проводить двухсторонний обмен данными между клиентами и системой IP-телефонии с минимизацией человеческого вмешательства.

В виде дальнейших перспектив планируется:

)        внедрение модуля в рынок свободного программного обеспечения с выкладыванием исходного кода на основе тестовой ситуации в открытый доступ;

2)      интеграция хранилища данных модуля с NoSQL базами данных, такими, имеющими документно-ориентированную структуру (например, MongoDB, DynamoDB и т.д.);

)        укрепление базы знаний: увеличение количества вариантов (use-case), при которых модуль sip_response способен обслужить клиентский запрос без вмешательства персонала организации (т.е. специалистов технической поддержки).

Библиографический список


1.      Чакон С., Штрауб Б. Git для профессионального программиста. - СПб., Питер, 2016 г. - 490 с.

2.      Riggs S. PostgreSQL 9 Administration Cookbook - Second Edition. - Packt, 2015 г. - 504 с.

3.      Дж. ван Меггелен, Ярд Смит, Лейф Маадсен. Asterisk - будущее телефонии/ 4-e издание. - СПб, Питер, 2015 г. - 656 с.

.        Фиайли К. SQL. Руководство по изучению языка. - М., ДМК Пресс, 2014 г. - 454 с.

5.      Turnbull D. The Docker Book: Containerization is the new virtualization. - Amazon, 2014 г. - 268 с.

6.      Лутц М. Изучаем Python/ 4-e издание. - М., Символ-Плюс, 2012 г. - 1280 с.

7.      Introduction to Docker // Youtube. Режим доступа: https: // www.youtube.com/watch? v=Q5POuMHxW-0, свободный (дата обращения: 30.07.2016 г.). - Заголовок с экрана.

8.      Asterisk Tutorial 06 - Asterisk Dialplan Introduction [english] // Youtube. Режим доступа: https: // www.youtube.com/watch? v=UaIx_URUllw, свободный (дата обращения: 30.06.2016 г.). - Заголовок с экрана.

9.      Database Engineering with Enterprise Architect 12 // Youtube. Режим доступа: https: // www.youtube.com/watch? v=LLtp49TU1H8, свободный (дата обращения: 12.03.2016 г.). - Заголовок с экрана.

10.    IP-телефония в компьютерных сетях // Национальный Открытый Университет "ИНТУИТ" | Бесплатное образование. Режим доступа: #"896793.files/image012.gif">

Рисунок Б.2 - физическая схема базы данных модуля sip_response в EA

 

CREATE TABLE customers_credits (SERIAL PRIMARY KEY,_id INT REFERENCES customers (id),_id INT REFERENCES credits (id),DATE NOT NULL,_left NUMERIC (30,2) NOT NULL,customers_credits_id_idx UNIQUE (id)

);

Листинг Б.3 - создание в клиентской базе данных customers таблицы сведений по кредитам клиентов

CREATE TABLE call_history (_id SERIAL PRIMARY KEY,_agi_id BIGINT NOT NULL,_timestamp TIMESTAMP NOT NULL,_number VARCHAR (50),_status VARCHAR (10),_id INT,_id INT,_path VARCHAR (100),

);

Листинг Б.4 - создание в базе данных модуля sip_response таблицы журнала обработанных вызовов

Приложение В

 

Исходный код проекта

if status == 'auth': #verify user identity

#get request field (name/cvv-code/credit card)= agi. get_variable ('auth_subrequest')_request_id = int (agi. get_variable ('user_request_id')). verbose ('auth_subrequest %s' % field)_subdir = 'workflow/auth'_file = request_dir + '/' + request_subdir + '/' + request_file_key + '. ' + request_extension

#build full file name_file = check_extension (request_file, request_extension) #convert if it's not wav_text_file = recognition. speech_to_text (_file, request_dir,_file_key, flag='auth'

)

#convert request to text. verbose ('request_text_file %s' % request_text_file)field == 'name': #call control module function_result, customer_id = control. auth_name (_text_file, user_request_id

). set_variable ('customer_id', customer_id) #get customer id after authentication. verbose ('customer_id: %s' % customer_id):_id = int (agi. get_variable ('customer_id'))_result = control. auth_credentials (, request_text_file, customer_id

)_failed_flag = int (agi. get_variable ('auth_failed_flag'))auth_result == 'success': agi. set_variable ('auth_failed_flag', 0)auth_result == 'failed' and auth_failed_flag == 0: agi. set_variable ('auth_failed_flag', 1)auth_result == 'failed' and auth_failed_flag == 1: auth_result = 'redirect'. set_variable ('auth_result', auth_result) #tell dialplan what's the final result. verbose ('auth_result: %s' % auth_result)

Листинг В.1 - процесс пользовательской аутентификации в запускаемом файле модуля main. py. (убрать курсив в коде)speech_to_text (myfile, directory, key, flag=None):speech_recognition as srConfigParser= sr. Recognizer () #create new object. energy_threshold = 300#set energy threshold. pause_threshold = 2#set appropriate pause threshold

#getting credentials from log file= ConfigParser. ConfigParser (). read ("/var/lib/asterisk/agi-bin/sip_response/myresponse. conf")_key = config. get ('recognition', 'google_api_key')_key = config. get ('recognition', 'wit_api_key')sr. AudioFile (myfile) as source:

#create audio BLOB to recognize= r. listen (source):= r. recognize_google (, key=google_key,='ru-RU'

)

#Google in priority but they have 50 API calls limit

#if Google was broken - go to the nextsr. UnknownValueError, sr. RequestError:= r. recognize_wit (, key=wit_key

)

#generate text file name_file = directory + '/workflow/text/' + keyflag:_file = text_file + '_' + flagopen (text_file, 'w') as text_store:_store. write (text. encode ('utf-8')) text_file

Листинг В.2 - процесс преобразования речевого запроса в текстовый формат модулем recognition. py.

def auth_name (text_file, user_request_id):

#get request textline in open (text_file, 'r'):= line, name, middle_name, year = request. split () [0: 4] #syntax requires correct names and years order, cursor = db_interface. connect (=customer_db_host, port=customer_db_port, db=customer_db_name, user=customer_db_user, password=customer_db_password

)

#get the fact customer exists, pull his id= (

'SELECT id, CONCAT (surname, \' \', name, \' \',_name, \' \', year) FROM customerssurname = \'%s\' AND name = \'%s\'middle_name = \'%s\' AND year = \'%s\'; '

)= db_interface. query (statement, connect, cursor)len (result) > 1:= 'redirect'status, 0len (result) == 0:

#failed authentication

#if no one customer has been found= 'failed'status, 0:= 'success'

#set the customer id if we found any_id = result [0] [0]status, customer_id

Листинг В.3 - аутентификация пользователя по имени в модуле control. py.

; entire macro for authentication process

[macro-auth]

; accept the name of subrequest (customer name, cvv etc.)=> s,1,Playback (sip_response/asterisk/auth_${ARG1})=> n,Record (sip_response/workflow/auth/${request_id}: ${file_extension},5,10,q)=> n,Set (module_call=auth)=> n,Set (auth_subrequest=${ARG1})=> n,AGI (sip_response/main. py)=> n,GotoIf ($ ["${auth_result}" = "failed"]? auth_failed)=> n,GotoIf ($ ["${auth_result}" = "redirect"]? redirect)=> n,MacroExit ()

; go back if authentication failed=> n (auth_failed),Playback (sip_response/asterisk/auth_failed)=> n,Goto (s,1)

; redirect to specialist if there is more than 2 attempts=> n (redirect),Playback (sip_response/asterisk/redirect)=> n,Dial (SIP/caller)=> n,Goto (log,s,1)

; call the logging in case of hangup

[log]=> s,1,Set (module_call=log)=> n,AGI (sip_response/main. py) => n,Hangup

Листинг В.4 - управление процессом пользовательской аутентификации в диалплане Asterisk.

Похожие работы на - Модуль автоматизации обслуживания клиентов предприятия в информационной системе IP-телефонии

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!