Страница 1 из 1

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

Добавлено: 10 янв 2018, 10:46
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 не видны одновременно.

Как это сделать попроще и адекватно?

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

Добавлено: 10 янв 2018, 11:40
Repz
так проверьте что возвращает CDR
same => n,NoOp(CDR duration -- ${CDR(duration)})
и присвоение
same => n,NoOp(Var total_time -- ${total_time})

вероятнее всего ошибка дальше, когда пытаетесь воспользоваться total_time

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

Добавлено: 10 янв 2018, 11:46
P.Ilya
Так я в логах и смотрю, что присваивается, через

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

asterisk -rvvvvv |grep total_time

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

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

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

Добавлено: 10 янв 2018, 11:52
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})

допишите две строки и посмотрите выхлоп, дальше решайте почему сдр нулевой

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

Добавлено: 10 янв 2018, 12:03
P.Ilya
Нет, там все нормально.
Помогло методом тыка исключение опции
g: When the called party hangs up, continue to execute commands in the current context at the next priority.
что странно.

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

Добавлено: 10 янв 2018, 12:54
Repz
Изображение