号码变换配置对接运营商IMS

概述

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%需要定制。

空空如常

求真得真