Есть такой диалплан:
| Код: |
| macro ael-dial( ext ) { Dial(${ext},20); switch(${DIALSTATUS}) { case BUSY: NoOp(BUSY); break; case CHANUNAVAIL: NoOp(CHANUNAVAIL); break; case NOANSWER: NoOp(NOANSWER); break; case CONGESTION: NoOp(CONGESTION); break; case ANSWER: NoOp(ANSWER); break; default: NoOp(default); }; NoOp(end dial); }; context local { _XXX => &ael-dial(IAX2/${EXTEN}); _XXXXXXX => &ael-dial(SIP/${EXTEN}@operator-out); }; context incoming { _XXXXXXX => &ael-dial(IAX2/${EXTEN:4}); }; |
Реакция на CHANUNAVAIL и NOANSWER такая, как и ожидается:
| Код: |
| asterisk*CLI> -- Executing [2800800@incoming:1] Macro("SIP/10.0.0.1-00825080", "ael-dial|IAX2/800") in new stack -- Executing [s@macro-ael-dial:1] Set("SIP/10.0.0.1-00825080", "ext=IAX2/800") in new stack -- Executing [s@macro-ael-dial:2] Dial("SIP/10.0.0.1-00825080", "IAX2/800|20") in new stack -- Called 800 -- Call accepted by 10.0.0.2 (format ulaw) -- Format for call is ulaw -- IAX2/800-2 is ringing -- Nobody picked up in 20000 ms [May 5 21:08:56] DEBUG[24792]: chan_iax2.c:2979 iax2_hangup: We're hanging up IAX2/800-2 with cause 0 now... -- Hungup 'IAX2/800-2' -- Executing [s@macro-ael-dial:3] Goto("SIP/10.0.0.1-00825080", "sw-1-NOANSWER|10") in new stack -- Goto (macro-ael-dial,sw-1-NOANSWER,10) -- Executing [sw-1-NOANSWER@macro-ael-dial:10] NoOp("SIP/10.0.0.1-00825080", "NOANSWER") in new stack -- Executing [sw-1-NOANSWER@macro-ael-dial:11] Goto("SIP/10.0.0.1-00825080", "s|4") in new stack -- Goto (macro-ael-dial,s,4) -- Executing [s@macro-ael-dial:4] NoOp("SIP/10.0.0.1-00825080", "Finish switch-ael-dial-1") in new stack -- Executing [s@macro-ael-dial:5] NoOp("SIP/10.0.0.1-00825080", "end dial") in new stack == Auto fallthrough, channel 'SIP/10.0.0.1-00825080' status is 'NOANSWER' asterisk*CLI> |
А вот на удачное завершение вызова (поговорили и положили трубку) реакция странная - ни NoOp(ANSWER), ни даже NoOp(end dial) не выполняются:
| Код: |
| asterisk*CLI> -- Executing [2800800@incoming:1] Macro("SIP/10.0.0.1-00838690", "ael-dial|IAX2/800") in new stack -- Executing [s@macro-ael-dial:1] Set("SIP/10.0.0.1-00838690", "ext=IAX2/800") in new stack -- Executing [s@macro-ael-dial:2] Dial("SIP/10.0.0.1-00838690", "IAX2/800|20") in new stack -- Called 800 -- Call accepted by 10.0.0.2 (format ulaw) -- Format for call is ulaw -- IAX2/800-2 is ringing -- IAX2/800-2 answered SIP/10.0.0.1-00838690 [May 5 21:11:34] WARNING[24794]: cdr.c:482 ast_cdr_merge: CDR start disagreement for SIP/10.0.0.1-00838690 [May 5 21:11:34] DEBUG[24777]: chan_iax2.c:6714 socket_process: Ooh, voice format changed to 4 [May 5 21:11:38] DEBUG[24794]: chan_iax2.c:2979 iax2_hangup: We're hanging up IAX2/800-2 with cause 16 now... -- Hungup 'IAX2/800-2' == Spawn extension (macro-ael-dial, s, 2) exited non-zero on 'SIP/10.0.0.1-00838690' in macro 'ael-dial' == Spawn extension (macro-ael-dial, s, 2) exited non-zero on 'SIP/10.0.0.1-00838690' asterisk*CLI> |
Как выполнить определенные действия (NoOp в данном случае) после удачного завершения вызова?