1 | изначальная версия редактировать | |
[macro-mfn1]
exten => s,1,Dial(${ARG1},${ARG2},mt)
exten => h,1,NoOp(${CDR(dstcannel)})
exten => h,n,Hangup()
[out]
exten => _1111,1,Macro(mfn1,sip/1001,60)
exten => h,1,NoOp(${CDR(dstchannel)})
exten => h,n,Set(CDR(userfield)=${CDR(dstchannel))
exten => h,n,StopMixMonitor()
exten => h,n,System(${monopt})
При звонке имеем
-- Executing [1111@out:1] Macro("SIP/1004-0000014e", "mfn1,sip/1001,60") in new stack
-- Executing [s@macro-mfn1:1] Dial("SIP/1004-0000014e", "sip/1001,60,mt") in new stack
== Using SIP RTP CoS mark 5
-- Called 1001
-- Started music on hold, class 'default', on SIP/1004-0000014e
-- SIP/1001-0000014f is ringing
-- SIP/1001-0000014f answered SIP/1004-0000014e
-- Stopped music on hold on SIP/1004-0000014e
-- Executing [h@macro-mfn1:1] NoOp("SIP/1004-0000014e", "") in new stack
-- Executing [h@macro-mfn1:2] Hangup("SIP/1004-0000014e", "") in new stack
== Spawn extension (macro-mfn1, h, 2) exited non-zero on 'SIP/1004-0000014e'
== Spawn extension (macro-mfn1, s, 1) exited non-zero on 'SIP/1004-0000014e' in macro 'mfn1'
== Spawn extension (out, 1111, 1) exited non-zero on 'SIP/1004-0000014e'
-- Executing [h@out:1] NoOp("SIP/1004-0000014e", "SIP/1001-0000014f") in new stack
-- Executing [h@out:2] Set("SIP/1004-0000014e", "CDR(userfield)=SIP/1001-0000014f") in new stack
-- Executing [h@out:3] StopMixMonitor("SIP/1004-0000014e", "") in new stack
-- Executing [h@out:4] System("SIP/1004-0000014e", "") in new stack
Т.е. получается когда звонок в макросе (dstchannel) - пустой, а когда возвращается в контекст [out] - (dstchannel) снова есть.
Задача такая - записать в userfield номер принявший вызов т.е. Cut из dstchannel, но чет не получается. Если делать set cdr в контексте out , то в базе ничего нет. Может из макроса надо писать, но как в нем получить dstchannel ?
2 | No.2 Revision редактировать |
[macro-mfn1]
exten => s,1,Dial(${ARG1},${ARG2},mt)
exten => h,1,NoOp(${CDR(dstcannel)})
exten => h,n,Hangup()
[out]
exten => _1111,1,Macro(mfn1,sip/1001,60)
exten => h,1,NoOp(${CDR(dstchannel)})
exten => h,n,Set(CDR(userfield)=${CDR(dstchannel))
exten => h,n,StopMixMonitor()
exten => h,n,System(${monopt})
При звонке имеем
-- Executing [1111@out:1] Macro("SIP/1004-0000014e", "mfn1,sip/1001,60") in new stack
-- Executing [s@macro-mfn1:1] Dial("SIP/1004-0000014e", "sip/1001,60,mt") in new stack
== Using SIP RTP CoS mark 5
-- Called 1001
-- Started music on hold, class 'default', on SIP/1004-0000014e
-- SIP/1001-0000014f is ringing
-- SIP/1001-0000014f answered SIP/1004-0000014e
-- Stopped music on hold on SIP/1004-0000014e
-- Executing [h@macro-mfn1:1] NoOp("SIP/1004-0000014e", "") in new stack
-- Executing [h@macro-mfn1:2] Hangup("SIP/1004-0000014e", "") in new stack
== Spawn extension (macro-mfn1, h, 2) exited non-zero on 'SIP/1004-0000014e'
== Spawn extension (macro-mfn1, s, 1) exited non-zero on 'SIP/1004-0000014e' in macro 'mfn1'
== Spawn extension (out, 1111, 1) exited non-zero on 'SIP/1004-0000014e'
-- Executing [h@out:1] NoOp("SIP/1004-0000014e", "SIP/1001-0000014f") in new stack
-- Executing [h@out:2] Set("SIP/1004-0000014e", "CDR(userfield)=SIP/1001-0000014f") in new stack
-- Executing [h@out:3] StopMixMonitor("SIP/1004-0000014e", "") in new stack
-- Executing [h@out:4] System("SIP/1004-0000014e", "") in new stack
Т.е. получается когда звонок в макросе (dstchannel) - пустой, а когда возвращается в контекст [out] - (dstchannel) снова есть.
Задача такая - записать в userfield номер принявший вызов т.е. Cut из dstchannel, но чет не получается. Если делать set cdr в контексте out , то в базе ничего нет. Может из макроса надо писать, но как в нем получить dstchannel ?
_____________часть 2___________
Для того чтобы получить в макросе того, кто принял звонок можно использовать переменную ${DIALEDPEERNAME}
Однако
exten => s,n,Set(CDR(userfield)=${CUT(DIALEDPEERNAME,-,1)})
в базу не пишет, в консоле ошибок нет вроде
Executing [s@macro-mfn1:2] Set("SIP/1004-00000188", "CDR(userfield)=SIP/1001") in new stack
В чем может быть проблема? как из макроса/(после макроса) изменить userfield ?
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.