概述

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

fs直接对接运营商,调试过程中的号码变换规则比较容易出问题。

本文档记录一个较为通用的对接IMS配置方案。

环境

CentOS 7.9

freeswitch 1.10.7

模块配置

号码变换主要使用mod_translate模块和dialplan拨号计划实现。

确认mod_translate模块有编译安装。

ll mod_translate*

-rwxr-xr-x. 1 root root 1295 Sep 1 2022 mod_translate.la

-rwxr-xr-x. 1 root root 81944 Sep 1 2022 mod_translate.so

确认mod_translate模块有配置启动。

grep mod_translate modules.conf.xml

<load module="mod_translate"/>

确认mod_translate模块启动正常。

./fs_cli -x "module_exists mod_translate"

true

模块启动正常,配置号码变换规则和拨号计划。

号码变换配置

号码变换的规则主要包括手机和固话。

送给运营商的主被叫号码,手机加前缀“+86”,固话带区号去0加前缀“+86”。

运营商送过来的被叫号码不变,主叫号码需要变换,手机去前缀“+86”,固话去前缀“+86”再加0。

修改conf/autoload_configs目录下的配置文件如下。

cat translate.conf.xml

<include>

<configuration name="translate.conf" description="Number Translation Rules">

<profiles>

<profile name="US">

<rule regex="^\+(\d+)$" replace="$1"/>

<rule regex="^(1[2-9]\d{2}[2-9]\d{6})$" replace="$1"/>

<rule regex="^([2-9]\d{2}[2-9]\d{6})$" replace="1$1"/>

<rule regex="^([2-9]\d{6})$" replace="1${areacode}$1"/>

<rule regex="^011(\d+)$" replace="$1"/>

</profile>

<profile name="GB">

<rule regex="^\+(\d+)$" replace="$1"/>

<rule regex="^$" replace="$1"/>

</profile>

<profile name="HK">

<rule regex="\+(\d+)$" replace="$1"/>

<rule regex="^(852\d{8})$" replace="$1"/>

<rule regex="^(\d{8})$" replace="852$1"/>

</profile>

<profile name="GB-TOSP-CALLER">

<rule regex="^0(\d+)$" replace="+86$1"/>

<rule regex="^(1\d+)$" replace="+86$1"/>

</profile>

<profile name="GB-TOSP-CALLEE">

<rule regex="^0(\d+)$" replace="+86$1"/>

<rule regex="^(1\d+)$" replace="+86$1"/>

</profile>

<profile name="GB-FROMSP-CALLER">

<rule regex="^\+86([2-9]\d+)$" replace="0$1"/>

<rule regex="^\+86(10\d+)$" replace="0$1"/>

<rule regex="^\+86(1\d+)$" replace="$1"/>

</profile>

<profile name="GB-FROMSP-CALLEE">

<rule regex="^(\d+)$" replace="$1"/>

</profile>

</profiles>

</configuration>

</include>

拨号计划

号码变换的执行过程配置在dialplan中,一般在呼叫的业务流程之前执行。

实例如下。

送给运营商的修改方式。

<extension name="TOSP-num-modify" continue="true">

<condition field="${sofia_profile_name}" expression="^external6666|external7777$" break="never">

<action application="set" data="effective_caller_id_name=${translate(${caller_id_name} GB-TOSP-CALLER)}" />

<action application="set" data="effective_caller_id_number=${translate(${caller_id_number} GB-TOSP-CALLER)}" />

<action application="set" data="destination_number=${translate(${destination_number} GB-TOSP-CALLEE)}"/>

</condition>

</extension>

运营商送过来的修改方式。

<extension name="FROMSP-num-modify" continue="true">

<condition field="${sip_network_ip}" expression="^1.2.3.4$" break="never">

<action application="set" data="effective_caller_id_name=${translate(${caller_id_name} GB-FROMSP-CALLER)}" />

<action application="set" data="effective_caller_id_number=${translate(${caller_id_number} GB-FROMSP-CALLER)}" />

<action application="set" data="destination_number=${translate(${destination_number} GB-FROMSP-CALLEE)}" />

</condition>

</extension>

呼叫测试

呼叫测试,查看日志如下。

2024-09-11 18:06:16.750792 [INFO] mod_translate.c:329 03761234567 GB-TOSP-CALLER

2024-09-11 18:06:16.750792 [NOTICE] mod_translate.c:348 Translated: +863761234567

2024-09-11 18:06:16.750792 [INFO] mod_translate.c:329 13712345678 GB-TOSP-CALLEE

2024-09-11 18:06:16.750792 [NOTICE] mod_translate.c:348 Translated: +8613712345678

总结

标准模板可以解决90%的问题,剩下10%需要定制。

空空如常

求真得真

号码变换配置对接运营商IMS的更多相关文章

  1. 华为S5700系列交换机AR配置静态IP双链路负载分担

    适用于:有多个以太WAN口的机型. 业务需求: 运营商1分配的接口IP为100.100.1.2,子网掩码为255.255.255.252,网关IP为100.100.1.1. 运营商2分配的接口IP为2 ...

  2. Skype for Business Server 2015 企业语音部署和配置

    Skype for Business Server 2015包含的企业语音功能可实现更丰富的通信和协作.例如,可以将企业语音部署配置为启用Skype for Business Server 2015客 ...

  3. Odometry的发布和发布odom到base_link的tf变换

    转载自http://www.ncnynl.com/archives/201702/1328.html ROS发布nav_msgs/Odometry消息,以及通过tf从“odom”坐标系到“base_l ...

  4. HCIA-datacom 4.3 实验三:网络地址转换配置实验

    实验介绍: 网络地址转换NAT(Network Address Translation)是将IP数据报文头中的IP地址转换为另一个IP地址的过程.作为减缓IP地址枯竭的一种过渡方案,NAT通过地址重用 ...

  5. [转载] Android逃逸技术汇编

    本文转载自: http://blogs.360.cn/360mobile/2016/10/24/android_escape/ 摘    要 传统逃逸技术涉及网络攻防和病毒分析两大领域,网络攻防领域涉 ...

  6. python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题

    笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...

  7. OneAlert:国内首家 SaaS 模式的云告警平台

    随着互联网行业的高速发展,企业 IT 应用环境日趋复杂.几分钟的故障就会严重到用户体验,那么如何有效降低IT故障带来的影响呢?权威数据表明,86%的企业认为建立有效的监控系统和告警系统.提升 IT 的 ...

  8. wavecom短信猫常用AT命令

    wavecom短信猫常用AT命令 一.一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令用来得到支持的频带 (GSM 900,DCS 1800 或PCS ...

  9. 公网IP和私有IP

    IP地址是为了区分网络中不同主机所分配的一个地址,通过IP地址可以访问到每一台主机. IP地址分为公有地址和私有地址,公有地址由Internet NIC负责(比如中国互联网信息中心http://ip. ...

  10. 如何搭建并使用便携式 4G/LTE 伪基站研究移动安全

    此文章PDF文档下载地址:点击下载 0x00 前言 在移动互联网深入普及和物联网开始规模应用的今天,网络安全公司怎能不研究移动安全,要研究移动安全,怎能没有4G/LTE伪基站研究测试环境? 本文介绍如 ...

随机推荐

  1. WPF,图表控件

    开源代码地址:https://github.com/bearhanQ/WPFFramework; QQ群:332035933: <UserControl x:Class="WpfBoo ...

  2. disconf分布式配置管理(二) 与spring集成

    上一章介绍了disconf的安装预配置,这章主要介绍下disconf与spring集成 1.添加依赖 <dependency> <groupId>com.baidu.disco ...

  3. 什么是 API ?

    一.API 的定义:数据共享模式定义 4 大种类 作为互联网从业人员,API 这个词我耳朵都听起茧子了,那么 API 究竟是什么呢? API 即应用程序接口(API:Application Progr ...

  4. 图穷匕见-所有反DDD模式都是垃圾

    本文书接上回<主观与客观,破除DDD凭经验魔咒>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: ...

  5. manim边学边做--角度标记

    manim中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记. 对于锐角和钝角,角度标记是一个弧,弧的度数与角的度数一样: 对于直角,角度标记是一个垂直的拐角. manim中 ...

  6. PicGo RequestError: Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:36677

    PicGo RequestError: Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127 ...

  7. 小tips:docker 配置国内镜像地址

    在配置文件daemon.json中添加国内镜像,让其下载加速. vi /etc/docker/daemon.json 如下国内镜像: { "registry-mirrors": [ ...

  8. 【JS设计模式笔记】给我一张名片-工厂方法模式(创建型)

    广告展现 例如,关于计算机培训广告资源需要投放,一批是Java的用绿色字体,一批是PHP的,用黄色字体,红色背景. // 创建Java学科类 var Java = function (content) ...

  9. ASP.NET Core Library – ImageSharp

    前言 2021 年就写过一篇了, Asp.net core 学习笔记 Image processing (ImageSharp), 只是那时还是旧的写法, 这篇作为翻新和以后继续增加新功能的介绍. I ...

  10. 【学习笔记】状压DP

    状态压缩DP 对于一个集合,他一有\(2^n\)个子集,而状态压缩就是枚举这些子集,每一个状态就是一个由\(01\)构成的集合,如果为\(0\)就表示不选当前的元素,否则就表示选.因为状态压缩将每一个 ...