此刻即可学习,何必要挑日子。

理解拨号规则extension.conf的内在

上一篇 / 下一篇  2016-11-09 09:38:55 / 个人分类:Asterisk

      B2高精度模块测试若确实需要量化出数据,则必定需要自动化的协助,所以在尝试修改设备拨号规则的同时,我写了一段代码来自动化测试。主要实现的功能是修改TB设备间Bri连接模式,再进行多次传真,检查传真结果和质量。

      脚本内容见附件,接下来主要分享下,改拨号脚本时候对Asterisk拨号脚本的一些理解。详细拨号脚本也在附件,以下只贴出关键点。

       以前排查无法通话问题的时候,都知道先看下串口的打印,但其实也不理解打开串口要看哪些东西。硬着头皮理解串口打印信息,多多少少知道点大概,但要为解决问题提供帮助仍然不够。这次学习了拨号规则,感觉有所收获。其实简单的说,串口打印的信息其实就是告诉你拨号规则走到了哪里,我们一旦知道拨号规则是怎么走的,自然就能定位问题所在。

        以下是这次拨号脚本的主要拨号规则。(只说明对拨号规则是如何走的,最好先理解extension.conf的语法,可以查看我共享里面的另一篇:《 asterisk拨号规则》

        我的通话过程是这样:注册account账户30001,30001通过Bri线路呼出到另一台(拨号脚本一模一样)TB设备的account20001,然后进行传真。

        首先第一步30001通过Bri线路呼出,这一段如何实现?每当我们新建一个account账户的时候,拨号规则都会多出这样的内容:

[outgoing_Account-30001]

[outgoing_Account-30002]

        表示的是有这样两个Account账户,目前无设置相对应的路由。当有设置路由时如以下,意思是若呼出前缀为1,则转到宏Route_FaxOut1去处理。

[outgoing_Account-30001]

exten = _1.,1,Macro(Routein_FaxOut1,1,${EXTEN})

        对应的宏Route_FaxOut1相当于是到了[macro-Routein_FaxOut1]这里来。在这个处理规则里面显示设置了CDR(userfield)=Inbound,再判断黑名单,设置CallerID,然后转到Routeout_FaxOut1这个处理规则(呼出目的地的指定在[Routeout_FaxOut1]中的一句:exten = _.,n,Macro(Dial_Out,1,,${EXTEN:0},DAHDI/g21,),即表示从DAHDI/g21这个模拟口出去),依次推进,最终到达真正的处理规则:Dial_Out。在Dial_Out里面Dial函数呼出并转到发送传真的处理规则。在拨号脚本中[]表示一个流程,流程传递促进通话的进行,这一过程和平常写代码时候的“函数”,“宏”原理类似。

        TB等网关应该说没有呼入路由和呼出路由的说法,所以我反倒觉得这样更容易理解拨号负责的处理方式,我们只要单纯将它理解为流程的转移。给我的一个感觉就是通过配置文件来写代码,可读性不高,不过原理就是编程。至于一些语法和函数,了解常见的就可以。

[macro-Routein_FaxOut1]

exten = s,1,Set(CDR(userfield)=Inbound)

exten = s,n,GotoIf(${DB_EXISTS(blacklist/${CALLERID(num)})}?Blacklist-Handle,s,1)

exten = s,n,Set(TRUNKDID=${IF($[${ARG2}=s]?${CALLERID(name)}:${ARG2})})

exten = s,n,Goto(Routeout_FaxOut1,${ARG2},1)

exten = s,102,Goto(Blacklist-Handle,s,1)


[macro-Routein_FaxIn1]

exten = s,1,Set(CDR(userfield)=Inbound)

exten = s,n,GotoIf(${DB_EXISTS(blacklist/${CALLERID(num)})}?Blacklist-Handle,s,1)

exten = s,n,Set(TRUNKDID=${IF($[${ARG2}=s]?${CALLERID(name)}:${ARG2})})

exten = s,n,Goto(Routeout_FaxIn1,${ARG2},1)

exten = s,102,Goto(Blacklist-Handle,s,1)

[Routeout_FaxOut1]

exten = h,1,Hangup

exten = _.,1,Set(ORGINEXTEN=${EXTEN})

exten = _.,n,Set(ORGINCONTEXT=${IF($[${LEN(${ORGINCONTEXT})} > 0]?${ORGINCONTEXT}: ${CONTEXT})})

exten = _.,n,GetNextOutRouter(${ORGINCONTEXT},)

exten = _.,n,Macro(Dial_Out,1,,${EXTEN:0},DAHDI/g21,)

exten = _.,100,Hangup()

exten = T,1,Goto(${ORGINEXTEN},100)

exten = e,1,Goto(${ORGINEXTEN},100)

[Routeout_FaxIn1]

exten = h,1,Hangup

exten = _.,1,Set(ORGINEXTEN=${EXTEN})

exten = _.,n,Set(ORGINCONTEXT=${IF($[${LEN(${ORGINCONTEXT})} > 0]?${ORGINCONTEXT}: ${CONTEXT})})

exten = _.,n,GetNextOutRouter(${ORGINCONTEXT},)

exten = _.,n,Macro(RecvFax,1,,${EXTEN:0},trunk-acc-Account1,)

exten = _.,100,Hangup()

exten = T,1,Goto(${ORGINEXTEN},100)

exten = e,1,Goto(${ORGINEXTEN},100)


[macro-Dial_Out]

exten = s,1,NoOp(do call out)

exten = s,n,set(CALLERID(num)=30001)

exten = s,n,Dial(${ARG4}/${ARG3},15,M(snd_fax))

exten = s,n,Hangup()           

                              

[macro-snd_fax]       

exten = s,1,Set(faxlocation=/persistent)

exten = s,n,Set(faxfile=fax.tiff)

exten = s,n,SendFAX(${faxlocation}/${faxfile})

exten = s,n,NoOp(FAX has been sent)

exten = s,n,Hangup()


[macro-RecvFax]                                                                              

exten = _.,1,Answer()                                                                            

exten = _.,n,Wait(3)                                                                                                                                  

exten = _.,n,Set(FAXFROM=${IF($[${LEN(${CALLERID(num)})} > 0]?${CALLERID(num)}: Unknown)})       

'exten = _.,n,Set(FAXFILE=/persistent/tmp/fax/${EXTEN}-${STRFTIME(,,%Y%m%d-%H%M)}-${RAND(1)}.tiff)

exten = _.,n,Set(FAXFILE=/persistent/tmp/fax/fax_in.tiff)

exten = _.,n,ReceiveFAX(${FAXFILE})                                                                            

exten = _.,n,Hangup() 


[Voip-Account-30001]

exten = _.,1,GotoIfTime(00:00-23:59,mon-sun,*,*?outgoing_Account-30001,${EXTEN},1)

exten = h,1,hangup


[DID_trunk-bri-SPAN1]

exten = _.,1,GotoIfTime(00:00-23:59,mon-sun,*,*?outgoing_trunk-bri-SPAN1,${EXTEN},1)

exten = h,1,hangup


[outgoing_Account-30001]

exten = _1.,1,Macro(Routein_FaxOut1,1,${EXTEN})


[outgoing_trunk-bri-SPAN1]

exten = _.,1,Macro(Routein_FaxIn1,1,${EXTEN})


TAG: asterisk Asterisk

 

评分:0

我来说两句

我的栏目

日历

« 2024-03-24  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 4074
  • 日志数: 2
  • 建立时间: 2014-11-12
  • 更新时间: 2016-11-09

RSS订阅

Open Toolbar