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

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

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
P.Ilya
Сообщения: 101
Зарегистрирован: 17 ноя 2014, 18:40

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

Сообщение P.Ilya »

Есть куча точек входа, сформированных вот так

Код: Выделить всё

сетапим кучу переменных
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 не видны одновременно.

Как это сделать попроще и адекватно?
Repz
Сообщения: 169
Зарегистрирован: 04 мар 2015, 11:35

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

Сообщение Repz »

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

вероятнее всего ошибка дальше, когда пытаетесь воспользоваться total_time
P.Ilya
Сообщения: 101
Зарегистрирован: 17 ноя 2014, 18:40

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

Сообщение P.Ilya »

Так я в логах и смотрю, что присваивается, через

Код: Выделить всё

asterisk -rvvvvv |grep total_time

Код: Выделить всё

 -- Executing [h@goCallManual:3] Set("SIP/direct-000d0a27", "__total_time=0") in new stack
Кстати, почему-то для всех неуспешных вызовов CDR сформирован, а для успешных нет - пустые все поля.
Repz
Сообщения: 169
Зарегистрирован: 04 мар 2015, 11:35

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

Сообщение Repz »

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})

допишите две строки и посмотрите выхлоп, дальше решайте почему сдр нулевой
P.Ilya
Сообщения: 101
Зарегистрирован: 17 ноя 2014, 18:40

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

Сообщение P.Ilya »

Нет, там все нормально.
Помогло методом тыка исключение опции
g: When the called party hangs up, continue to execute commands in the current context at the next priority.
что странно.
Repz
Сообщения: 169
Зарегистрирован: 04 мар 2015, 11:35

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

Сообщение Repz »

Изображение
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH