• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

freeswitch的gateway实现出继的主备方案

武飞扬头像
求真得真
帮助1

学新通

概述

freeswitch是一款简单好用的VOIP开源软交换平台。

某些呼叫场景中,我们有2条出中继线路可选,2条出中继需要按照主备模式来配置,优先使用主中继呼叫,当主中继出现问题时,呼叫自动转移到备用中继呼叫。

本节中,我们利用gateway的option检测配置和正则表达式,组合实现中继线路的主备方案。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.10.7

GCC:4.8.5

APP接口

sofia模块接口,可以查看“<profile>”下对应的“UP”状态的gateway列表。

sofia profile <profile> gwlist up

mod_dptools模块接口,正则表达式规则匹配。

regex value expression results*

下面的表达式含义是,查看“external”下“UP”状态的gateway列表,如果其中包含名称为“gw-138-5080”的gateway,则返回“true”。

${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-5080)(.*)$)}

配置&测试

配置conf/sip_profile/external/gw-138-5080.xml,设置网关参数,gw-138-5090.xml和gw-138-15090.xml设置方法一样。

<include>

    <gateway name="gw-138-5080">

        <param name="username" value="not-used"/>

        <param name="realm" value="10.55.55.138:5080"/>

        <param name="password" value="not-used"/>

        <param name="register" value="false"/>

        <!--send an options ping every x seconds, failure will unregister and/or mark it down-->

        <param name="ping" value="20"/>

        <param name="ping-min" value="3"/>

        <param name="ping-max" value="6"/>

        <param name="ping-user-agent" value="proxy"/>

    </gateway>

</include>

修改配置文件conf/dialplan/test.xml,设置拨号计划。

先检查“gw-138-15090”gateway是否“UP”状态,如果是则使用“gw-138-15090”呼出,如果不是再检查“gw-138-5090”gateway是否“UP”状态并呼出。

<extension name="test-gw-master" continue="true">

    <condition field="${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-15090)(.*)$)}" expression="^true$" break="on-true">

        <action application="bridge" data="{sip_invite_call_id=${sip_call_id}}sofia/gateway/gw-138-15090/${destination_number}"/>

    </condition>

    <condition field="${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-5090)(.*)$)}" expression="^true$" break="on-true">

        <action application="bridge" data="{sip_invite_call_id=${sip_call_id}}sofia/gateway/gw-138-5090/${destination_number}"/>

    </condition>

</extension>

发起呼叫10011->1002,测试日志如下,符合预期流程,使用“gw-138-5090”gateway呼出。

2022-12-15 11:27:15.896136 [INFO] mod_dialplan_xml.c:637 Processing 10011 <10011>->1002 in context public

...

Dialplan: sofia/external/10011@10.55.55.138 parsing [public->test-gw-master] continue=true

Dialplan: sofia/external/10011@10.55.55.138 Regex (FAIL) [test-gw-master] ${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-15090)(.*)$)}(false) =~ /^true$/ break=on-true

Dialplan: sofia/external/10011@10.55.55.138 Regex (PASS) [test-gw-master] ${regex(${sofia(profile external gwlist up)}|^(.*)(gw-138-5090)(.*)$)}(true) =~ /^true$/ break=on-true

Dialplan: sofia/external/10011@10.55.55.138 Action bridge({sip_invite_call_id=${sip_call_id}}sofia/gateway/gw-138-5090/${destination_number})

...

EXECUTE sofia/external/10011@10.55.55.138 bridge({sip_invite_call_id=36bdeb5a-f6cb-123b-7d99-000c29a63969}sofia/gateway/gw-138-5090/1002)

总结

freeswitch中功能接口繁多,组合使用会有意想不到的收获。

fs在设计之初,应该也是考虑到通过不同的功能接口以搭积木的方式实现灵活复杂的呼叫流程。

空空如常

求真得真

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfikcfe
系列文章
更多 icon
同类精品
更多 icon
继续加载