概述

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号码黑名单的更多相关文章

  1. Android 代码实现来电拦截

    为了更好地理解这个Demo,我先向大家介绍一下需求与功能. 需求: 每天都会有很多无聊的电话,比如推销商品等,占用我们大量时间不说,有时候还会打乱我们的思路,扰乱我们的正常生活.所以实现一个对某些号码 ...

  2. freeswitch黑名单mod_blacklist使用

    freeswitch自带黑名单模块"mod_blacklist",此文只是对该模块简单使用的实例. 最近接到客户投诉有大量骚扰电话,而从源头查不太容易,因此想到的笨方法是将投诉人加 ...

  3. Android初级教程反射+AIDL+内容观察者监控黑名单号码代码模板

    对于想要拦截一些莫名的陌生号码,就需要电话拦截功能与删除其电话记录功能.拦截的主要业务逻辑,分别是在一个服务里面进行:1.注册电话监听:2.取消注册电话监听(当然注册于取消是在服务里面建立一个广播接收 ...

  4. FreeSWITCH技巧:如何向通话的另一方号码发送dtmf?

    注:这里的文章都是本人的日常总结,请尊重下个人的劳动成果,转载的童鞋请注明出处,谢谢. 如您转载的文章发生格式错乱等问题而影响阅读,可与本人联系,无偿提供本文的markdown源代码. 联系邮箱:ji ...

  5. freeswitch 显示主叫名称和主叫号码

    1.指定主叫号码 origination_caller_id_number 参数来指定显示的主叫号码 2.指定主叫名称 origination_caller_id_name 参数来指定显示的主叫名称 ...

  6. FreeSWITCH黑名单功能设置

    功能描述:对呼叫的号码进行过滤 步骤: 1.编译mod_blacklist 模块:进入源目录/usr/local/src/freeswitch  --> make mod_blacklist-i ...

  7. freeswitch对接其它SIP设备

    这几天用到freeswitch对接其它设备方面的知识,这里整理下,也方便我以后查阅. 操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 一.freeswitch作为被叫 ...

  8. freeswitch嵌入python脚本

    操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...

  9. Android课程---添加黑名单的练习2(课堂讲解)

    实现黑名单的添加.修改.查询和删除,首先得有封装的3个类,便于使用 BlackNumber.java package com.hanqi.test3; /** * Created by Adminis ...

  10. 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 ...

随机推荐

  1. Nginx配置-1

    1.绑定nginx到指定cpu [root@nginx conf.d]# vim /apps/nginx/conf/nginx.conf worker_processes 2; worker_cpu_ ...

  2. C#实践炸飞机socket通信

    一.前言 最近老师要求做课设,实现一个 "炸飞机" 游戏,我是负责UI界面实现和Socket通信实现的,在这里想总结一下我实现Socket的具体过程,对其中的产生的问题和实现的方法 ...

  3. JavaScript代码是怎么在浏览器里面运行起来的?

    JavaScript代码是怎么在浏览器里面运行的?下面简单探索一下 浏览器内核 浏览器内核(Rendering Engine),常见的叫法如:排版引擎.解释引擎.渲染引擎,现在流行称为浏览器内核. 浏 ...

  4. 基于python的数学建模---Fuzzy C-Means(模糊C均值聚类)

    簇数的确定: 要用到k-means里面的轮廓系数 基于python的数学建模---轮廓系数的确定 - 坤丶 - 博客园 (cnblogs.com) 模糊c的代码 import copy import ...

  5. linux系统移植

    1 linux环境搭建 1.1 添加交叉开发工具链 新建如下工程目录: gcc-4.6.4.tar.xz #拷贝 tar -Jxvf gcc-4.6.4.tar.xz #解压 cd ./gcc-4.6 ...

  6. 流程编排、如此简单-通用流程编排组件JDEasyFlow介绍

    作者:李玉亮 JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排.工作流.审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-ea ...

  7. SSH ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor

    修改struts.xml配置:struts.devMode value="false" <constant name="struts.devMode" v ...

  8. JDBC Request 中 Variable names 以及 Result variable name 的使用方法

    1.Variable name 的使用方法 设置好JDBC Connection Configuration.JDBC Request  具体配置百度 如果数据库查询的结果不止一列那就在Variabl ...

  9. hexo-gitalk-评论自动初始化

    第一步 申请Personal Access Token 从 Github 的 Personal access tokens 页面,点击 Generate new token 第二步 安装项目依赖 np ...

  10. 【每日一题】【归并排序/堆排序&虚拟头结点】148. 排序链表-211220/220217【出栈时不断容易产生环状链表!】

    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 . 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 方法1:归并排序+使用辅助函数 ...