概述

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. Spring启动报8080端口被占用问题

    1.window下关闭8080端口 win+R:输入cmd,回车 在黑窗口中输入指令:netstat -ano | findstr 8080       指令的意思是找出占用8080端口的进程pid ...

  2. Java核心编程-第一卷

    不要在程序中使用char类型 boolean: 两个值 true false 逻辑判断  整形布尔之间不能转换   

  3. AvaloniaChat:一个基于大语言模型用于翻译的简单应用

    简介 一个使用大型语言模型进行翻译的简单应用. A simple application using a large language model for translation. 使用指南 访问Gi ...

  4. 如何诱导AI犯罪-提示词注入

    我们用到的大模型基本把政治类信息.犯罪相关信息都已屏蔽.但是,黑客依旧可以使用提示词诱导和提示词注入的方式对大模型进行攻击. 1.提示词诱导 如果直接让AI提供犯罪过程,AI会直接拒绝.虽然AI对于大 ...

  5. 目标追踪 ByteTrack 算法详细流程分析

    原理介绍 ByteTrack是字节跳动与2021年10月份公开的一个全新的多目标跟踪算法,原论文是<ByteTrack: Multi-Object Tracking by Associating ...

  6. C++ 中string,wstring,CString常用方法

    一.概念 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中.wstring是操作宽字符串的类.C++标准程序库对于string的设 ...

  7. C# WebSocket Fleck 源码解读

    最近在维护公司旧项目,偶然发现使用Fleck实现的WebSocket主动推送功能,(由于前端页面关闭时WebSocket Server中执行了多次OnClone事件回调并且打印了大量的关闭日志,),后 ...

  8. RDMA简介

    RDMA(Remote Direct Memory Access) RDMA顾名思义是一种直接访问内存技术.它能够实现的是一台计算机内存到另一台计算机内存之间的通过网络直接访问,不涉及两台计算机的操作 ...

  9. Python开发工具:VSCode+插件

    本篇是 Python 系列教程第 3 篇,更多内容敬请访问我的 Python 合集 Visual Studio Code的安装非常简单,就不放这里增加文章篇幅了. 相比PyCharm,VSCode更加 ...

  10. 【Jmeter】之进行单接口批量压力测试

    目录: 一.安装Jmeter 二.接口压力测试 p.p1 { margin: 0; font: 14px ".PingFang SC"; color: rgba(17, 31, 4 ...