Оценка оператора 2.0

звонок клиенту с возможностью оценить последний разговор с оператором

Alexcr

Оценка работы оператора

Общение с клиентами очень важный фактор в развитие бизнеса и лояльности клиентов. Для мониторинга операторов и то как они общаются с вашими клиентами можно прослушивать записи разговоров, но это долго и нудно да и не всегда покажет реальную оценку. Можно еще перезванивать клиентов и спрашивать у них довольны ли они обслуживанием или нет, но это еже более труднозатратнее и труднее. Представлю вам вариант который облегчит эту задачу.  Ранее я писал уже вариант про оценку оператора http://asterisk-service.com/blog/asterisk-1/post/asterisk-18 но не всем подходит оценка во время разговора с оператором, плюс операторы сами могут менять по сути оценку и искажать ее. 

И так есть Asterisk (freepbx) мы научим его перезванивать клиентам и просить оценить оператора из последнего разговора.

Начнем с базы куда будем записывать данные 

По умолчанию freepbx использует mysql, мы добавим в asteriskcdrdb новую таблицу opinion


CREATE TABLE IF NOT EXISTS `opinion` (
  `id` int(11) NOT NULL auto_increment,
  `date-press` varchar(60) NOT NULL,
  `callerid` varchar(15) NOT NULL default '',
  `exten` varchar(15) NOT NULL default '',
  `queues` varchar(15) NOT NULL,
  `opinion` char(1) NOT NULL,
  `time2` int(100) default NULL,
  `uniqueid` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6100 ;

Далее добавим в диалплан наш ИВР для оценки оператора: 

редактируем /etc/asterisk/extensions_custom.conf

[opinion-orig]
exten => _X.,1,NoOp(Statrt IVR)
exten => _X.,n,Answer
exten => _X.,n,Set(CDR(opin)=opinion)
exten => _X.,n,Set(CDR(userfield)=opinion)
exten => _X.,n,Set(TEMPEXTEN=${EXTEN})
exten => _X.,n,Set(COUNT=0)
exten => _X.,n,Set(SETOP=0)
exten => _X.,n(no),Read(SETOP,opinion,1,,1,5)
exten => _X.,n,Set(COUNT=$[ ${COUNT} + 1 ])
exten => _X.,n,Gotoif($["${SETOP}"="1"]?yes)
exten => _X.,n,Gotoif($["${SETOP}"="2"]?yes)
exten => _X.,n,Gotoif($["${SETOP}"="3"]?yes)
exten => _X.,n,Gotoif($["${SETOP}"="4"]?yes)
exten => _X.,n,Gotoif($["${SETOP}"="5"]?yes)
exten => _X.,n,Gotoif($["${SETOP}"="0"]?yes)
exten => _X.,n,GotoIf($[ ${COUNT} = 2 ]?hangup:no)
exten => _X.,n(yes),Macro(press-orig)
exten => _X.,n,Background(thank-you-for-calling)
exten => _X.,n(hangup),Hangup

exten => h,1,Gotoif($["${SETOP}"!=""]?opinion-orig,h,2:opinion-orig,h,3)
exten => h,2,Hangup
exten => h,3,Set(SETOP=0)
exten => h,4,Macro(press-orig)
exten => h,5,Hangup

[macro-press-orig]
exten => s,1,MYSQL(Connect connid localhost asteriskuser mysqlasteriskpass asteriskcdrdb)
exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO opinion (`id`, `date-press`, `callerid`, `exten`, `queues`, `opinion`, `time2`, `uniqueid`) VALUES (NULL, '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}', "${OPERATOR_CALLERID}", "${OPERATOR_EXTEN}", "${OPERATOR_ROUTE}", "${SETOP}", ${STRFTIME(${EPOCH},,%s)}, "${OPERATOR_UNIQUEID}"))
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n,MYSQL(Disconnect ${connid})
exten => s,n,Set(CDR(opin)=opinion)
exten => s,n,Set(CDR(userfield)=opinion)
exten => s,n,MacroExit

тут можно конечно использовать вместо mysql func_odbc - но я для наглядности оставил mysql %)

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

редактируем /etc/asterisk/extensions_override_freepbx.conf добавляем в него макро macro-hangupcall и меняем его начало:

[macro-hangupcall]
include => macro-hangupcall-custom

exten => s,1,NooP(Hangup - originate)
exten => s,n,GotoIF($["${OUTNUM}"=""]?opinion-in:opinion-out)
exten => s,n(opinion-in),ExecIF($[$["${DIALSTATUS}" = "ANSWER"]&$["${CDR(accountcode)}"!="NOOPINION"]&$["${DEXTEN}"!=""]&$["${FROMEXTEN}"!="unknown"]&$["${OUTNUM}"=""]&$[${LEN(${OPERATOR_EXTEN})}!=3]]?System(/opt/gencall.sh 8${CALLERID(num):1} ${DEXTEN} ${UNIQUEID} IN&))
exten => s,n(opinion-out),ExecIF($[$["${DIALSTATUS}" = "ANSWER"]&$["${CDR(accountcode)}"!="NOOPINION"]&$["${FROMEXTEN}"!=""]&$["${FROMEXTEN}"!="unknown"]&$["${OUTNUM}"!=""]&$[${LEN(${OPERATOR_EXTEN})}!=3]]?System(/opt/gencall.sh 8${OUTNUM:1} ${FROMEXTEN} ${UNIQUEID} OUT&))

exten => s,n,GotoIf($["${CDR(userfield)}" = ""]?endmixmoncheck) ; это уже кусок оригинального macro-hangupcall 

далее создаем /opt/gencall.sh который будет нам гинерить вызов клиенту. 

#!/bin/bash
path=/var/spool/asterisk/tmp
file=`date +%s`.call
echo "Channel: Local/$1@from-internal" >> $path/$file
echo "CallerID: "OPINION"" >> $path/$file
echo "MaxRetries: 0" >> $path/$file
echo "RetryTime: 15" >> $path/$file
echo "WaitTime: 45" >> $path/$file
echo "Context: opinion-orig" >> $path/$file
echo "Extension: $2" >> $path/$file
echo "Priority: 1" >> $path/$file
echo "Set: CALLERID(num)=$1" >> $path/$file
echo "Set: OPERATOR_CALLERID=$1" >> $path/$file
echo "Set: OPERATOR_EXTEN=$2" >> $path/$file
echo "Set: OPERATOR_ROUTE=$4" >> $path/$file
echo "Set: OPERATOR_UNIQUEID=$3" >> $path/$file
echo "Set: CDR(userfield)=opinion" >> $path/$file
echo "Archive: yes" >> $path/$file
sleep 45
mv $path/$file /var/spool/asterisk/outgoing/

На этом настройка нашего asterisk закончилась. 

После каждого звонка будет происходить оригинация звонка клиенту и ИВР попросит его оценить качество звонка. Звуковой файлик opinion.wav который используется в Read(SETOP,opinion,1,,1,5) можете записать тут - http://ivrvoice.ru.

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

Статистика

Odoo CMS - a big picture
Odoo CMS - a big picture

 

Odoo CMS - a big picture

Если есть проблемы с настройкой или вопросы вы можете всегда связаться с нами и мы поможем -