ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

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

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

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

Сообщение janetland » 19 дек 2017, 18:00

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

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...
janetland
 
Сообщений: 43
Зарегистрирован: 24 авг 2016, 16:11

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

Сообщение fecyt » 19 дек 2017, 18:10

EPOCH перед Dial и в нужное время, затем вычислительные действия.
fecyt
 
Сообщений: 148
Зарегистрирован: 17 янв 2017, 18:51

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

Сообщение ded » 19 дек 2017, 18:16

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

Каждая запись в CDR - транзакция, создаётся после HangUP(), в ней и есть данные о длительности.
ded
 
Сообщений: 15801
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение janetland » 19 дек 2017, 18:38

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

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

fecyt, вначале получится отловить EPOCH, а как это сделать после диала? Канал-то уже лег...
janetland
 
Сообщений: 43
Зарегистрирован: 24 авг 2016, 16:11

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

Сообщение ded » 19 дек 2017, 19:07

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

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

Сообщение virus_net » 20 дек 2017, 08:29

Судя по ответам получается что 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 - звони бесплатно и напрямую.
virus_net
 
Сообщений: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

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

Сообщение janetland » 20 дек 2017, 14:27

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?
janetland
 
Сообщений: 43
Зарегистрирован: 24 авг 2016, 16:11


Вернуться в Вопросы новичков

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 33

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