Страница 1 из 1
продолжительность вызова в реальном времени
Добавлено: 19 дек 2017, 17:00
janetland
Доброго дня всем.
Возник следующий вопрос - как получить в контексте вызова номера значение длительности прошедшего разговора в режиме реального времени?
exten => _98921Х.,1,Dial(SIP/trunk/${EXTEN:1},,L(20000
5000));
exten => _98921Х.,n,Noop(time is ${CDR(duration)});
exten => _98921Х.,n,HangUP();
Переменная из CDR на сколько дало гугление, в начале имеет значение 0, а после успешного Dail тоже некоторое время равна нулю.
В голову идет только некий скрипт, парсящий mysql таблицу по значению поля billsec...
Re: продолжительность вызова в реальном времени
Добавлено: 19 дек 2017, 17:10
fecyt
EPOCH перед Dial и в нужное время, затем вычислительные действия.
Re: продолжительность вызова в реальном времени
Добавлено: 19 дек 2017, 17:16
ded
Вы запрашиваете Noop(time is ${CDR(duration)}) до события HangUP()
Каждая запись в CDR - транзакция, создаётся после HangUP(), в ней и есть данные о длительности.
Re: продолжительность вызова в реальном времени
Добавлено: 19 дек 2017, 17:38
janetland
Благодарю всех ответивших.
Ded, спасибо, а где результирующие значения этой транзакции ловить?
В базу оно пишется, все ок, но хотелось бы до или вместе с записью в базу еще и обработать.
Случаем, не в exten => h, ?
fecyt, вначале получится отловить EPOCH, а как это сделать после диала? Канал-то уже лег...
Re: продолжительность вызова в реальном времени
Добавлено: 19 дек 2017, 18:07
ded
результирующие значения этой транзакции ловить SQL запросом в базу asteriskcdrdb (в общем случае). Но, как верно заметили, Вы не можете получить значение транзакции до завершения транзакции.
janetland писал(а):как это сделать после диала? Канал-то уже лег..
Как угодно.
1) письменно, email, через скрипт.
2) сгенерить автоматический звонок после положения трубки по основному разговору с проговариванием значения billsec из базы CDR
3) положить Hangup в дальнее плечо (куда звонил абонент), оставив короткое плечо, в exten => h,
и сообщить ему сколько он проговорил - SayDigits minutes.
Но понятно, что если он сам кладёт трубу, то ничего не успеет услышать?
Re: продолжительность вызова в реальном времени
Добавлено: 20 дек 2017, 07:29
virus_net
Судя по ответам получается что subj сформулирован не верно.
Для меня "в реальном времени" это когда вызов ещё не закончен, а мы хотим получить его длительность.
В данном случае автор обсуждает после Dial, а значит это уже пост обработка вызова.
janetland писал(а):а где результирующие значения этой транзакции ловить?
Ключевое:
ded писал(а):Каждая запись в CDR - транзакция, создаётся после HangUP()
Прочтите это ещё раз и посмотрите на приведенный вами контекст. Тогда и:
janetland писал(а):Случаем, не в exten => h, ?
Перестает быть вопросом.
В любом случае не понимаю, а зачем такое спрашивать и ждать ответа, если можно взять и за минуту протестить и самому получить ответ... Не понимаю...
janetland писал(а):вначале получится отловить EPOCH, а как это сделать после диала?
Что "это" ?
Вызвать EPOCH ещё раз ? Да так же.
Получить значение предыдущего вызова EPOCH ? Прочесть переменную, в которую вы его сохраните до Dial.
Re: продолжительность вызова в реальном времени
Добавлено: 20 дек 2017, 13:27
janetland
ded писал(а):
1) письменно, email, через скрипт.
2) сгенерить автоматический звонок после положения трубки по основному разговору с проговариванием значения billsec из базы CDR
3) положить Hangup в дальнее плечо (куда звонил абонент), оставив короткое плечо, в exten => h,
и сообщить ему сколько он проговорил - SayDigits minutes.
Но понятно, что если он сам кладёт трубу, то ничего не успеет услышать?
На счет 1го это понятно, ничего сложного - по крону лезть в базу, отбирать по полю и далее звонить - уведомлять.
Касаемо 2 и 3 пункта, нет ли где примеров для изучения, мб попадались?
2virus_net, прорабатывается вариант в режиме реального времени уведомлять (когда абоненты еще говорят) и после окончания звонка. В режиме разговора нашел только принудительно отключение, либо изобретать некий скрипт с запросом, который будет мониторить дату начала разговора в случае длительности больше чем - вторгаться в канал и проговаривать сообщение.. Например, один из путей реализации
https://wapo-spb.livejournal.com/7235.html Сравнивая с базой cdr или текущим статусом завершения канала (трубку положили).
Как после Dial при положенной трубке (завершенной сессии) получить новое EPOCH?