Author: andyk74
Posted: Tue Jan 17, 2012 15:31 (GMT 1)
это так, в теории, надо отладить, я не пробовал
используйте
F([[context^]exten^]priority): When the caller hangs up, transfer
the called party to the specified destination and continue execution at
that location.
g: Proceed with dialplan execution at the next priority in the current
extension if the destination channel hangs up.
[dial_with_callback]
exten => _X!,1,NoOp(dial ${EXTEN}, callback if call was failed)
exten => _X!,n,Set(__destination_number=${EXTEN})
; тут используем аргумент ‘g’ команды dial
exten => _X!,n,Dial(SIP/${TRUNK}/${EXTEN},40,g)
; тут будем смотреть dialstatus:
;${DIALSTATUS}: This is the status of the call
; CHANUNAVAIL
; CONGESTION
; NOANSWER
; BUSY
; ANSWER
; CANCEL
; DONTCALL: For the Privacy and Screening Modes. Will be set if the
; called party chooses to send the calling party to the ‘Go Away’ script.
; TORTURE: For the Privacy and Screening Modes. Will be set if the
; called party chooses to send the calling party to the ‘torture’ script.
; INVALIDARGS
exten => _X!,n,Goto(process-${DIALSTATUS})
; эти статусы отрабатываем
exten => _X!,n(process-BUSY),NoOp
exten => _X!,n(process-NOANSWER),NoOp
exten => _X!,n(process-),NoOp
; call fail, исполнить ПОСЛЕ проигрывания сообщения (потому в конце амперсанд)
; тут можно сменить, спрашивать, хотите ли callback, в скрипте можно использовать переменную ${destination_number}
exten => _X!,n,System(bash -c "sleep 8; ….. генерируем call файл, хотя я люблю команду originate и доп. дайлплан " &)
exten => _X!,n,Playback(i_will_callback)
; у меня выход из логической части всегда в одном месте, потому hangup обрабатывается лишь раз
exten => _X!,n,Goto(hangup)
; если у вас правильный сип, эти дайлстатусы не надо обрабатывать, или
; звонок сбросили или проблема с транком.
; но можно перенести их выше
exten => _X!,n(process-ANSWER),NoOp
exten => _X!,n(process-CANCEL),NoOp
exten => _X!,n(process-DONTCALL),NoOp
exten => _X!,n(process-TORTURE),NoOp
exten => _X!,n(process-CONGESTION),NoOp
exten => _X!,n(process-CHANUNAVAIL),NoOp
; завершаем звонок
exten => _X!,n(hangup),Busy(
exten => _X!,n,Hangup
Перейти к источнику