底下所示範的是 asterisk 的 dial plan 此檔內 extensions.conf 的指令 Gosub 的用法
[company]
exten => 332,1,Dial(SIP/${EXTEN},40,Ttm)
exten => 332,n,Gosub(exten-status,${DIALSTATUS},1)
exten => 332,n,Hangup()
exten => 333,1,Dial(SIP/${EXTEN},40,Ttm)
exten => 333,2,Gosub(exten-status,${DIALSTATUS},1)
exten => 333,n,Goto(ToExten,1)
;90秒後無人接聽則撥放提示語音,對不起此號碼無人接聽
exten => ToExten,1,Background(custom/2exten)
;請改撥其它分機號碼
exten => ToExten,2,WaitExten(10)
exten => ToExten,n,Background(custom/tks4call)
;謝謝來電
exten => ToExten,n,Hangup()
[exten-status]
;底下為分機狀態處理方式
exten => NOANSWER,1,Playback(custom/NoAnswer)
exten => NOANSWER,2,Playback(custom/NoAnswer)
exten => NOANSWER,n,Return
;無人應答,返回
exten => BUSY,1,Background(custom/sorry_busy)
exten => BUSY,2,Background(custom/sorry_busy)
exten => BUSY,n,Return
;忙線中
exten => CONGESTION,1,Playback(custom/sorry_busy)
exten => CONGESTION,2,Playback(custom/sorry_busy)
exten => CONGESTION,n,Return
;忙線中
exten => CHANUNAVAIL,1,Playback(custom/Sorry_ChannelUnavailable)
exten => CHANUNAVAIL,2,Playback(custom/Sorry_ChannelUnavailable)
exten => CHANUNAVAIL,n,Return
;無法接通
設定說明:
exten => 332,n,Gosub(exten-status,${DIALSTATUS},1)
當撥打 332 此分機時,若無人接聽、忙線、分機未上線等狀況,則會先跳至 [exten-status] 這個區段(context),然後根據不同的撥打狀況撥放不同的語音提示。
exten => NOANSWER,n,Return
Return,使用這個指令則會回到原來的區段。前提是之前必須是使用Gosub指令跳過來的。若是使用Goto指令跳過來的話,則無法使用 Return 指令回到原來區段。
${DIALSTATUS} 是系統保留的特殊變數,變撥打時所遇到的狀況,都會反應到此變數,詳細資料可見此。
撥打 333 分機,除了會語音提示分機狀態外,還會提示:請改撥其它分機號碼 然後等待10秒後沒有按任何分機號則撥放語音提示:謝謝您的來電。 之後掛斷。