Чат  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Asternic Call Center Stats Lite - модификация.

WEB GUI и не только WEB

Модераторы: stas2k, april22

Asternic Call Center Stats Lite - модификация.

Сообщение zzz777z » 28 авг 2017, 14:11

Модификация приложения статистики очереди Asternic Call Center Stats Lite.

Ключевые изменения:

    Вместо парсинга текстового лога queue_log, используется нативная БД приложения app_queue в MySQL.

    MySQLi, оптимизированы запросы к БД.

    Отдельные таблицы агентов и очередей с синхронизацией по требованию.

    Новые чарты - Google Charts, вместо flash.

    Детализация принятых и пропущенных вызовов с записью разговора.

    Поиск по Uniqueid, CallerID.

Требования - PHP >= 5.4

Посмотреть полное описание и скачать:

https://asterisk-pbx.ru/wiki/soft/call_center/asternic-call-center-stats

Будем благодарны за ваши отзывы и конструктивную критику.
Аватар пользователя
zzz777z
 
Сообщений: 19
Зарегистрирован: 10 авг 2014, 20:48

Re: Asternic Call Center Stats Lite - модификация.

Сообщение zzz777z » 29 авг 2017, 11:19

Веб интерфейс статистики Asterisk Call Center Stats lite хорошо служил нам в течении уже 10 лет, но имея ряд существенных недостатков, явно нуждался в обновлении.
За годы использования интерфейс был немного переработан нами, учитывая пожелания клиентов.
Эту версию я и хочу вам предложить.
Далее я, постепенно, выложу скриншоты с краткими пояснениями по делу.
Если вы пользовались Asternic Lite, вы знаете, что данные брались из текстового лога очереди и парсились в БД по расписанию.
Учитывая, что Asterisk сам имеет возможность писать логи очереди в БД, это был явно лишний костыль.
Поэтому это первое, что было переделано.
В данной версии все SQL запросы переписаны под оригинальную БД лога очереди Asterisk.
Главная страница.

В оригинальном Asternic Lite, при открытии главной страницы, производится выборка уникальных агентов и очередей по всей БД.
Если данных много, этот процесс может занимать довольно продолжительное время.
Чтобы избежать этого, агенты и очереди были вынесены в отдельную таблицу с возможностью синхронизации по требованию.
Добавлена, также, почасовая выборка.
Изображение
Аватар пользователя
zzz777z
 
Сообщений: 19
Зарегистрирован: 10 авг 2014, 20:48

Re: Asternic Call Center Stats Lite - модификация.

Сообщение zzz777z » 29 авг 2017, 12:34

Принятые вызовы
Ключевая страница отчетов, с прекрасной таблицей статистики по агентам.
При открытии страницы answered.php в оригинальной версии производилось аж 5 sql запросов, что негативно сказывалось на быстродействии.
В нашей версии все базируется на одном sql запросе, что выгодно сказывается при больших объемах данных в БД.
[Показать] Спойлер: SQL Query
Код: выделить все
SELECT time, queuename, agent, event, data1, data2, data3 FROM $DBTable
WHERE time >= '$start' AND time <= '$end' AND event IN ('COMPLETECALLER', 'COMPLETEAGENT')
AND queuename IN ($queue) AND agent in ($agent)


Flash чарты в оригинальной версии прекрасно работали, но код в swf никак не контролировался и учитывая тот факт, что даже в основном коде были, пусть и безобидные, но закладки, вызывали сильное подозрение.
В данной версии использованы Google Charts.
Изображение
Из скриншота видно, что немного непонятный отчет "Уровень обслуживания" был заменен на отчет "Распределение по периодам ожидания".
Диапазоны легко изменить в коде:
[Показать] Спойлер: Распределение принятых вызовов по периодам ожидания перед ответом
Код: выделить все
if ($row[4]<=15) {
$hold15["$row[1]"] += count($row[4]);
} elseif (($row[4] >= 16)&&($row[4] <= 30)) {
$hold30["$row[1]"] += count($row[4]);
} elseif (($row[4] >= 31)&&($row[4] <= 45)) {
$hold45["$row[1]"] += count($row[4]);
} elseif (($row[4] >= 46)&&($row[4] <= 60)) {
$hold60["$row[1]"] += count($row[4]);
} elseif (($row[4] >= 61)&&($row[4] <= 75)) {
$hold75["$row[1]"] += count($row[4]);
} elseif (($row[4] >= 76)&&($row[4] <= 90)) {
$hold90["$row[1]"] += count($row[4]);
} elseif ($row[4] >= 91) {
$hold91["$row[1]"] += count($row[4]);
}


Отчет "Отвеченные вызовы по очередям" тоже был изменен, были добавлены периоды распределения по длительности вызова.

[Показать] Спойлер: Распределение продолжительности вызовов по периодам
Код: выделить все
if ($row[5]<=5) {
$dur5["$row[1]"] += count($row[5]);
} elseif (($row[5] >= 6)&&($row[5] <= 10)) {
$dur10["$row[1]"] += count($row[5]);
} elseif (($row[5] >= 11)&&($row[5] <= 15)) {
$dur15["$row[1]"] += count($row[5]);
} elseif (($row[5] >= 16)&&($row[5] <= 20)) {
$dur20["$row[1]"] += count($row[5]);
} elseif (($row[5] >= 21)&&($row[5] <= 25)) {
$dur25["$row[1]"] += count($row[5]);
}


Отчет "Причина разъединения" в виде чарта:

Изображение
Аватар пользователя
zzz777z
 
Сообщений: 19
Зарегистрирован: 10 авг 2014, 20:48

Re: Asternic Call Center Stats Lite - модификация.

Сообщение april22 » 29 авг 2017, 12:49

Ещё все бы это работало бы без инет.
Своими вопросами , вы загоняете меня в ГУГЛЬ.
april22
 
Сообщений: 1999
Зарегистрирован: 09 июл 2012, 09:47

Re: Asternic Call Center Stats Lite - модификация.

Сообщение zzz777z » 29 авг 2017, 13:02

В теории можно указать библиотеки Google Charts локально, но у меня возникали проблемы в такой конфигурации.
вместо:
Код: выделить все
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>

сделать так:
Код: выделить все
    <script type="text/javascript" src="js/loader.js"></script>
    <script type="text/javascript" src="js/jsapi"></script>
Аватар пользователя
zzz777z
 
Сообщений: 19
Зарегистрирован: 10 авг 2014, 20:48

Re: Asternic Call Center Stats Lite - модификация.

Сообщение zzz777z » 29 авг 2017, 14:26

Отчет Принятые вызовы по сути детализация входящих вызовов очереди, то чего сильно не хватало в Asternic Lite.

Chrome
Изображение

Присутствует поиск/фильтрация по Агенту и CallerID (ищет по любой части номера).
Изначально использовалась паджинация, но потом отказались от нее в пользу выбора кол-ва отображаемых строк.

Для воспроизведения записей используется HTML 5 audio.
Вид плеера отличается в зависимости от используемого браузера (в Opera не работает):

Воспроизведение записи
Разберем простейший случай, когда все записи хранятся в одной директории, формат имени - uniqueid.mp3.

Страница answered_cdr.php содержит следующий код:
[Показать] Спойлер:
Код: выделить все
if ( ($row['event'] == "COMPLETEAGENT") || ($row['event'] == "COMPLETECALLER") ) {
        $page_rows2 += count($row['event']);
       $tmpError =  $row['callid'] ;
       $tmpRec = '<audio controls preload="none">
              <source src="dl.php?f=[_file]">
            </audio>
            <a href="dl.php?f=[_file]">' . $row['callid'] . '</a>';
   
       $rec['filename'] = $row['callid'] . '.mp3';   
       $rec['path'] = '/home/asterisk/monitor/mp3/'.$rec['filename'];
   
   if (file_exists($rec['path']) && preg_match('/(.*)\.mp3$/i', $rec['filename'])) {
      $tmpRes = str_replace('[_file]', base64_encode($rec['filename']), $tmpRec);
   } else {
      $tmpRes = $tmpError;
    }
echo "<TR><TD>" . date('Y-m-d H:i:s', $time) . "</TD>
        <TD>" . $callerid . "</TD>
         <TD>" . $row['queuename'] . "</TD>
         <TD>" . $row['agent'] . "</TD>
         <TD>" . $cause_hangup . "</TD>
         <TD>" . $holdtime . "</TD>
         <TD>" . $calltime . "</TD>
         <TD>" . $tmpRes. "</TD>
         </TR>\n";
      $linea_pdf = array($time,$callerid,$row['queuename'],$row['agent'],$cause_hangup,$holdtime,$calltime);
        $data_pdf[]=$linea_pdf;
   }


где строки:

Код: выделить все
       $rec['filename'] = $row['callid'] . '.mp3';   
       $rec['path'] = '/home/asterisk/monitor/mp3/'.$rec['filename'];


указывают на директорию и расширение файла.
Аватар пользователя
zzz777z
 
Сообщений: 19
Зарегистрирован: 10 авг 2014, 20:48

Re: Asternic Call Center Stats Lite - модификация.

Сообщение zzz777z » 29 авг 2017, 16:59

Пропущенные вызовы
Старые добрые пропущенные вызовы, добавлен отчет по периодам и детализация.

Изображение

https://asterisk-pbx.ru/wiki/_media/sof ... wered1.png
https://asterisk-pbx.ru/wiki/_media/sof ... ed-cdr.png

Создание кастомизированного отчета

Предположим, перед попаданием в очередь, вызов помещается в IVR.
Вызовы покинувшие IVR не будут зафиксированы в логе очереди, но мы можем добавить их туда.
При помощи приложения Queuelog, добавим в лог очереди событие IVR_ABANDON для вызовов покинувших контекcт [ivr-bla-bla-bla] положив трубку:
extensions_custom.conf
Код: выделить все
[ivr-bla-bla-bla]
...
exten => h,1,queuelog(NONE,${UNIQUEID},NONE,IVR_ABANDON,${CALLERID(num)},${DID},${CDR(billsec)})
exten => h,n,hangup

где ${DID} - переменная содержащая вызываемый номер.

Добавим отчет в наше приложение:
Сделаем выборку по событию IVR_ABANDON

Код: выделить все
$sql = "SELECT * FROM $DBTable
WHERE time >= '$start' AND time <= '$end'
AND event IN ('IVR_ABANDON')";

$resivrabandon = mysqli_query($connection, $sql);


И добавим таблицу:

Код: выделить все
<table>
   <thead>
       <tr>
         <th><?php echo $lang["$language"]['time']?></th>
         <th><?php echo $lang["$language"]['callerid']?></th>
         <th><?php echo $lang["$language"]['did']?></th>                              
         <th><?php echo $lang["$language"]['holdtime']?></th>
         <th><?php echo $lang["$language"]['callid']?></th>
       </tr>
   </thead>
   <tbody>

foreach($resivrabandon as $row){
$ivrabandon = explode(",", $row['data1']);
$time = explode(".", $row['time']);

         echo "<tr><td>" . $time['0'] . "</td>
         <td>" . $ivrabandon[0] . "</td>
         <td>" . $ivrabandon[1] . "</td>        
         <td>" . gmdate('i:s', $ivrabandon[2]) . "</td>
         <td>" . $row['callid'] . "</td>
         </tr>\n";
}
$resivrabandon->free();
                </tbody>
          </table>


Изображение

Данный код не входит в базовое приложение, но демонстрирует, как легко можно создать кастомные отчеты для ваших клиентов.
Еще один реальный пример, добавить отчет о исходящих вызовах агентов.
Аватар пользователя
zzz777z
 
Сообщений: 19
Зарегистрирован: 10 авг 2014, 20:48

Re: Asternic Call Center Stats Lite - модификация.

Сообщение april22 » 29 авг 2017, 18:05

Круто. Но допилите до состояния "без нтернета" и я буду готов вам пожертвовать на развитие.
Своими вопросами , вы загоняете меня в ГУГЛЬ.
april22
 
Сообщений: 1999
Зарегистрирован: 09 июл 2012, 09:47

Re: Asternic Call Center Stats Lite - модификация.

Сообщение virus_net » 30 авг 2017, 08:32

zzz777z писал(а):В теории можно указать библиотеки Google Charts локально, но у меня возникали проблемы в такой конфигурации.

Посмотрите в сторону Highcharts
мой SIP URI sip:virus_net@asterisk.ru или sip:dn@postmet.com
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Аватар пользователя
virus_net
 
Сообщений: 2225
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Asternic Call Center Stats Lite - модификация.

Сообщение partonen » 30 авг 2017, 16:12

Коллективу asterisk-pbx.ru выражаем свои благодарности за проделанную работу, протестировали данный модуль все работает, будем использовать в своей работе.
partonen
 
Сообщений: 6
Зарегистрирован: 11 май 2016, 12:52

След.

Вернуться в Графические интерфейсы Астериск

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

© 2008 — 2018 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH