Здесь показаны различия между двумя версиями данной страницы.
faq:quality_custom [2019/11/22 13:15] Портнов Алексей [Доработка Dialplan] |
faq:quality_custom [2020/04/05 15:07] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Реализация механизма оценки качества обслуживания (Входящие) ====== | ||
- | [[:faq|Обартно в FAQ...]] | ||
- | |||
- | Совершенствование качества сервиса организации - крайне важная составляющая успешной работы компании. Механизм оценки работы оператора будет полезен любому бизнесу. | ||
- | |||
- | В текущей статье предлагаем пример реализации механизма оценки качества клиентом для АТС Askozia. | ||
- | |||
- | ===== Доработка Dialplan ===== | ||
- | |||
- | <note important>На АТС предварительно следует закачать файлы записей вопросов / приветствия. Формат записей WAV (Microsoft) signed 16-bit PCM. \\ | ||
- | Файлы можно для удобства разместить в каталоге: **/storage/usbdisk1/quality/sounds**.\\ | ||
- | В dialplan путь к файлу следует указывать **без** расширения. | ||
- | </note> | ||
- | Для начала дополним логику обработки входящих звонков: | ||
- | |||
- | 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. В черное окно добавьте следующий фрагмент кода: <code> | ||
- | [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() | ||
- | </code> | ||
- | |||
- | В выше приведенном фрагменте кода Вам необходимо составить правильное наименование контекста.\\ | ||
- | Формат создаваемого контекста:\\ | ||
- | <code> | ||
- | [ID-ПРОВАЙДЕРА-incoming-custom] | ||
- | </code> | ||
- | * **ID-ПРОВАЙДЕРА** - значение, которое вы сохранили на первом шаге данной инструкции. В нашем примере это **SIP-PROVIDER-B63EE3497989BF6597FF8C9DEC77EB49**. | ||
- | ===== Скрипт обработки результата оценки ===== | ||
- | <note important>Файл следует сохранить на АТС по пути **/storage/usbdisk1/quality/quality_agi.php**\\ | ||
- | Создать файл можно используя файловый менеджер [[faq:winscp|WinSCP]]\\ | ||
- | Файлу следует установить права доступа на выполнение. Подключитесь по [[faq:putty|SSH]] и выполните команду <code> | ||
- | chmod +x /storage/usbdisk1/quality/quality_agi.php | ||
- | </code> | ||
- | </note> | ||
- | |||
- | Пример реализации quality_agi.php: | ||
- | |||
- | <code> | ||
- | #!/usr/bin/php | ||
- | <?php | ||
- | require_once 'phpagi.php'; | ||
- | require_once 'globals.php'; | ||
- | |||
- | $agi = new AGI(); | ||
- | $linkedid = $agi->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); | ||
- | </code> | ||
- | |||
- | |||
- | <note warning>Результат оценки будет сохранятся в файлы вида **/storage/usbdisk1/quality/<ID>.log**</note> | ||
- | |||
- | Пример файла: | ||
- | <code> | ||
- | {"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"} | ||
- | |||
- | </code> | ||
- | [[:faq|Обартно в FAQ...]] |