Код: Выделить всё
сетапим кучу переменных
exten => _XXXXXXXXXX,n,GoSub(goCallManual,s,1)
[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} &);
1) Нашел упоминание в https://www.voip-info.org/wiki/view/Asterisk+cmd+Dial что если мы внутри макроса, то CDR не формируется. Но мы не внутри макроса, он отработал и мы уже снаружи, в процедуре.
2) Попробовал через явное вычисление двух меток времени ${EPOCH} - как разница в начале и в конце разговора, но макрос callLogOutAgent и процедура выполняется для оператора и клиента соответственно, метки ставятся, но в разных контекстах, в h не видны одновременно.
Как это сделать попроще и адекватно?