freeswitch号码变化方案

概述
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号码变化方案的更多相关文章
- freeswitch号码黑名单
概述 freeswitch是一款简单好用的的VOIP开源软交换平台. 在客户的呼叫过程中,会遇到一些异常的号码,包括高投诉风险号码.敏感号码.特殊号码等. 在客户呼叫流程中,需要针对这些异常号码做呼叫 ...
- 监测SQLServer数据库中表的数据变化 方案
sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...
- poj 3126
一道搜索的水题,其实搜索相对其他的来说好掌握一点,因为有个固定的模板可以用去套 题目大意就是数字的变化,一个数字只可以变化到它最相邻的一个素数上去,意思是只变化一位数字,求最短的变化方案 #inclu ...
- 企业架构与建模之使用ArchiMate进行分析
企业架构与建模之使用ArchiMate进行分析(全系列完) 4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局 ...
- 企业架构研究总结(45)——企业架构与建模之使用ArchiMate进行分析(全系列完)
4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局的做法往往还会造成不必要的浪费.由此可见,一个能够跨越各个领 ...
- [冬令营模拟]GTSG2018
上学期没有去 GTSG,于是今天老师让我们来做一下 GTSG2018 Day1 & Day3 Day1 在上午当成一场考试来搞了,Day3 由于锅太多而且 T3 玄学而被放到下午自学... 上 ...
- BZOJ 1009 GT考试 (AC自动机 + 矩阵乘法加速dp)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 准考证号为\(n\)位数\(X_1X_2....X_n(0<=X_ ...
- POJ 1438 One-way Traffic (混合图+边双连通)
<题目链接> 题目大意: 给定一个混合图,问你在能够使得图中所有点能够两两到达的情况下,尽可能多的将无向边变成有向边,输出这些无向边的变化方案. 解题分析:这与之前做过的这道题非常类似 P ...
- python简易的大乐透数据获取及初步分析
该项目从网上爬取并分析彩票数据,为用户查看和初步分析往期数据提供一种简易的工具. https://github.com/unknowcry/Lottery # -*- coding: utf-8 -* ...
- three.js 添加html内容、文本
需求: 1.在场景内添加html元素并动态更新 2.html内容需跟随场景变化 方案: 新加方案:https://www.zhihu.com/question/49929467/answer/1186 ...
随机推荐
- mysql的begin end嵌套
这个教程基本很少,因为这个很简单,但又会让(新手)人难以完成这嵌套. 为了方便读者理解,我把不需要嵌套的也嵌套起来了.(就比如下面这几行代码) delimiter $$ drop procedure ...
- [AGC030D] Inversion Sum
Problem Statement You are given an integer sequence of length $N$: $A_1,A_2,...,A_N$. Let us perform ...
- ubuntu 20.04安装mysql5.7
ubuntu 22.04系统安装mysql5.7 一.查看系统默认安装的数据库版本 apt-get update apt-cache policy mysql-server ubuntu 20.04自 ...
- Odoo接口说明
通过使用PostMan调用Odoo - POST { "jsonrpc":"2.0", "params":{ "db": ...
- MD5加密算法工具类创建
直接上代码 /** * 通用方法工具类 */ public class CrowdUtil { /** * 对明文字符串进行MD5加密 * @param source * @return */ pub ...
- Object类、String和StringBuffer、Math类、日期处理类
1.Object类 "万物皆对象":(1)从类和对象角度:任何具体事物都是一个对象,. (2)Object类,类似"东西".所有的类都继承了Object类. 使 ...
- 从零玩转EasyPoi-cong-ling-wan-zhuan-easypoi
title: 从零玩转EasyPoi date: 2023-01-11 13:49:25.908 updated: 2023-03-30 13:23:20.817 url: https://www.y ...
- Navicat Premium多用户破解方法 12以上版本
https://www.cnblogs.com/cgqplus/p/15267306.html 本文不提供注册机或者破解工具,本论坛多的是,搜索一下就好了. 本方法适用于多用户环境下使用,比如在服务器 ...
- 当创建一个ingress后,kubernetes会发什么?
本文分享自华为云社区<当创建一个ingress后,kubernetes会发什么?>,作者:可以交个朋友. 一.Ingress概述 Ingress是一组路由转发规则合集,将集群内部服务通过7 ...
- 用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?
Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一个关键时刻.这一突破性的版本引入了一系列革命性的功能,包括: 虚拟线程:利用 Project L ...