====== Реализация механизма оценки качества обслуживания (Входящие) ======
[[:faq|Обартно в FAQ...]]
Совершенствование качества сервиса организации - крайне важная составляющая успешной работы компании. Механизм оценки работы оператора будет полезен любому бизнесу.
В текущей статье предлагаем пример реализации механизма оценки качества клиентом для АТС MikoPBX.
===== Доработка Dialplan =====
На АТС предварительно следует закачать файлы записей вопросов / приветствия. Формат записей WAV (Microsoft) signed 16-bit PCM. \\
Файлы можно для удобства разместить в каталоге: **/storage/usbdisk1/quality/sounds**.\\
В dialplan путь к файлу следует указывать **без** расширения.
Для начала дополним логику обработки входящих звонков:
1. Перейдите в раздел **Маршрутизация** -> **Провайдеры телефонии**. Откройте для редактирования учетную запись провайдера для редактирования. Скопируйте в адресной строке **ID провайдера**, через которого абоненты звонят Вам в компанию. Обращаем Ваше внимание, что в нашем примере используется **единственный** провайдер Zadarma. Если у Вас настроено подключение **нескольких** провайдеров, то ниже описанные действия необходимо выполнить **для каждого провайдера**.\\ \\
В нашем примере ID провайдера принимает вид: **SIP-PROVIDER-B63EE3497989BF6597FF8C9DEC77EB49**.\\ {{ :providers:2019-02-05_105038.png |}}\\ \\
2. Перейдите в раздел **Система** -> **Кастомизация системных файлов**.\\ {{ :providers:many_hosts:2019-02-04_173507.png |}}\\ \\
3. Откройте для редактирования конфигурационный файл **extensions.conf**. Установите режим "**Добавлять в конец файла**".\\ \\
4. В черное окно добавьте следующий фрагмент кода:
[SIP-PROVIDER-B63EE3497989BF6597FF8C9DEC77EB49-after-dial-custom]
exten => _.!,1,Goto(quality-start,s,1)
same => n,return
[SIP-PROVIDER-B63EE3497989BF6597FF8C9DEC77EB49-outgoing-custom]
exten => _.!,1,Set(DOPTIONS=${DOPTIONS}F(quality-start,s,1))
same => n,return
[quality-start]
exten => _.!,1,NoOp(--- Quality assessment ---)
same => n,ExecIf($[${M_DIALSTATUS}!=ANSWER]?return)
;Описываем путь к файлу завершения разговора. Благодарим за оценку качества.
same => n,Set(filename_bye=/storage/usbdisk1/quality/sounds/bye)
; Описываем пути к файлам опроса.
same => n,Set(filename_1=/storage/usbdisk1/quality/sounds/miko_hello)
same => n,Set(filename_2=/storage/usbdisk1/quality/sounds/q_1)
same => n,Set(filename_3=/storage/usbdisk1/quality/sounds/q_2)
same => n,Set(f_num=0);
same => n,Goto(ivr-quality,s,1)
[ivr-quality]
exten => s,1,NoOP( start ivr quality )
same => n,Set(f_num=$[${f_num} + 1])
same => n,Set(filename=${filename_${f_num}})
same => n,GotoIf($["x${filename}" == "x"]?ivr-quality,bye,1);
same => n,Background(${filename})
same => n,WaitExten(5)
exten => _[1-5],1,NoOP( quality is ${EXTEN})
; AGI скрипт, который сохранит результат оценки разговора клиентом.
same => n,AGI(/storage/usbdisk1/quality/quality_agi.php)
same => n,Goto(ivr-quality,s,1)
exten => _[06-9],Goto(ivr-quality,s,1)
exten => bye,1,ExecIf($["x${filename_bye}" != "x"]?Playback(${filename_bye}));
same => n,Hangup()
В выше приведенном фрагменте кода Вам необходимо составить правильное наименование контекста.\\
Формат создаваемого контекста:\\
[ID-ПРОВАЙДЕРА-outgoing-custom]
[ID-ПРОВАЙДЕРА-after-dial-custom]
* **ID-ПРОВАЙДЕРА** - значение, которое вы сохранили на первом шаге данной инструкции. В нашем примере это **SIP-PROVIDER-B63EE3497989BF6597FF8C9DEC77EB49**.
===== Скрипт обработки результата оценки =====
Файл следует сохранить на АТС по пути **/storage/usbdisk1/quality/quality_agi.php**\\
Создать файл можно используя файловый менеджер [[faq:winscp|WinSCP]]\\
Файлу следует установить права доступа на выполнение. Подключитесь по [[faq:putty|SSH]] и выполните команду
chmod +x /storage/usbdisk1/quality/quality_agi.php
Пример реализации quality_agi.php:
#!/usr/bin/php
get_variable('CDR(linkedid)', true);
$arr = [
'quality' => $agi->request['agi_extension'],
'f_num' => $agi->get_variable('f_num', true),
'filename' => $agi->get_variable('filename', true),
// 'Оцененный оператор:' => $operator,
'linkedid' => $linkedid,
'date' => date('Y-m-d H:i:s'),
'callerid' => $agi->request['agi_callerid']
];
$file_log = '/storage/usbdisk1/quality/'.$linkedid.'.log';
Util::mw_mkdir(dirname($file_log));
file_put_contents($file_log, json_encode($arr)."\n", FILE_APPEND);
Результат оценки будет сохранятся в файлы вида **/storage/usbdisk1/quality/.log**
Пример файла:
{"quality":"1","f_num":"1","filename":"\/offload\/asterisk\/sounds\/other\/miko_hello","linkedid":"mikopbx-1574331248.66","date":"2019-11-21 13:14:13","callerid":"79265775289"}
{"quality":"2","f_num":"2","filename":"beep","linkedid":"mikopbx-1574331248.66","date":"2019-11-21 13:14:15","callerid":"79265775289"}
{"quality":"3","f_num":"3","filename":"\/offload\/asterisk\/sounds\/other\/out_work_times","linkedid":"mikopbx-1574331248.66","date":"2019-11-21 13:14:16","callerid":"79265775289"}
[[:faq|Обартно в FAQ...]]