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

продолжительность вызова в реальном времени

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

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

Ответить
janetland
Сообщения: 43
Зарегистрирован: 24 авг 2016, 15:11

продолжительность вызова в реальном времени

Сообщение janetland »

Доброго дня всем.
Возник следующий вопрос - как получить в контексте вызова номера значение длительности прошедшего разговора в режиме реального времени?

exten => _98921Х.,1,Dial(SIP/trunk/${EXTEN:1},,L(20000:10000:5000));
exten => _98921Х.,n,Noop(time is ${CDR(duration)});
exten => _98921Х.,n,HangUP();

Переменная из CDR на сколько дало гугление, в начале имеет значение 0, а после успешного Dail тоже некоторое время равна нулю.

В голову идет только некий скрипт, парсящий mysql таблицу по значению поля billsec...
fecyt
Сообщения: 148
Зарегистрирован: 17 янв 2017, 17:51

Re: продолжительность вызова в реальном времени

Сообщение fecyt »

EPOCH перед Dial и в нужное время, затем вычислительные действия.
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: продолжительность вызова в реальном времени

Сообщение ded »

Вы запрашиваете Noop(time is ${CDR(duration)}) до события HangUP()

Каждая запись в CDR - транзакция, создаётся после HangUP(), в ней и есть данные о длительности.
janetland
Сообщения: 43
Зарегистрирован: 24 авг 2016, 15:11

Re: продолжительность вызова в реальном времени

Сообщение janetland »

Благодарю всех ответивших.
Ded, спасибо, а где результирующие значения этой транзакции ловить?
В базу оно пишется, все ок, но хотелось бы до или вместе с записью в базу еще и обработать.

Случаем, не в exten => h, ?

fecyt, вначале получится отловить EPOCH, а как это сделать после диала? Канал-то уже лег...
ded
Сообщения: 15629
Зарегистрирован: 26 авг 2010, 19:00

Re: продолжительность вызова в реальном времени

Сообщение ded »

результирующие значения этой транзакции ловить SQL запросом в базу asteriskcdrdb (в общем случае). Но, как верно заметили, Вы не можете получить значение транзакции до завершения транзакции.
janetland писал(а):как это сделать после диала? Канал-то уже лег..
Как угодно.
1) письменно, email, через скрипт.
2) сгенерить автоматический звонок после положения трубки по основному разговору с проговариванием значения billsec из базы CDR
3) положить Hangup в дальнее плечо (куда звонил абонент), оставив короткое плечо, в exten => h,
и сообщить ему сколько он проговорил - SayDigits minutes.
Но понятно, что если он сам кладёт трубу, то ничего не успеет услышать?
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: продолжительность вызова в реальном времени

Сообщение virus_net »

Судя по ответам получается что subj сформулирован не верно.
Для меня "в реальном времени" это когда вызов ещё не закончен, а мы хотим получить его длительность.
В данном случае автор обсуждает после Dial, а значит это уже пост обработка вызова.
janetland писал(а):а где результирующие значения этой транзакции ловить?
Ключевое:
ded писал(а):Каждая запись в CDR - транзакция, создаётся после HangUP()
Прочтите это ещё раз и посмотрите на приведенный вами контекст. Тогда и:
janetland писал(а):Случаем, не в exten => h, ?
Перестает быть вопросом.
В любом случае не понимаю, а зачем такое спрашивать и ждать ответа, если можно взять и за минуту протестить и самому получить ответ... Не понимаю...
janetland писал(а):вначале получится отловить EPOCH, а как это сделать после диала?
Что "это" ?
Вызвать EPOCH ещё раз ? Да так же.
Получить значение предыдущего вызова EPOCH ? Прочесть переменную, в которую вы его сохраните до Dial.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
janetland
Сообщения: 43
Зарегистрирован: 24 авг 2016, 15:11

Re: продолжительность вызова в реальном времени

Сообщение 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?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH