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’。
祝君好运