概述

freeswitch是一款简单易用的开源音视频软交换平台。

在生产环境中,由于各个线路的号码规则并不统一,经常需要针对中继线路做号码变换的方案。

本文主要介绍fs中有哪些可选的号码变换方案。

环境

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

freeswitch:v1.8.7

GCC:4.8.5

拨号计划

拨号计划中,condition的匹配项配置中,可以对号码进行正则匹配,并根据格式做简单的号码变换功能。

<include>

<context name="public">

<extension name="test0">

<condition field="destination_number" expression="^test(\d+)$">

<action application="bridge" data="user/$1"/>

</condition>

</extension>

<extension name="test1">

<condition field="destination_number" expression="^000(\d+)$">

<action application="bridge" data="sofia/external/sip:${1}@10.55.55.138:5090"/>

</condition>

</extension>

<extension name="test2">

<condition field="destination_number" expression="^(\d+);.*$">

<action application="bridge" data="{sip_invite_call_id=${sip_call_id}}user/$1"/>

</condition>

</extension>

<extension name="test3">

<condition field="destination_number" expression="^(\d+)$">

<action application="bridge" data="{sip_invite_call_id=${sip_call_id}}user/$1"/>

</condition>

</extension>

</context>

</include>

test0中,对被叫号码删除了号码开头的‘test’字符串。

test1中,对被叫号码删除了号码开头的‘000‘字符串。

test2中,对被叫号码删除了号码中‘;‘后的部分。

test3中,号码不变。

regex接口

mod_dptools: regex接口函数。用法如下。

regex value expression results*

app接口返回‘0555555555‘。

freeswitch@localhost.localdomain> regex 61555555555|^61([0-9]{9})$|0%1

0555555555

app接口返回true。

freeswitch@localhost.localdomain> regex 61555555555|^61([0-9]{9})$

true

拨号计划的实例。

<action application="set" data="effective_caller_id_number=${regex(${caller_id_number}|^61([0-9]{9})$|0%1)}"/>

mod_translate

mod_translate模块通过配置文件和接口形式,支持对号码格式的更新,灵活方便。

并且在拨号计划中,使用translate模块可以在进入拨号计划之前对号码进行变换,这种场景在CDR话单中会有用处。

mod_translate模块默认是不编译安装的,要自行编译安装启动。

配置文件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>

</profiles>

</configuration>

</include>

API接口。

translate <number> [<profile>]

APP接口。

<action application="translate" data="${destination_number} US"/>

实例1。

freeswitch@localhost.localdomain> translate +86123456 GB

2022-09-01 14:24:49.257196 [INFO] mod_translate.c:329 +86123456 GB

86123456

2022-09-01 14:24:49.257196 [DEBUG] mod_translate.c:128 translating [+86123456] against [GB] profile

2022-09-01 14:24:49.257196 [DEBUG] mod_translate.c:137 +86123456 =~ /^\+(\d+)$/

2022-09-01 14:24:49.257196 [NOTICE] mod_translate.c:348 Translated: 86123456

实例2。

freeswitch@localhost.localdomain> translate +852123456 HK

2022-09-01 14:26:37.117176 [INFO] mod_translate.c:329 +852123456 HK

2022-09-01 14:26:37.117176 [DEBUG] mod_translate.c:128 translating [+852123456] against [HK] profile

2022-09-01 14:26:37.117176 [DEBUG] mod_translate.c:137 +852123456 =~ /\+(\d+)$/

2022-09-01 14:26:37.117176 [NOTICE] mod_translate.c:348 Translated: 852123456

852123456

freeswitch@localhost.localdomain> translate 12345678 HK

2022-09-01 14:29:29.517186 [INFO] mod_translate.c:329 12345678 HK

85212345678

2022-09-01 14:29:29.517186 [DEBUG] mod_translate.c:128 translating [12345678] against [HK] profile

2022-09-01 14:29:29.517186 [DEBUG] mod_translate.c:137 12345678 =~ /\+(\d+)$/

2022-09-01 14:29:29.517186 [DEBUG] mod_translate.c:137 12345678 =~ /^(852\d{8})$/

2022-09-01 14:29:29.517186 [DEBUG] mod_translate.c:137 12345678 =~ /^(\d{8})$/

2022-09-01 14:29:29.517186 [NOTICE] mod_translate.c:348 Translated: 85212345678

总结

freeswitch中对正则表达式的支持有多种形式。

正则表达式对于常见的号码变换场景基本可以完美支持。

mod_translate模块很强大,可以深挖一下逻辑。

空空如常

求真得真

freeswitch号码变化方案的更多相关文章

  1. freeswitch号码黑名单

    概述 freeswitch是一款简单好用的的VOIP开源软交换平台. 在客户的呼叫过程中,会遇到一些异常的号码,包括高投诉风险号码.敏感号码.特殊号码等. 在客户呼叫流程中,需要针对这些异常号码做呼叫 ...

  2. 监测SQLServer数据库中表的数据变化 方案

    sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...

  3. poj 3126

    一道搜索的水题,其实搜索相对其他的来说好掌握一点,因为有个固定的模板可以用去套 题目大意就是数字的变化,一个数字只可以变化到它最相邻的一个素数上去,意思是只变化一位数字,求最短的变化方案 #inclu ...

  4. 企业架构与建模之使用ArchiMate进行分析

    企业架构与建模之使用ArchiMate进行分析(全系列完) 4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局 ...

  5. 企业架构研究总结(45)——企业架构与建模之使用ArchiMate进行分析(全系列完)

    4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局的做法往往还会造成不必要的浪费.由此可见,一个能够跨越各个领 ...

  6. [冬令营模拟]GTSG2018

    上学期没有去 GTSG,于是今天老师让我们来做一下 GTSG2018 Day1 & Day3 Day1 在上午当成一场考试来搞了,Day3 由于锅太多而且 T3 玄学而被放到下午自学... 上 ...

  7. BZOJ 1009 GT考试 (AC自动机 + 矩阵乘法加速dp)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 准考证号为\(n\)位数\(X_1X_2....X_n(0<=X_ ...

  8. POJ 1438 One-way Traffic (混合图+边双连通)

    <题目链接> 题目大意: 给定一个混合图,问你在能够使得图中所有点能够两两到达的情况下,尽可能多的将无向边变成有向边,输出这些无向边的变化方案. 解题分析:这与之前做过的这道题非常类似 P ...

  9. python简易的大乐透数据获取及初步分析

    该项目从网上爬取并分析彩票数据,为用户查看和初步分析往期数据提供一种简易的工具. https://github.com/unknowcry/Lottery # -*- coding: utf-8 -* ...

  10. three.js 添加html内容、文本

    需求: 1.在场景内添加html元素并动态更新 2.html内容需跟随场景变化 方案: 新加方案:https://www.zhihu.com/question/49929467/answer/1186 ...

随机推荐

  1. HDU 4787 GRE Revenge

    Now Coach Pang is preparing for the Graduate Record Examinations as George did in 2011. At each day, ...

  2. 使用Visual Studio 2022 创建lib和dll并使用

    对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要,但是对于使用ffi的人来说,使用c或c++编译器,似乎是必不可少的,下面我将讲述如何用Visual Studio 2 ...

  3. winform中也可以这样做数据展示✨

    1.前言 在做winform开发的过程中,经常需要做数据展示的功能,之前一直使用的是gridcontrol控件,今天想通过一个示例,跟大家介绍一下如何在winform blazor hybrid中使用 ...

  4. SpringBoot事件机制

    1.是什么? SpringBoot事件机制是指SpringBoot中的开发人员可以通过编写自定义事件来对应用程序进行事件处理.我们可以创建自己的事件类,并在应用程序中注册这些事件,当事件被触发时,可以 ...

  5. bash shell笔记整理——date命令

    date命令初步了解 简单来说date的主要作用大多数用于以给定的格式来显示时间. 在后期我们写一些脚本当中也会使用到,比如说按照日期来给文件备份打包等. 下面我们来看看帮助信息: [root@ngi ...

  6. 【C# 技术】C# 常用排序方式

     前言  在最近的项目中经常会对C#中的数据进行排序,对于基本数据类型,其排序方式比较简单,只需要调用内置算法即可实现,但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦,所以在本文章中将 ...

  7. uniapp的app苹果应用商店上架最简教程

    除了测试版本之外,uniapp打包好的ipa文件是无法直接安装在普通用户的手机上面,这是苹果的证书和描述文件的机制的原因. 因此我们需要将打包好的ipa文件上架到苹果应用商店,也就是app store ...

  8. JavaFx之SceneBuilder添加其他依赖库(十六)

    JavaFx之SceneBuilder添加其他依赖库(十六) Could not open 'xxxxx.jar' Open operation has failed. Make sure that ...

  9. 第七部分_Shell脚本之循环

    for循环语句 关键词:爱的魔力转圈圈 1. for循环语法结构 空行相对于for循环类似于空格 ㈠ 列表循环 列表for循环:用于将一组命令执行已知的次数 基本语法格式 for variable i ...

  10. 论文分享丨Holistic Evaluation of Language Models

    摘要:该文为大模型评估方向的综述论文. 本文分享自华为云社区<[论文分享]<Holistic Evaluation of Language Models>>,作者:DevAI. ...