您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

开源IPPBX讲座-Trunk中继模块介绍

2018-01-25 13:33:02   作者:james.zhu    来源:Asterisk开源派   评论:0  点击:


  在前面的讲座中,我们简单介绍了呼入路由的设置问题和呼入以后的呼入目的地模块的设置。根据每个企业IPPBX呼入业务的需求不同,设置的呼入目的地也可能完全不同,这些模块会做相应的处理。但是,无论呼入或者呼出,用户首先需要设置第一个IPPBX的模块-Trunk 中继模块。如果没有trunk 模块,用户的IPPBX是无法和外部世界进行通信,只能进行内部呼叫。因此,为了进一步扩展我们对IPPBX的理解,我们在本章节重点介绍Trunk的概念,功能,参数配置,使用场景,Asterisk Odoo 呼叫器功能相关内容和相关讨论。

  1、早期的trunk 中继的概念来自于传统的PSTN网络,后来发展出来H323和SIP。 我们今天重点讨论的是PSTN的trunk和SIP的trunk。根据维基百科的定义对trunk的定义:
  A circuit between telephone switchboards or other switching equipment, as distinguished from local loop circuits which extend from telephone exchange switching equipment to individual telephones or information origination/termination equipment.
  简单来说,就是trunk 就是一个电路交换,通过交换机实现多种电话终端的交互,例如我们经常看到的E1,SS7,R2等。
  在IETF的官方定义中,SIP trunk是这样定义的:
  • A SIP trunk is a virtual sip entity on a server (UAS, UAC or proxy) constrained by a predefined set of polices and rules that determine how to process requests.
  首先,SIP trunk是虚拟的实体(传统的PSTN都是物理设备),通过一定的业务策略来决定业务请求。在SIP 网络环境中,SIP也可以起到类似的作用,它是由服务提供商对接企业用户的一种连接方式,当然服务提供商提供什么样的服务都是基于用户和服务提供商的合同约定。具体的业务包括:
  • 可以支持PSTN所提供的语音服务,基本上可以替代传统的PSTN网络。
  • 可以拓展出其他的增值服务,例如语音邮箱服务,呼叫中心服务等。
  • 支持企业IPPBX接入服务。
  在开源FreePBX的trunk 模块中,此模块可以说支持了目前市场上所有的trunk 接入方式:
  • E1/SS7/R2的基于语音板卡的接入方式,系统默认的是E1 trunk接入,用户也可以通过手动编译来支持SS7或者R2的方式来支持trunk接入。关于SS7/中国一号R2和语音板卡安装配置的文档,请读者参考:www.freepbx.org.cn 的详细配置文档。此对接方式是通过FreePBX+板卡一体机的方式来实现。
  • SIP trunk接入方式,用户可以通过语音网关对接SIP来实现接入,也可以和服务商提供的SIP trunk实现对接,同样也可以通过服务商提供的IMS/SIP实现对接,VOS/SIP trunk 对接。通过FreePBX+语音网关的方式来实现,或者FreePBX+SIP trunk的方式实现。
  • BRI 语音板卡实现对接,此对接方式支持的是2B+D方式,上面的E1是30B+D,目前国内基本上不再使用,欧洲有部分用户使用。可以通过FreePBX+语音卡方式,或者FreePBX+外置网关(支持BRI的网关)
  • 自定义的H323 trunk方式实现对接,默认freepbx不支持H323对接,用户需要手动编译H323模块,配置模块以后,可以实现对接方式。
  • 其他自定义的Trunk方式使用的比较少,我们这里不再介绍,例如IAX方式实现Asterisk-Asterisk服务器之间的对接等,我们这里不再介绍。
  在开源FreePBX的trunk 模块中都支持了以上所介绍的接入方式,用户可以根据不同的需求来对接不同的接入方式,例如可以同时支持SIP和dahdi trunk(语音卡)。
  2、Trunk 模块有很多中参数配置,因为,我们使用的是SIP和dahdi模块来配置trunk,所以,我们重点介绍基于SIP trunk的配置参数和基于Dahdi的配置参数。

  Prepend
  预设号码前缀。 如果用户已拨号码成功匹配了 prefix加match pattern,则在中继出局前,移除prefix, 在match pattern 前加此预设的数字号码。
  Prefix
  号码前缀。如果用户已拨号码成功匹配了prefix加match pattern ,则在中继出局前移除这个前缀号码,如果带预设号码的话,
  match pattern 加预设号码出局。如果没有带可选的预设号码,则仅发送match pattern 号码出局。
  Match pattern
  匹配模式。用户已拨号码将匹配prefix 和match pattern 的匹配模式。如果成功匹配,则移除号码前缀,加一个预设号码出局(如果设置了预设号码)。当然用户也可以仅完全匹配号码前缀,然后加一个预设号码,match pattern 为空。
  Dialled Rules Wizard Always dial with prefix
  中继号码前缀快速拨号。对voip 中继来说,这个功能非常简单实用。例如,如果用户拨打了号码 "5551234”, PBX 会自动转换此号码为 "16135551234”。
  Remove prefix from local numbers
  对语音板卡支持的Dahdi 中继非常有用,如果用户拨打的是一个本地号码 "6135551234”的话,PBX 会自 "555-1234”。通常来说,拨打本地号码无需添加本地前缀。
  Setup directory assistance
  可以通过此选项转换此呼叫进行 目录查询协助。
  Lookup numbers for local trunk
  本地中继号码查询服务。通过号码查询服务的资源例如 www.localcallingguide.com , 创建号码归属,所以用户通过本地中继拨打7位数或者10位数 来直接进行呼叫。通常情况下,用户需要拨打1+区号(长途电话)+号码,但是通过这样的方式,用户可以直接拨打 “5551234” (7位数拨号) 或者 “6135551234” (10位数拨号) 来实现本地呼叫。 注意,以上设置仅支持北美地区的号码范围。
  Upload from CSV
  支持上传一个拨号匹配模式CSV 文件来替换当前的整个文件。如果没有文件头的话,则文件必须至少设置3个列,需要和界面的列顺序一致。用户有可以设置3个文件头,在第一行中包括: prepend, prefix 和 match pattern 。如果少于3个文件头,剩余的列将是空白。
  Outbound Dial Prefix
  呼出拨号前缀,呼出前在中继添加的前缀号码。例如,如果此中继是在另外一个PBX 背后的系统中,用户需要拨打9 或者其他的数字通过这个PBX 出局。如果中继线路是POTS 线路的话,常用的做法是设置为“w”,让系统等待 500ms ,以便有足够的时间来等待拨号音,避免已拨打数字号码丢失。大部分情况下,此设置为空白。
  指定一个中继名称,例如 “mysiptrunk”。
  PEER Details
  这里的 PEER 信息是用来对接运营商的帐号信息。用户可能需要添加设置或者删除一些设置,完全取决于运营商的要求。
  注意
  这里的配置顺序非常重要。例如,如果用户使用了 “allow/deny” ,那么必须确保第一个是 “deny”。
  USER Context
  这里是运营商要求提供的帐号或号码信息。
  USER Details
  这里是用户连接运营商的参数设置。因为运营商要求的不同,用户可能需要添加或者删除一些设置参数。
  Register String 大部分运营商要求用户PBX 系统注册到运营商侧。如果有此要求,用户需要输入运营商提供的注册信息。例如,
  username:password@some.voipprovider.com。 还有一些环境下,用户也需要提供DID号码注册:
  例如:username:password@some.voipprovider.com/7045551212。
  这里要注意,使用SIP trunk之前,一定要确保SIP trunk和对端对接的成功的,否则不能使用此trunk。关于SIP trunk状态,用户可以通过Asterisk CLI 命令来查询。
  • DAHDi (简称为Digium Asterisk 硬件设备接口)。Dahdi 是asterisk 语音卡的通信接口,它可以支持模拟接口(FXS/FXO)和数字接口(E1/PRI)。用户需要参考硬件安装文档来实现语音卡的初始化配置。然后可以通过 DAHDi 中继模块来集成呼出呼入的路由和分机设置。请用户先参考相应的dahdi 语音板卡配置使用指南配置板卡后执行中继的配置。
  • DAHDI 配置文件由 DAHDI 配置模块来管理。一旦成功配置好板卡以后,用户可以通过中继界面选择Dahdi 中继出局。
  • DAHDI Trunks
  用户可以通过选择不同的组来进行轮询呼叫。参考一下表做相应的调整。在这个表中,我们使用了Group 0 (Zero) 作为轮询策略方式。在配置Dahdi trunk之前,用户要首先确认语音板卡是否成功配置。如果底层的语音板卡没有配置成功的话,dahdi trunk是没有任何作用的。
  3、Trunk 模块可以使用在很多企业用户的呼叫需求,以便满足多种业务的需求,这些使用场景包括:
  对接分公司trunk,接入分公司的IPPBX系统。通过不同的拨号匹配来实现使用不同的trunk呼出。
  对接多种trunk 方式,根据以上介绍,用户可以同时对接多种trunk方式,通过多种方式的trunk对接,实现trunk 线路的逃生,保证企业通信网络正常使用,灵活切换。
  根据需要,可以关闭或启用不同的trunk,用户可以对任何一条trunk进行开启或者关闭处理,无需再次进行配置。
  根据不同计费模式设置不同的trunk呼叫,用户可以选择不同的trunk实现不同的呼叫国家目的地。
  根据不同的时段现在不同的trunk进行呼叫,帮助企业节省话费支出。
  4、trunk 模块仅是一个FreePBX 界面管理工具,真正实际呼叫是通过底层Asterisk的dial命令来实现,通过不同的SIP或者Dahdi来实现对trunk的呼叫。具体的用法如下:
  Dial(Technology/Resource&[Technology2/Resource2[&…]],[timeout,[options,[URL]]])
  这里的Technology 表示接口方式(SIP或DAHDI),Resource 表示可用的通道。当然dial 命令的用法有很多参数支持,用户可以查阅文档来进一步研究。
  5、经常使用trunk模块的还有我们大家比较熟悉的呼叫中心应用,通过FreePBX或者asterisk进行自定义的呼叫功能。在自定义的代码中加入到时呼叫控制任务,可以对多个号码通过trunk模块来实现自动呼叫或手动呼叫。Issabel的呼叫中心模块就是使用的类似的设计,Odoo也支持了类似的自动外呼模块。关于通过SIP trunk 实现自动外呼的功能实现,用户可以查阅参考资料的了解。
  6、总结,笔者首先介绍了关于trunk的概念和功能,然后介绍了在开源IPPBX环境下SIP和PSTN trunk的配置参数介绍,trunk 使用的场景,然后具体介绍了底层Asterisk如何进行呼叫呼出,最后提供了一个通过trunk来实现呼叫中心外呼的简单功能实现。
  参考资料:
  https://tools.ietf.org/id/draft-rosenberg-sipping-siptrunk-00.txt
  https://tools.ietf.org/html/rfc4904
  https://wiki.freepbx.org/display/FPG/Trunks+Module
  https://github.com/litnimax/asterisk_dialer
  关注微信公众号:asterisk-cn,获得有价值的行业分享。访问5060社区-开源IPPBX论坛获得技术帮助:www.ippbx.org.cn/www.hiastar.com
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题