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

CDR не формируется для dial

Проблемы и их решения Asterisk как такового

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

CDR не формируется для dial

Сообщение P.Ilya » 10 янв 2018, 11:46

Есть куча точек входа, сформированных вот так
Код: выделить все
сетапим кучу переменных
exten => _XXXXXXXXXX,n,GoSub(goCallManual,s,1)


в нашей процедуре делается вызов Dial c параметрами + макрос для записи разговора
[goCallManual]
exten => s,1,NoOp(); для ручного вызова. переменные уже установлены
exten => s,n,Set(__MIXMONITOR_FILENAME=unsorted/_-${SIPID}-${EPOCH}-${callphone}.wav)
exten => s,n,Dial(SIP/${account}/+${callphone},3600,M(callLogOutAgent)gec)
exten => s,n,Hangup
exten => h,1,NoOp();
exten => h,n,Set(__total_time=${CDR(duration)})


Код: выделить все
[macro-callLogOutAgent]
exten => s,1,NoOp();
exten => s,n,MixMonitor(${MIXMONITOR_FILENAME},b,report_talk.php ${CONSOLE_PARAMS} &);

И в логах, и в отчетах переменная total_time почему-то всегда устанавливается в 0.
1) Нашел упоминание в https://www.voip-info.org/wiki/view/Asterisk+cmd+Dial что если мы внутри макроса, то CDR не формируется. Но мы не внутри макроса, он отработал и мы уже снаружи, в процедуре.
2) Попробовал через явное вычисление двух меток времени ${EPOCH} - как разница в начале и в конце разговора, но макрос callLogOutAgent и процедура выполняется для оператора и клиента соответственно, метки ставятся, но в разных контекстах, в h не видны одновременно.

Как это сделать попроще и адекватно?
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: CDR не формируется для dial

Сообщение Repz » 10 янв 2018, 12:40

так проверьте что возвращает CDR
same => n,NoOp(CDR duration -- ${CDR(duration)})
и присвоение
same => n,NoOp(Var total_time -- ${total_time})

вероятнее всего ошибка дальше, когда пытаетесь воспользоваться total_time
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35

Re: CDR не формируется для dial

Сообщение P.Ilya » 10 янв 2018, 12:46

Так я в логах и смотрю, что присваивается, через
Код: выделить все
asterisk -rvvvvv |grep total_time

Код: выделить все
-- Executing [h@goCallManual:3] Set("SIP/direct-000d0a27", "__total_time=0") in new stack


Кстати, почему-то для всех неуспешных вызовов CDR сформирован, а для успешных нет - пустые все поля.
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: CDR не формируется для dial

Сообщение Repz » 10 янв 2018, 12:52

exten => h,1,NoOp();
exten => h,n,Set(__total_time=${CDR(duration)})
same => n,NoOp(CDR duration -- ${CDR(duration)})
same => n,NoOp(Var total_time -- ${total_time})

допишите две строки и посмотрите выхлоп, дальше решайте почему сдр нулевой
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35

Re: CDR не формируется для dial

Сообщение P.Ilya » 10 янв 2018, 13:03

Нет, там все нормально.
Помогло методом тыка исключение опции
g: When the called party hangs up, continue to execute commands in the current context at the next priority.
что странно.
P.Ilya
 
Сообщений: 101
Зарегистрирован: 17 ноя 2014, 19:40

Re: CDR не формируется для dial

Сообщение Repz » 10 янв 2018, 13:54

Изображение
Repz
 
Сообщений: 169
Зарегистрирован: 04 мар 2015, 12:35


Вернуться в Конфигурация и настройка Asterisk

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

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