Сбор статистики по входящим звонкам.
Добавлено: 19 май 2011, 10:52
День добрый!
Использую дистрибутив 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. Поступает звонок в систему, проигрывается приветствие и идет звонок в группу. В логи видим:
Отсюда есть парочка вопросов:
1. Нет никаких вариантов сделать ring time группы >60 сек? Думаю такой вариант бы мне полностью подошел - сделать ring time, скажем, 180 сек: точно или будет ответ, или абонент трубку положит.
2. Есть ли какая-то логика в формировании каналов (выделены жирным в цитате). Естесственно интересует идентификатор после "SIP/номер-".
3. Возможно ли как-то настроить систему, чтобы после проигрывания фразы, что "все заняты", идентификаторы были теми же?
Есть конечно вариант парсить все это, просто подумал, может быть я не один в этом мире с такими "хотелками":)
Спасибо за внимание!
Использую дистрибутив 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. Поступает звонок в систему, проигрывается приветствие и идет звонок в группу. В логи видим:
2. Никто трубку не снимает. Проходит 30 сек, включается фраза, что "все заняты..." и снова идет звонок в группу:[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
3. И вот теперь сотрудник отвечает на звонок:[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
И вот именно это значение SIP/144-00006a2a записывается в поле dstchannel таблицы cdr базы asteriskcdrdb. В своем парсере я использую как раз таки это поле, чтобы посчитать время ожидания (разница между началом звонка внутренних телефонов и временм, когда звонок будет отвечен). И моя программа выдает, что время ожидания = 6 сек. Но ведь фактически еще 30 сек до этого абонент ждал ответа![May 18 12:45:27] VERBOSE[8240] app_dial.c: -- SIP/144-00006a2a answered SIP/142-00006a25
Отсюда есть парочка вопросов:
1. Нет никаких вариантов сделать ring time группы >60 сек? Думаю такой вариант бы мне полностью подошел - сделать ring time, скажем, 180 сек: точно или будет ответ, или абонент трубку положит.
2. Есть ли какая-то логика в формировании каналов (выделены жирным в цитате). Естесственно интересует идентификатор после "SIP/номер-".
3. Возможно ли как-то настроить систему, чтобы после проигрывания фразы, что "все заняты", идентификаторы были теми же?
Есть конечно вариант парсить все это, просто подумал, может быть я не один в этом мире с такими "хотелками":)
Спасибо за внимание!