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

Сбор статистики по входящим звонкам.

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

Ответить
nicolas
Сообщения: 12
Зарегистрирован: 19 май 2011, 10:50

Сбор статистики по входящим звонкам.

Сообщение nicolas »

День добрый!
Использую дистрибутив Elastix 2.0.0-36 (Asterisk 1.6.2.10).
В * подключены 3 линии: номер баZa-офис (5 входящих линий), линия через GSM-шлюз, аналоговая линия через dahdi.

Собираемся ввести систему премирования/депремирования для ребят с тех. поддержки. Для этого необходимо собирать статистику по звонкам на ринг группу тех. поддержки. Полазил по интернету, изучал систему мониторинга самого Elastix и пришел к выводу, что без костылей не обойтись:). Написал парсер текстовых логов, создал нужные мне таблицы в Mysql - получилось все довольно красиво.
В принципе почти всю информацию по звонкам вытаскиваю из таблицы cdr базы asteriskcdrdb. В первую очередь меня интересует время реакции сотрудника на звонок. Вот как раз в подсчете этого параметра и есть вопросы.
В таблице cdr есть поля duration - длительность звонка с момента поступления в систему до завершения, billsec - время с момента снятия трубки сотрудником до момента завершения разговора. Казалось бы, что может быть проще: делаем (duration - billsec) и получаем нужное мне время ответа!! Но не тут то было. Этот вариант не катит, когда есть IVR. Хорошо, изменяю логику парсера, благо входящих линий не так много. Вытаскиваю из текстового лога время поступления звонка (x1), время когда начали звонить телефоны ринг группы (x2) и нахожу время реакции = x2-x1-(duration-billsec). Отлично! Определили!
Сегодня утром захотелось мне сделать тестовый звонок (лучше бы не делал:) - меньше знаешь, лучше спишь!)...Когда звонок переадресовывается на ринг группу, то сначала проигрывается фраза, что все разговоры записываются, и, собственно, начинают звонить телефоны группы. В настройках группы прописал ring time=30 сек. Если в течение этого времени никто не ответит, то включаем фразу "К сожалению все специалисты заняты бла-бла-бла" и опять отправляем звонок в группу. Ну и так до тех пор, пока абонент не положит трубку, или сотрудник не ответит. И вот тут я обнаружил (привожу кусочки логов, чтобы было понятней - инетересуют только звонящие внутренние номера):
1. Поступает звонок в систему, проигрывается приветствие и идет звонок в группу. В логи видим:
[May 18 12:44:50] VERBOSE[8240] res_musiconhold.c: -- Started music on hold, class 'default', on SIP/142-00006a25
[May 18 12:44:50] VERBOSE[8240] app_dial.c: -- SIP/144-00006a27 is ringing
[May 18 12:44:50] VERBOSE[8240] app_dial.c: -- SIP/147-00006a28 is ringing
[May 18 12:44:50] VERBOSE[8240] app_dial.c: -- SIP/141-00006a26 is ringing
2. Никто трубку не снимает. Проходит 30 сек, включается фраза, что "все заняты..." и снова идет звонок в группу:
[May 18 12:45:21] VERBOSE[8240] res_musiconhold.c: -- Started music on hold, class 'default', on SIP/142-00006a25
[May 18 12:45:21] VERBOSE[8240] app_dial.c: -- SIP/144-00006a2a is ringing
[May 18 12:45:21] VERBOSE[8240] app_dial.c: -- SIP/147-00006a2b is ringing
[May 18 12:45:21] VERBOSE[8240] app_dial.c: -- SIP/141-00006a29 is ringing
3. И вот теперь сотрудник отвечает на звонок:
[May 18 12:45:27] VERBOSE[8240] app_dial.c: -- SIP/144-00006a2a answered SIP/142-00006a25
И вот именно это значение SIP/144-00006a2a записывается в поле dstchannel таблицы cdr базы asteriskcdrdb. В своем парсере я использую как раз таки это поле, чтобы посчитать время ожидания (разница между началом звонка внутренних телефонов и временм, когда звонок будет отвечен). И моя программа выдает, что время ожидания = 6 сек. Но ведь фактически еще 30 сек до этого абонент ждал ответа!
Отсюда есть парочка вопросов:
1. Нет никаких вариантов сделать ring time группы >60 сек? Думаю такой вариант бы мне полностью подошел - сделать ring time, скажем, 180 сек: точно или будет ответ, или абонент трубку положит.
2. Есть ли какая-то логика в формировании каналов (выделены жирным в цитате). Естесственно интересует идентификатор после "SIP/номер-".
3. Возможно ли как-то настроить систему, чтобы после проигрывания фразы, что "все заняты", идентификаторы были теми же?
Есть конечно вариант парсить все это, просто подумал, может быть я не один в этом мире с такими "хотелками":)
Спасибо за внимание!
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Сбор статистики по входящим звонкам.

Сообщение ded »

1. В каком месте диалплана у вас исполняется вот это -
[May 18 12:44:50] VERBOSE[8240] app_dial.c: -- SIP/144-00006a27 is ringing
[May 18 12:44:50] VERBOSE[8240] app_dial.c: -- SIP/147-00006a28 is ringing
[May 18 12:44:50] VERBOSE[8240] app_dial.c: -- SIP/141-00006a26 is ringing
?
Скорее всего это вызов macro-dial или macro-dialout? Тогда вы можете написать свой вариант macro-dialout с ring time группы >60 сек и поставить его в секции macro-** -predial-hook.
В этой секции есть разумные комментарии.
nicolas
Сообщения: 12
Зарегистрирован: 19 май 2011, 10:50

Re: Сбор статистики по входящим звонкам.

Сообщение nicolas »

Спасибо большое, попробую! По результатам отпишусь!
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Сбор статистики по входящим звонкам.

Сообщение ded »

nicolas писал(а):Есть конечно вариант парсить все это, просто подумал, может быть я не один в этом мире с такими "хотелками":)
Вы не один, поэтому исходите из того факта, что уже всё написано, и необходимо лишь установить и разобраться.
http://astercc.org
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH