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

Задача

Cделать на Elastixе возможность оценки оператора. Требуется дописать дополнительный модуль для Астериска (elastix):

Для работы горячей линии необходимо голосовое меню со сбором статистики.

Вопрос: «Помогли ли вам специалисты Горячей линии?»

Варианты ответа: Нет — кнопка «0» и Да — кнопка «1»

Решение

Все шло к тому, чтобы после разговора с оператором клиент попадал в IVR где смог бы проголосовать, но меня потянуло дальше и я решил эту задачу так:

Приготовление mysql ДБ

По умолчанию asterisk ведет запись CDR в базу asteriskcdrdb, для нашей дополнительной статистике добавим туда новую таблицу.

DROP TABLE IF EXISTS `opinion`;
CREATE TABLE IF NOT EXISTS `opinion` (
  `id` int(11) NOT NULL auto_increment,
  `callerid` varchar(15) NOT NULL default '',
  `exten` varchar(15) NOT NULL default '',
  `queues` varchar(7) NOT NULL,
  `opinion` char(1) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Готовим Макро

В /etc/asterisk/extensions_custom.conf добавим:

/etc/asterisk/extensions_custom.conf
[macro-press-1]
exten => s,1,MYSQL(Connect connid localhost ВАШ_ЮЗЕР ВАШ_ПАСС asteriskcdrdb)
exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO opinion (`id`, `callerid`, `exten`, `queues`, `opinion`) VALUES (NULL, ${FROMEXTEN}, ${CDR(dst)}, ${CDR(src)}, 1))
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n,MYSQL(Disconnect ${connid})
 
[macro-press-0]
exten => s,1,MYSQL(Connect connid localhost ВАШ_ЮЗЕР ВАШ_ПАСС asteriskcdrdb)
exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO opinion (`id`, `callerid`, `exten`, `queues`, `opinion`) VALUES (NULL, ${FROMEXTEN}, ${CDR(dst)}, ${CDR(src)}, 0))
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n,MYSQL(Disconnect ${connid})

Юзер и пароль к базе asteriskcdrdb обычно есть в файле /etc/asterisk/cdr_mysql.conf

Добавим Feature Application

В features_applicationmap_custom.conf добавляем нужные нам цифры и привязываем к выполнения макро

features_applicationmap_custom.conf
press1 => 1,peer/caller,Macro,press-1
press0 => 0,peer/caller,Macro,press-0

для того чтобы feature application сработал надо еще добавить его в глобальную переменную в диалпалне. в /etc/asterisk/extensions_override_freepbx.conf добавим

/etc/asterisk/extensions_override_freepbx.conf
[globals]
DYNAMIC_FEATURES = apprecord#press0#press1

apprecord обычно уже используется в Freepbx его тоже оставим.

Результат

В момент разговора с оператором у клиента есть возможность оценить его нажатием 0 или 1

Лог успешной оценки:

    --  Feature Found: press1 exten: press1
    -- Executing [s@macro-press-1:1] MYSQL("Local/299@from-queue-56b8;1", "Connect connid localhost root 123 asteriskcdrdb") in new stack
    -- Executing [s@macro-press-1:2] MYSQL("Local/299@from-queue-56b8;1", "Query resultid 1 INSERT INTO opinion (`id`, `callerid`, `exten`, `queues`, `opinion`) VALUES (NULL, +74993462198, 299, 1234, 1)") in new stack

смотрим что в базе

mysql> SELECT * FROM opinion;
+----+-------------+-------+--------+---------+
| id | callerid    | exten | queues | opinion |
+----+-------------+-------+--------+---------+
|  8 | 74993462198 | 299   | 1234   | 1       | 
|  9 | 74993462198 | 299   | 1234   | 1       | 
+----+-------------+-------+--------+---------+
2 rows in set (0.00 sec)

Можно ИВР для оценки прикрутить и после того как оператор повесил трубку:

Настройки очереди нужно делать в ВЕБ интерфейсе, если версия FreePbx разрешает в Members указать LOCAL/999@opinion-ivr/n то первый пункт можно пропустить, если нет то Members добавлять в вебе не надо, их добавим в

queues_post_custom.conf
member=Local/299@opinion-ivr/n
member=Local/999@opinion-ivr/n
extensions_custom.conf
[opinion-ivr]
exten => _.,1,NoOp(Statrt IVR)
exten => _.,n,DIAL(SIP/${EXTEN},,trg) ;опция g позволяет звонку пройти далее по диалплану 
exten => _.,n,Goto(opinion,,1)
 
[opinion]
exten => _X.,1,NoOp(Statrt IVR)
exten => _X.,n,Background(Plese_press_0_or_1,m)  ; заменить на свой голосовой файл 
exten => _X.,n,Set(TIMEOUT(absolute)=2)
 
exten => 0,1,MYSQL(Connect connid localhost root 123 asteriskcdrdb)
exten => 0,n,MYSQL(Query resultid ${connid} INSERT INTO opinion (`id`, `callerid`, `exten`, `queues`, `opinion`) VALUES (NULL, ${FROMEXTEN}, ${DIALEDPEERNUMBER}, ${NODEST}, 0))  
exten => 0,n,MYSQL(Disconnect ${connid})
 
exten => 1,1,MYSQL(Connect connid localhost root 123 asteriskcdrdb)
exten => 1,n,MYSQL(Query resultid ${connid} INSERT INTO opinion (`id`, `callerid`, `exten`, `queues`, `opinion`) VALUES (NULL, ${FROMEXTEN}, ${DIALEDPEERNUMBER}, ${NODEST}, 1))  
exten => 1,n,MYSQL(Disconnect ${connid})
ocenka_raboty_operatorov.txt · Последние изменения: 2013/11/18 13:33 (внешнее изменение)
GNU Free Documentation License 1.3
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Яндекс.Метрика