我有两个voip提供商,一个免费和另一个付费。 免费提供商只允许本地拨打某些区号,所以如果通话失败,我需要退回付费提供商。 目前,我在我的extensions.conf文件中有以下上下文:
[globals] ; freephoneline.ca PRIMARY_PROVIDER=fpl ; voip.ms SECONDARY_PROVIDER=voipms [local] exten => _NXXNXXXXXX,1,Set(CALLERID(name)=${OUTGOING_NAME}) exten => _NXXNXXXXXX,n,Dial(SIP/${EXTEN}@${PRIMARY_PROVIDER}) exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${OUTGOING_NUMBER}) exten => _NXXNXXXXXX,n,Dial(SIP/1${EXTEN}@${SECONDARY_PROVIDER}) exten => _NXXNXXXXXX,n,Hangup()
我查了一下日志,注意到免费提供NOANSWER响应,如果不允许的话(即使它播放一条消息)。 我想要的是:
${PRIMARY_PROVIDER} 。 NOANSWER被提供者返回(不是被调用者没有回答),那么用${SECONDARY_PROVIDER} 如何修改我的拨号计划以获得理想的结果?
编辑:主要提供者是freephoneline.ca ,我使用星号v1.8.2.3-2
[local] exten => _NXXNXXXXXX,1,Set(CALLERID(name)=${OUTGOING_NAME}) exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${OUTGOING_NUMBER}) exten => _NXXNXXXXXX,n,Set(dest=${EXTEN}) exten => _NXXNXXXXXX,n,Dial(SIP/${EXTEN}@${PRIMARY_PROVIDER},20,); 20 is how much to call,in seconds exten => _NXXNXXXXXX,n,Goto(s-${DIALSTATUS},1) exten => s-ANSWER,1,Hangup exten => s-ANSWERED,1,Hangup exten => s-NOANSWER,1,Goto(dialnext,1) exten => s-CHANUNAVAIL,1,Goto(dialnext,1) exten => s-BUSY,1,Busy exten => s-FAIL,1,Goto(dialnext,1) exten => s-CONGESTION,1,Goto(dialnext,1) exten =>dialnext,1,Dial(SIP/1${dest}@${SECONDARY_PROVIDER}) exten =>dialnext,n,Hangup()
这里是我如何用谷歌的语音和中继做这个例子。 有了我的设置,我必须设法将gv限制在1个频道,同时也要设置一个旋转,所以第一个gv中继并不总是受到打扰,因为它是第一个。 还有更多,但只是显示故障转移,我认为这是绰绰有余:
exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = ""]?15:) exten => _1NXXNXXXXXX,15,Set(goto=$[${PRIORITY} + 15]) exten => _1NXXNXXXXXX,n,Set(thetrunk=feliciesmaty) exten => _1NXXNXXXXXX,n,GotoIf($[${${thetrunk}} > 0]?${goto}) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=1) exten => _1NXXNXXXXXX,n,Dial(Motif/[email protected]/${EXTEN}@voice.google.com,,r) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=0) exten => _1NXXNXXXXXX,n,Verbose(0, getting staus ${DIALSTATUS} ); exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "SUCCESS"]?hangup:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "HANGUP"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "UNKNOWN"]?${goto}:) exten => _1NXXNXXXXXX,30,Set(goto=$[${PRIORITY} + 20]) exten => _1NXXNXXXXXX,n,Set(thetrunk=bettyrobertson169gmailcom) exten => _1NXXNXXXXXX,n,GotoIf($[${${thetrunk}} > 0]?${goto}) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=1) exten => _1NXXNXXXXXX,n,Dial(Motif/bettyrobertson169gmailcom/${EXTEN}@voice.google.com,,r) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=0) exten => _1NXXNXXXXXX,n,Verbose(0, getting staus ${DIALSTATUS} ); exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "SUCCESS"]?hangup:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "HANGUP"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "UNKNOWN"]?${goto}:) exten => _1NXXNXXXXXX,50,Set(goto=$[${PRIORITY} + 25]) exten => _1NXXNXXXXXX,n,Set(thetrunk=swigartjosephgmailcom) exten => _1NXXNXXXXXX,n,GotoIf($[${${thetrunk}} > 0]?${goto}) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=1) exten => _1NXXNXXXXXX,n,Dial(Motif/swigartjosephgmailcom/${EXTEN}@voice.google.com,,r) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=0) exten => _1NXXNXXXXXX,n,Verbose(0, getting staus ${DIALSTATUS} ); exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "SUCCESS"]?hangup:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "HANGUP"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "UNKNOWN"]?${goto}:) exten => _1NXXNXXXXXX,75,Set(goto=$[${PRIORITY} + 25]) exten => _1NXXNXXXXXX,n,Set(thetrunk=bettyrobertson169gmailcom) exten => _1NXXNXXXXXX,n,GotoIf($[${${thetrunk}} > 0]?${goto}) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=1) exten => _1NXXNXXXXXX,n,Dial(Motif/bettyrobertson169gmailcom/${EXTEN}@voice.google.com,,r) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=0) exten => _1NXXNXXXXXX,n,Verbose(0, getting staus ${DIALSTATUS} ); exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "SUCCESS"]?hangup:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "HANGUP"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "UNKNOWN"]?${goto}:) exten => _1NXXNXXXXXX,100,Set(goto=$[${PRIORITY} + 25]) exten => _1NXXNXXXXXX,n,Set(thetrunk=sandralanago) exten => _1NXXNXXXXXX,n,GotoIf($[${${thetrunk}} > 0]?${goto}) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=1) exten => _1NXXNXXXXXX,n,Dial(Motif/[email protected]/${EXTEN}@voice.google.com,,r) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=0) exten => _1NXXNXXXXXX,n,Verbose(0, getting staus ${DIALSTATUS} ); exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "SUCCESS"]?hangup:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "HANGUP"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "UNKNOWN"]?${goto}:) exten => _1NXXNXXXXXX,125,Set(goto=$[${PRIORITY} + 25]) exten => _1NXXNXXXXXX,n,Set(thetrunk=sofiadugal) exten => _1NXXNXXXXXX,n,GotoIf($[${${thetrunk}} > 0]?${goto}) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=1) exten => _1NXXNXXXXXX,n,Dial(Motif/[email protected]/${EXTEN}@voice.google.com,,r) exten => _1NXXNXXXXXX,n,Set(GLOBAL(${thetrunk})=0) exten => _1NXXNXXXXXX,n,Verbose(0, getting staus ${DIALSTATUS} ); exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "SUCCESS"]?hangup:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CANCEL"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "CONGESTION"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "HANGUP"]?${goto}:) exten => _1NXXNXXXXXX,n,GotoIf($["${DIALSTATUS}" = "UNKNOWN"]?${goto}:)