—просите про Asterisk в Telegram - чате

 лиентский сервис и его посто€нное совершенствование Ц задачи, которые решают все организации, которые люб€т своих клиентов.  ак оценить удовлетворенность клиента, после звонка в контактный Ц центр? ќтвет простой Ц спросите его.

¬ статье мы покажем как настроить функционал оценки оператора после звонка (конечно не только, вы можете строить любые опросы, которые захотите). –аботает это так:

  •  лиент и оператор контактного центра разговаривают;
  • ѕосле завершени€ разговора оператор просит оценить удовлетворенность разговором клиента;
  • ќператор кладет трубку;
  • јвтоматический сервис предлагает ввести клиенту от 1 до 5, в зависимости от удовлетворенности обслуживанием;
  • ¬веденные данные сохран€ютс€ в таблицу MySQL и отправл€ютс€ в групповой чат в Telegram, в котором эти оценки уже готовы оценить супервизоры;

—пешите настроить Ц ваш руководитель точно оценит :)

–ешение обкатано и работает на сборке FreePBX Distro (FreePBX 13 + 13.10.0)

Ќастройка очереди

—оздайте обычную очередь обслуживани€ вызовов через FreePBX, но только без одной опции Ц не добавл€йте в нее операторов (раздел Queue Agents) Ц мы сделаем это вручную, через конфигурационные файлы.

—делали? ќтлично. “еперь переходим в консоль сервера, открываем файл /etc/asterisk/queues_post_custom.conf и добавл€ем в него следующую конструкцию:

member=Local/111@customer-survey-ivr/n,0,111,hint:111@ext-local

√де 111 - это внутренний экстеншен, который должен быть членом этой очереди. »дем вперед.


Ќастройка диалплана

ќткрываем файл /etc/asterisk/extensions_custom.conf и добавл€ем в него следующую конструкцию:

[customer-survey-ivr]
exten => _X.,1,NoOp(Post call survey beginning)
exten => _X.,n,DIAL(SIP/${EXTEN},,trg) //добавл€ем опцию g - когда вызываемый абонент вешает трубку, мы продолжим выполнение команд далее по текущему контексту.
exten => _X.,n,GotoIf($[${DIALSTATUS}=BUSY]?busy:answered) //провер€ем, был ли отвечен вызов
exten => _X.,n(busy),Hangup()
exten => _X.,n(answered),Goto(assessment,${EXTEN},1)


[assessment]
exten => _X.,1,Answer
exten => _X.,n,Wait(1)
exten => _X.,n(skip),Set(IVR_MSG=en/beep)
exten => _X.,n(start),Set(TIMEOUT(digit)=1)
exten => _X.,n,Background(/var/lib/asterisk/sounds/ru/custom/ocenite-8khz,m)  //озвучиваем предложение об оценке клиенту
exten => _X.,n,WaitExten(5,)

exten => 1,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 1) //если клиент вводит 1, то отправл€ем даные через AGI в скрипт, который отправл€ет их в Telegram и SQL
exten => 1,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip) //благодарим клиента и прощаемс€

exten => 2,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 2)
exten => 2,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 3,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 3)
exten => 3,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 4,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 4)
exten => 4,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => 5,1,AGI(survey.php, ${CDR(src)}, ${DIALEDPEERNUMBER}, ${NODEST}, 5)
exten => 5,n,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)

exten => t,1,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)
exten => e,1,Playback(/var/lib/asterisk/sounds/ru/custom/bye-8khz,skip)
  • /var/lib/asterisk/sounds/ru/custom/ocenite-8khz - заранее записанный звуковой файл следующего содержани€: Ђѕожалуйста, оцените работу оператора по шкале от 1 до 5ї;
  • /var/lib/asterisk/sounds/ru/custom/bye-8khz - заранее записанный звуковой файл следующего содержани€: Ђ—пасибо за оценку! ¬сего доброгої;

—охраните конфигурацию в файле. ѕосле этого, в консоль сервера необходимо дать команду:

dialplan reload

–азбираемс€ с SQL

Ќаверн€ка вы согласитесь с тем, что данные оценки нам нужно как то хранить: дл€ вс€ких там BI (business intelligence) и прочих систем. ƒелать это будем с помощью SQL. —оздаем таблицу survey, наполн€ем ее, создаем пользовател€, который будет иметь права на внесение данных в эту таблицу:

mysql
mysql> use asteriskcdrdb;
mysql> CREATE TABLE survey(num varchar(20),operator varchar(20),queue varchar(20),valuation varchar(20),date datetime);
mysql> CREATE USER 'логин_mysql'@'localhost' IDENTIFIED BY 'пароль_mysql';
mysql> GRANT INSERT ON asteriskcdrdb.survey TO 'логин_mysql';

ѕровер€ем, что за таблица у нас получилась:

mysql
mysql> describe survey;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| num       | varchar(20) | YES  |     | NULL    |       |
| operator  | varchar(20) | YES  |     | NULL    |       |
| queue     | varchar(20) | YES  |     | NULL    |       |
| valuation | varchar(20) | YES  |     | NULL    |       |
| date      | datetime    | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+ 

„удесно. ћы на финишной пр€мой Ц собираем AGI скрипт, который будет дергать Telegarm API и SQL.


AGI скрипт

ѕеред продолжением, хотим спросить Ц у вас есть Telegram бот? ≈сли нет, то прыгайте по ссылке ниже. ¬ернутьс€ вам нужно оттуда с токеном от бота и с ID группового чата :)

Ќадеемс€, вы перешли по ссылке и получили необходимые данные. “еперь переходим к скрипту:

#!/usr/bin/php -q
<?php
#парсим данные из AGI
require('phpagi.php'); 
$agi = new AGI(); 
$num = $agi->request['agi_arg_1'];
$operator = $agi->request['agi_arg_2'];
$queue = $agi->request['agi_arg_3'];
$valuation = $agi->request['agi_arg_4'];
#параметры подключени€ к API Telegram и групповой ID - чата
$token = "ваш_api_от_Telegram";
$chat_id = "ID_чата";
#дата
$date = date("Y-m-d H:i:s");
#массив дл€ Telegram чата супервизоров
$arr = array(
'ѕолучена оценка оператора клиентом:' => '',
'«вон€щий:' => $num,
'ќцененный оператор:' => $operator,
'ќчередь звонка:' => $queue,
'ѕоставлена оценка (1-5)' => $valuation,
'ƒата оценки:' => $date,
);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b> ".$value."%0A";
};
fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
#параметры подключени€ к Ѕƒ
$hostname = "localhost";
$username = "логин_mysql";
$password = "пароль_mysql";
$dbName = "asteriskcdrdb";
#парсим данные через SQL по звонкам
mysql_connect($hostname,$username,$password) OR DIE("Ќе могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
$query = "INSERT INTO survey (`num`, `operator`, `queue`, `valuation`, `date`) VALUES ('$num', '$operator', '$queue', '$valuation', '$date');"; 
$res=mysql_query($query) or die(mysql_error());
?>

—качать скрипт

¬ случае скачивани€, помен€йте расширение файла с .txt на .php

Ќе забывайте помен€ть переменные $token, $chat_id, $username и $password помен€ть на свои. —охраните этот скрипт как survey.php и загружаем его в папку /var/lib/asterisk/agi-bin. Ёто можно сделать с помощью WinSCP, например. ƒалее, в консоли через SSH доступ на сервер Asterisk дайте следующие команды:

dos2unix /var/lib/asterisk/agi-bin/survey.php
chown asterisk:asterisk /var/lib/asterisk/agi-bin/survey.php
chmod 775 /var/lib/asterisk/agi-bin/survey.php

ћы молодцы. “еперь самое интересное Ц провер€ем, что у нас получилось.


‘инальна€ проверка

«воним на очередь, разговариваем с указанным оператором, после чего, оператор прощаетс€ с нами и кладет трубку. „то происходит? :) ћы слышим просьбу ввести оценку, от 1 до 5. ¬водим. √олос прощаетс€ с нами и вызов завершаетс€, а в Telegram Ц чат к супервизорам прилетает следующа€ информаци€:

 ќценка работы оператора после звонка на Asterisk

ј что мы видим в SQL?

 ќценка работы оператора после звонка на Asterisk в SQL

ѕолезна ли ¬ам эта стать€?


Ёти статьи могут быть вам интересны: