当前位置: 首页 > news >正文

FreeSWITCH 简单图形化界面32 - 判断手机号归属地,自动补0

FreeSWITCH 简单图形化界面32 - 判断手机号归属地,自动补0

  • 测试环境
  • 1、呼叫规则
  • 2、拨号测试
  • 3、其他问题


测试环境

http://myfs.f3322.net:8020/
用户名:admin,密码:admin

FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/137820796

1、呼叫规则

本文使用python的phone判断呼叫的手机号归属地(其他语言好像也有相关库,未测试)。
phone库地址:https://github.com/ls0f/phone
phone库安装:pip install phone

python测试代码如下:

#!/usr/local/python310/bin/python
#/usr/local/freeswitch/scripts/phone_region.py
"""
Phone().find(phone_num)输出为:
{'phone': '17191081821', 'province': '北京', 'city': '北京', 'zip_code': '100000', 'area_code': '010', 'phone_type': '联通虚拟运营商'}
"""
from phone import Phone
import sys# 定义全局变量,表示本地区的区号
local_area_code = '010'# 获取目的号码
destination_number = sys.argv[1]# Phone类的find方法返回一个字典
info = Phone().find(destination_number)# 根据地区号来决定是否在号码前面加上 '0'
# 城市名称可能会冲突
if info['area_code'] == local_area_code:# 如果是本地号码,不加 '0'modified_number = destination_number
else:# 如果是外地号码,加上 '0'modified_number = '0' + destination_number# 输出改后的号码
print(modified_number)

呼叫规则如下:

<extension name="测试:12000"><condition expression="^(12000)$" field="destination_number"><!-- python解释器路劲 --><action application="set" data="python_path=/usr/local/python310/bin/python"/><!-- 脚本路劲 --><action application="set" data="script_path=/usr/local/freeswitch/scripts/phone_region.py"/><!-- 执行脚本获取输出 17191081821为模拟数据,替换成实际手机号(${destination_number}或者$1,脚本参数必须是手机号) --><action application="set" data="destination_number=${system ${python_path} ${script_path} 15122112211}"/><action application="bridge" data="sofia/gateway/out/${destination_number}"/><action application="hangup"/></condition>
</extension>

在这里插入图片描述

2、拨号测试

2024-10-26 15:13:57.419588 98.30% [NOTICE] switch_channel.c:1142 New Channel sofia/internal/3001@120.46.91.45 [7c0612a4-153e-4896-ba36-a653c418053f]
2024-10-26 15:13:57.419588 98.30% [INFO] sofia.c:10462 sofia/internal/3001@120.46.91.45 receiving invite from 223.104.43.28:62159 version: 1.10.12-release  64bit call-id: 608feea169f74f34b1ce3cea5ac87d10
2024-10-26 15:13:57.419588 98.30% [WARNING] sofia_reg.c:1842 SIP auth challenge (INVITE) on sofia profile 'internal' for [12000@120.46.91.45] from ip 223.104.43.28
2024-10-26 15:13:57.479586 98.30% [INFO] sofia.c:10462 sofia/internal/3001@120.46.91.45 receiving invite from 223.104.43.28:62159 version: 1.10.12-release  64bit call-id: 608feea169f74f34b1ce3cea5ac87d10
2024-10-26 15:13:57.499578 98.30% [INFO] mod_dialplan_xml.c:639 Processing 3001 <3001>->12000 in context 默认权限
EXECUTE [depth=0] sofia/internal/3001@120.46.91.45 set(python_path=/usr/local/python310/bin/python)
EXECUTE [depth=0] sofia/internal/3001@120.46.91.45 set(script_path=/usr/local/freeswitch/scripts/phone_region.py)
EXECUTE [depth=0] sofia/internal/3001@120.46.91.45 set(destination_number=015122112211
)
EXECUTE [depth=0] sofia/internal/3001@120.46.91.45 bridge(sofia/gateway/out/015122112211
)
2024-10-26 15:13:57.559582 98.30% [ERR] mod_sofia.c:4794 Invalid Gateway 'out'

3、其他问题

Python 的 phone 库是一个离线号码库,号码判断可能会有误(号码库更新到了2023年12月)。
可以再手动建立一个本地号码库,使用脚本匹配号码的本地号码前缀,来判断号码是否是本地号码,从而决定是否需要加 ‘0’。

祝君好运


http://www.mrgr.cn/news/58970.html

相关文章:

  • react项目因eslint检测未通过而Failed to compile编译失败
  • day02|计算机网络重难点之HTTP请求报文和响应报文、HTTP的请求方式(方法字段)、GET请求和POST请求的区别
  • 「C/C++」C++三大特性之封装、继承、多态(大致了解)
  • 死锁(Deadlock)C#
  • 分支限界法(Branch and Bound)详细解读
  • 新手直播方案
  • World of Warcraft [CLASSIC][80][the Ulduar]
  • HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)
  • C++中红黑树的实现
  • 银行测试干货:一文吃透银行业务重难点
  • nfs服务部署案例
  • std::abs 和 abs 是一样的吗?
  • alovajs:前后端交互还能这么玩?
  • C#里使用高效内存接收的例子
  • 005:PTGui全景拼接工具安装教程
  • 动态规划之子序列问题(上)
  • C++之继承
  • Java中Set接口与实现类的使用
  • Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源
  • 【从零开始的LeetCode-算法】3223. 操作后字符串的最短长度
  • Nature 正刊丨土壤质地对生态系统水分限制的全球影响
  • rabbitmq自学总结
  • docker 安装kuboard
  • STM32
  • 堆排序算法和Topk思想
  • java计算机毕设课设—连连看游戏(附源码、文章、相关截图、部署视频)