freeswitch号码黑名单

概述
freeswitch是一款简单好用的的VOIP开源软交换平台。
在客户的呼叫过程中,会遇到一些异常的号码,包括高投诉风险号码、敏感号码、特殊号码等。
在客户呼叫流程中,需要针对这些异常号码做呼叫限制,最简单直接的方式就是设置号码黑名单。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
黑名单模块
fs自带的黑名单模块mod_blacklist,模块默认不编译安装,需要进入“src/mod/applications/mod_blacklist”目录,手动编译安装。
该模块设计的目标是作为工具模块,可以在dialplan或脚本中直接返回true或false。
模块对应的配置文件是“autoload_configs/blacklist.conf.xml”。
<configuration name="mod_blacklist.conf" description="Blacklist module">
<lists>
<list name="blocked" filename="/usr/local/freeswitch/blacklists/blocked.list"/>
</lists>
</configuration>
拨号计划示例
添加号码进黑名单
<extension name="blacklist_add" >
<condition field="destination_number" expression="^\*98(\d+)$" >
<action application="answer" />
<action application="set" data="fake=${blacklist(add blocked $1)}" />
<action application="playback" data="/usr/local/freeswitch/recordings/blk_item_saved.wav" />
<action application="event" data="${blacklist(save blocked)}" />
</condition>
</extension>
检查黑名单
<extension name="blacklist_check" >
<condition field="destination_number" expression="^\*97(\d+)$" >
<action application="answer" />
<action application="set" data="blacklist_result=${blacklist(check blocked $1)}" inline="true"/>
</condition>
<condition field="${blacklist_result}" expression="^true$" break="always" >
<action application="playback" data="/usr/local/freeswitch/recordings/blk_item_exists.wav" />
<anti-action application="playback" data="/usr/local/freeswitch/recordings/blk_not_found.wav"/>
</condition>
</extension>
删除黑名单
<extension name="blacklist_delete" >
<condition field="destination_number" expression="^\*99(\d+)$" >
<action application="answer" />
<action application="set" data="fake=${blacklist(del blocked $1)}" />
<action application="playback" data="/usr/local/freeswitch/recordings/blk_item_deleted.wav" />
<action application="event" data="${blacklist(save blocked)}" />
</condition>
</extension>
API接口
freeswitch@localhost.localdomain> blacklist help
blacklist check <listname> <item>
blacklist add <listname> <item>
blacklist del <listname> <item>
blacklist save <listname>
blacklist reload
blacklist help
+OK
测试
修改“autoload_configs/modules.conf.xml”
<load module="mod_blacklist"/>
修改“autoload_configs/blacklist.conf.xml”
<list name="blocked" filename="$${conf_dir}/blacklists/blocked.list"/>
创建文件“conf/blacklists/blocked.list”,并保证fs有写权限。
测试API
freeswitch@localhost.localdomain> blacklist check blocked 12345
false
freeswitch@localhost.localdomain> blacklist add blocked 12345
+OK
2022-12-09 14:37:54.549789 [INFO] mod_blacklist.c:228 Added [12345] to list [blocked]
freeswitch@localhost.localdomain>
freeswitch@localhost.localdomain> blacklist check blocked 12345
true
freeswitch@localhost.localdomain> blacklist save blocked
2022-12-09 14:38:27.989788 [INFO] mod_blacklist.c:280 Saving blocked to ../conf-test//blacklists/blocked.list
2022-12-09 14:38:27.989788 [DEBUG] mod_blacklist.c:288 adding 12345 to the dump file
修改“dialplan/test.xml”
<extension name="test_blacklist" continue="true">
<condition field="${blacklist(check blocked ${destination_number})}" expression="^true$" break="on-true">
<action application="hangup" data="CALL_REJECTED"/>
</condition>
</extension>
发起测试呼叫,10010->12345
2022-12-09 14:58:55.049767 [INFO] mod_dialplan_xml.c:637 Processing 10011 <10011>->12345 in context public
Dialplan: sofia/external/10011@10.55.55.138 parsing [public->test_blacklist] continue=true
Dialplan: sofia/external/10011@10.55.55.138 Regex (PASS) [test_blacklist] ${blacklist(check blocked ${destination_number})}(true) =~ /^true$/ break=on-true
Dialplan: sofia/external/10011@10.55.55.138 Action hangup(CALL_REJECTED)
...
EXECUTE sofia/external/10011@10.55.55.138 hangup(CALL_REJECTED)
...
2022-12-09 14:58:55.049767 [DEBUG] mod_sofia.c:440 Channel sofia/external/10011@10.55.55.138 hanging up, cause: CALL_REJECTED
2022-12-09 14:58:55.049767 [DEBUG] mod_sofia.c:579 Responding to INVITE with: 603
2022-12-09 14:58:55.049767 [DEBUG] switch_core_state_machine.c:60 sofia/external/10011@10.55.55.138 Standard HANGUP, cause: CALL_REJECTED
总结
voip呼叫系统中,黑名单的需求很普遍,fs自带的mod_blacklist基本可以满足大部分场景的需求。
空空如常
求真得真
freeswitch号码黑名单的更多相关文章
- Android 代码实现来电拦截
为了更好地理解这个Demo,我先向大家介绍一下需求与功能. 需求: 每天都会有很多无聊的电话,比如推销商品等,占用我们大量时间不说,有时候还会打乱我们的思路,扰乱我们的正常生活.所以实现一个对某些号码 ...
- freeswitch黑名单mod_blacklist使用
freeswitch自带黑名单模块"mod_blacklist",此文只是对该模块简单使用的实例. 最近接到客户投诉有大量骚扰电话,而从源头查不太容易,因此想到的笨方法是将投诉人加 ...
- Android初级教程反射+AIDL+内容观察者监控黑名单号码代码模板
对于想要拦截一些莫名的陌生号码,就需要电话拦截功能与删除其电话记录功能.拦截的主要业务逻辑,分别是在一个服务里面进行:1.注册电话监听:2.取消注册电话监听(当然注册于取消是在服务里面建立一个广播接收 ...
- FreeSWITCH技巧:如何向通话的另一方号码发送dtmf?
注:这里的文章都是本人的日常总结,请尊重下个人的劳动成果,转载的童鞋请注明出处,谢谢. 如您转载的文章发生格式错乱等问题而影响阅读,可与本人联系,无偿提供本文的markdown源代码. 联系邮箱:ji ...
- freeswitch 显示主叫名称和主叫号码
1.指定主叫号码 origination_caller_id_number 参数来指定显示的主叫号码 2.指定主叫名称 origination_caller_id_name 参数来指定显示的主叫名称 ...
- FreeSWITCH黑名单功能设置
功能描述:对呼叫的号码进行过滤 步骤: 1.编译mod_blacklist 模块:进入源目录/usr/local/src/freeswitch --> make mod_blacklist-i ...
- freeswitch对接其它SIP设备
这几天用到freeswitch对接其它设备方面的知识,这里整理下,也方便我以后查阅. 操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 一.freeswitch作为被叫 ...
- freeswitch嵌入python脚本
操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...
- Android课程---添加黑名单的练习2(课堂讲解)
实现黑名单的添加.修改.查询和删除,首先得有封装的3个类,便于使用 BlackNumber.java package com.hanqi.test3; /** * Created by Adminis ...
- FreeSWITCH 1.2.5.3 Step by Step Install
Ubuntu: apt-get -y install build-essential automake autoconf git-core wget libtool apt-get -y instal ...
随机推荐
- python中展示json数据不换行(手动换行)
https://blog.csdn.net/chichu261/article/details/82784904 Settings ->keymap -> 在搜索框输入 wraps -&g ...
- C++ undered_map哈希表用法——leetcode两数之和
undered_map 头文件:#include<undered_map> 创建表undered_map<key,value> Map_name; 插入元素 a[key]=va ...
- MySQL57 zip安装
引用:MySQL5.7的.zip文件的配置安装 由于MySQL5.7之后在javaEE中交互的端口发生了变化,而MySQL官网中5.6.5.7版本64位的只有.zip文件,而.zip文件不像直接下 ...
- 一行shell实现tree
一.命令详解 在不方便编译或安装tree命令时,可以使用以下的find命令来替代,语句如下: find . -print | sort | sed 's;[^/]*/;|---;g;s;---|;|; ...
- day10 Test
public class Test{ public static void main(String[] args){ fun1(); } /**1. * 有2个数组,第一个数组内容为:[黑龙江省,浙江 ...
- Zabbix技术分享——使用Zabbix6.0监控业务日志
企业日常IT运维过程中,常会碰到需要监控业务日志的情况,以下将介绍如何使用Zabbix6.0监控业务日志. 应用场景描述: 企业IT运维部门使用自建zabbix平台对公司某业务系统进行了监控.近段时间 ...
- Redis Zset实现统计模块
1. 背景 公司有一个配置中心系统,使用MySQL存储了大量的配置,但现在不清楚哪些配置正在线上使用,哪些已经废弃了,所以需要实现一个统计模块,实现以下两个功能: 查看总体配置的数量以及活跃的数量 查 ...
- 现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式!
在上一篇文章中 -- 现代 CSS 之高阶图片渐隐消失术,我们借助了 CSS @Property 及 CSS Mask 属性,成功的实现了这样一种图片渐变消失的效果: CodePen Demo -- ...
- Jmeter之非GUI下执行脚本
1.进入jmeter 应用所在路径 eg: cd D:\Program Files\apache-jmeter-5.2\bin 2.输入运行命令:jmeter -n -t [jmx脚本路径] -l [ ...
- vue后退页面刷新数据和缓存数据
我们在项目中经常使用this.$router.go(-1) 但是,有时我们需要把前一个页面的数据进行缓存,有时需要刷新数据,下面来记录一下怎么操作吧 首先:在vue项目中缓存页面我们能想到 keep ...