概述

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. [ARC105E] Keep Graph Disconnected

    题目链接 好题. 如果 \(1\) 和 \(n\) 一直联通,开始即结束. 如果 \(n\mod 4=1\),那么 \(\frac 12x(x+1)+\frac12(n-x)(n-x+1)\) 为偶数 ...

  2. scroll-view和swiper的使用

    源码: <template>            <viex class="out">            <view class="b ...

  3. 深入 K8s 网络原理(一)- Flannel VXLAN 模式分析

    目录 1. 概述 2. TL;DR 3. Pod 间通信问题的由来 4. 测试环境准备 5. 从 veth 设备聊起 6. 网桥 cni0 6.1 在 Pod 内看网卡信息 6.2 在 host 上看 ...

  4. DC-3

    DC-3 前言:这个DC系列去年就做完了,但是因为那时候visualbox老崩搞得头大,一直漏了DC-3没做.现在重新搞好了来完结这个系列 扫存活的主机,显示只开了80 扫了一下目录,看了几个没有什么 ...

  5. Android开发之账号密码登录跳转、固定时间显示进度条实现

    登陆界面.登陆跳转和进度条功能实现 首先打开Android studio新建一个空项目,打开layout文件夹下的activity_main.xml文件,来设置登陆界面的布局.登陆界面需要两个输入框, ...

  6. 一文了解 Kubernetes

    一文了解 Kubernetes 简介:Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了.这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 Kubernetes ...

  7. 2023-08-28:用go语言编写。给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries。 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。

    2023-08-28:用go语言编写.给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries. 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] . ...

  8. 异步、多线程、Await/Async、Task

    异步多线程经常被拿来说事,网上文章也是多如牛毛,我也是停留在很菜的水平,痛下决心好好"恶补"一下这块知识. 还是先放两个官方文档压压惊:使用 Async 和 Await 的异步编程 ...

  9. 在线编辑Excel——插入图表

    本文内容介绍如何通过Excel在线编辑器--Spire.Cloud Excel来实现图表插入,插入图表时,可插入常见的柱状图.饼图.折线图.条形图.面积图.散点图.股价图等.这里挑选几种图表来展示插入 ...

  10. KubeEdge和Kuiper“双剑合并”,轻松解决边缘流式数据处理

    摘要:KubeEdge 是一个开源的边缘计算平台,它在Kubernetes原生的容器编排和调度能力之上,扩展实现了 云边协同.计算下沉.海量边缘设备管理.边缘自治等能力.KubeEdge还将通过插件的 ...