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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.12.2016
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

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

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

3) Google Speech API;

4) Wit. ai.

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

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

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

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

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

В ходе процесса тестирования работы модуля 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, образующих в комплексе хранилище данных системы;

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

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

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

Заключение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3) укрепление базы знаний: увеличение количества вариантов (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 с.

4. Фиайли К. 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-телефония в компьютерных сетях // Национальный Открытый Университет "ИНТУИТ" | Бесплатное образование. Режим доступа: http://www.intuit.ru/studies/courses/8/8/info, свободный (дата обращения: 12.03.2016 г.). - Заголовок с экрана.

11. Лекция 11: Унифицированный язык визуального моделирования Unified Modeling Language (UML) // Национальный Открытый Университет "ИНТУИТ" | Бесплатное образование. Режим доступа: http://www.intuit.ru/studies/courses/2195/55/lecture/163, свободный (дата обращения: 12.03.2016 г.). - Заголовок с экрана.

12. Asterisk Community. Режим доступа: http://community. asterisk.com, свободный (дата обращения: 12.03.2016г.). - Заголовок с экрана.

13. Распознавание речи в ROS с Google Speech API // Публикации. Режим доступа: https: // habrahabr.ru/post/247539/, свободный (дата обращения:: 12.03.2016 г.). - Заголовок с экрана.

Приложения

Приложение А

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

CREATE TABLE customers_credits (

id SERIAL PRIMARY KEY,

customer_id INT REFERENCES customers (id),

credit_id INT REFERENCES credits (id),

expires DATE NOT NULL,

cash_left NUMERIC (30,2) NOT NULL,

CONSTRAINT customers_credits_id_idx UNIQUE (id)

);

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

CREATE TABLE call_history (

call_id SERIAL PRIMARY KEY,

call_agi_id BIGINT NOT NULL,

call_timestamp TIMESTAMP NOT NULL,

call_number VARCHAR (50),

call_status VARCHAR (10),

request_id INT,

customer_id INT,

answer_path VARCHAR (100),

);

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

Приложение В

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

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

#get request field (name/cvv-code/credit card)

field = agi. get_variable ('auth_subrequest')

user_request_id = int (agi. get_variable ('user_request_id'))

agi. verbose ('auth_subrequest %s' % field)

request_subdir = 'workflow/auth'

request_file = request_dir + '/' + request_subdir + '/' + request_file_key + '. ' + request_extension

#build full file name

request_file = check_extension (request_file, request_extension) #convert if it's not wav

request_text_file = recognition. speech_to_text (

request_file, request_dir,

request_file_key, flag='auth'

)

#convert request to text

agi. verbose ('request_text_file %s' % request_text_file)

if field == 'name': #call control module function

auth_result, customer_id = control. auth_name (

request_text_file, user_request_id

)

agi. set_variable ('customer_id', customer_id) #get customer id after authentication

agi. verbose ('customer_id: %s' % customer_id)

else:

customer_id = int (agi. get_variable ('customer_id'))

auth_result = control. auth_credentials (

field, request_text_file, customer_id

)

auth_failed_flag = int (agi. get_variable ('auth_failed_flag'))

if auth_result == 'success': agi. set_variable ('auth_failed_flag', 0)

elif auth_result == 'failed' and auth_failed_flag == 0: agi. set_variable ('auth_failed_flag', 1)

elif auth_result == 'failed' and auth_failed_flag == 1: auth_result = 'redirect'

agi. set_variable ('auth_result', auth_result) #tell dialplan what's the final result

agi. verbose ('auth_result: %s' % auth_result)

Листинг В.1 - процесс пользовательской аутентификации в запускаемом файле модуля main. py. (убрать курсив в коде)

def speech_to_text (myfile, directory, key, flag=None):

import speech_recognition as sr

import ConfigParser

r = sr. Recognizer () #create new object

r. energy_threshold = 300#set energy threshold

r. pause_threshold = 2#set appropriate pause threshold

#getting credentials from log file

config = ConfigParser. ConfigParser ()

config. read ("/var/lib/asterisk/agi-bin/sip_response/myresponse. conf")

google_key = config. get ('recognition', 'google_api_key')

wit_key = config. get ('recognition', 'wit_api_key')

with sr. AudioFile (myfile) as source:

#create audio BLOB to recognize

audio = r. listen (source)

try:

text = r. recognize_google (

audio, key=google_key,

language='ru-RU'

)

#Google in priority but they have 50 API calls limit

#if Google was broken - go to the next

except sr. UnknownValueError, sr. RequestError:

text = r. recognize_wit (

audio, key=wit_key

)

#generate text file name

text_file = directory + '/workflow/text/' + key

if flag:

text_file = text_file + '_' + flag

with open (text_file, 'w') as text_store:

text_store. write (text. encode ('utf-8'))

return text_file

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

def auth_name (text_file, user_request_id):

#get request text

for line in open (text_file, 'r'):

request = line

surname, name, middle_name, year = request. split () [0: 4] #syntax requires correct names and years order

connect, cursor = db_interface. connect (

host=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

statement = (

'SELECT id, CONCAT (surname, \' \', name, \' \',

middle_name, \' \', year) FROM customers

WHERE surname = \'%s\' AND name = \'%s\'

AND middle_name = \'%s\' AND year = \'%s\'; '

% (surname, name, middle_name, year)

)

result = db_interface. query (statement, connect, cursor)

if len (result) > 1:

status = 'redirect'

return status, 0

elif len (result) == 0:

#failed authentication

#if no one customer has been found

status = 'failed'

return status, 0

else:

status = 'success'

#set the customer id if we found any

customer_id = result [0] [0]

return status, customer_id

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

; entire macro for authentication process

[macro-auth]

; accept the name of subrequest (customer name, cvv etc.)

exten => s,1,Playback (sip_response/asterisk/auth_${ARG1})

same => n,Record (sip_response/workflow/auth/${request_id}: ${file_extension},5,10,q)

same => n,Set (module_call=auth)

same => n,Set (auth_subrequest=${ARG1})

same => n,AGI (sip_response/main. py)

same => n,GotoIf ($ ["${auth_result}" = "failed"]? auth_failed)

same => n,GotoIf ($ ["${auth_result}" = "redirect"]? redirect)

same => n,MacroExit ()

; go back if authentication failed

same => n (auth_failed),Playback (sip_response/asterisk/auth_failed)

same => n,Goto (s,1)

; redirect to specialist if there is more than 2 attempts

same => n (redirect),Playback (sip_response/asterisk/redirect)

same => n,Dial (SIP/caller)

same => n,Goto (log,s,1)

; call the logging in case of hangup

[log]

exten => s,1,Set (module_call=log)

same => n,AGI (sip_response/main. py)

same => n,Hangup

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

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.