Оценка работы оператора
Общение с клиентами очень важный фактор в развитие бизнеса и лояльности клиентов. Для мониторинга операторов и то как они общаются с вашими клиентами можно прослушивать записи разговоров, но это долго и нудно да и не всегда покажет реальную оценку. Можно еще перезванивать клиентов и спрашивать у них довольны ли они обслуживанием или нет, но это еже более труднозатратнее и труднее. Представлю вам вариант который облегчит эту задачу. Ранее я писал уже вариант про оценку оператора 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.
для наглядности мы доработали статистику на нашу систему оценок и вот что получилось:
Статистика
Если есть проблемы с настройкой или вопросы вы можете всегда связаться с нами и мы поможем -