百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口

bigegpt 2024-08-01 11:42 4 浏览

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口

前言

上一篇章《蓝牙电话-与FreeSwitch服务器和UA坐席的通话.docx》中,我们使用开源的B2B-UA当中经典的FreeSWITCH搭建了一个最简洁的、并且可用的局域网“云平台”,使电脑上的“软电话”能正常使用蓝牙电话的方案呼叫出去。

但是我们实际使用过程中,手机和手机SIM卡常常不是一一对应的使用。这就引出一个问题,我们桥接上B2B-UA的SIP中继账号,到底最终是要跟SIM卡的手机号绑定?还是要跟手机设备绑定?还是要跟手机app里登录的账号进行绑定?

针对这个问题,上一篇章给出了两种方式:SIP账号直接配置,以及自己实现一个http或https的接口,使用GET传入手机号码,返回json格式的对应SIP账号密码。

本篇章中,采用最简单的步骤和方式,在windows中使用python编写脚本,在上一篇章中搭建的FreeSWITCH账号的基础之上,编写和启动一个自己的局域网内的Rest接口,供用户进行访问传入手机号,来获取手机号对应的中继SIP账号。

本文中预设的依赖条件如下:

序号

描述

01

上一版本中已安装和配置的FreeSwitch的安装路径

02

windows或Linux中最新版本的python

03

依赖部分pip install 安装的依赖库

由于最新的python随便搜索就能下载和安装,脚本对python版本没有特定要求、一般下载最新版本即可,此处不再赘述,仅贴上最新的windows的python下载地址:

https://www.python.org/downloads/


已安装的FreeSWITCH

已安装的FreeSWITCH的安装路径如下:C:\Program Files\FreeSWITCH

已添加的用户和目录结构如下:


HTTP的Rest接口

本章节根据前面已安装的FreeSWITCH的用户和目录结构,使用Python简单的实现了一个http的GET接口脚本【api_server.py】。使用时,简单将该Python脚本丢到下述目录中

C:\Program Files\FreeSWITCH\conf\directory\default,并执行 python api_server.py,

即可正常使用http来访问接口,并可传入手机号18873216143,获取得到预期的SIP账号密码,如下:

http://172.16.80.141:8032/registersip/18873216143

返回结果:

{"sipRealm":"xxx.com","dateCreated":"2024/01/31 15:23:04","ipPort":"172.16.80.141:5060","sipPhone":"sim18873216143","pwd":"1234","statusCode":"0","notReversal":"0"}

若未在SIP服务器添加sim18873216143这个账号,则GET查询的返回结果为:

{"dateCreated":"2024/01/31 14:13:49","statusCode":"920100","represent":"手机号不合法"}

返回结果的各字段的含义如下:

序号

字段名称

取值

描述

01

dateCreated

yyyy/MM/dd HH:mm:ss

接口调用时间

02

statusCode

0-成功 非0-失败

状态码

03

represent

字符串描述

失败原因

04

sipPhone

sim+传入的手机号

中继SIP账号

05

pwd

字符串

中继SIP密码

06

ipPort

IP:端口

SIP服务器地址

07

sipRealm

字符串

SIP域(未使用)

08

notReversal

  1. SIP信令的From和To对调
  2. SIP信令的From和To不翻转

VOS平台需要赋值1

无此字段则默认0


api_server.py脚本内容

Python脚本 api_server.py的内容如下:

(放在FreeSWITCH的用户目录:C:\Program Files\FreeSWITCH\conf\directory\default)

(当前使用的python版本为Python 3.12.0 另外,为了提供http服务和json与xml的解析,需要另外pip install sanic、setuptools和lxml)


脚本的文本内容如下:

# !/usr/bin/python

# pip install sanic

# pip install setuptools

# #pip install lxml

from sanic.response import json, text

from sanic import Sanic, request

import datetime

import os

import xml.etree.ElementTree as ET

app = Sanic("registersip")

@app.route("/registersip/<phone>")

async def registersip(request, phone):

#读取传入的手机号 phone

dir_path = os.getcwd()

#扫描本地目录的所有文件

is_match = False

xml_path = ""

for dirpath, dirnames, filenames in os.walk(dir_path):

for filename in filenames:

if filename == 'sim'+phone+'.xml':

is_match = True

xml_path = os.path.join(dirpath, filename)

#print(xml_path)

status_code = 200

if is_match==False:

res_dict = {

"dateCreated": datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"),

"statusCode": "920100",

"represent": "手机号不合法"

}

return json(res_dict, status=status_code, ensure_ascii=False)

#如果存在文件 则读取文件内容中的密码

root = ET.parse(xml_path).getroot()

pwd_item = root[0][0] #取include--user--params下的所有节点的内容 并取name=password的value的值

pwd_string = ""

for subchild in pwd_item:

name = subchild.get('name') #子节点下属性name的值

value = subchild.get('value')

if name=='password':

pwd_string = value

break

res_dict = {"sipRealm": "xxx.com",

"dateCreated": datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"),

"ipPort": "172.16.80.141:5060",

"sipPhone": "sim"+phone,

"pwd": pwd_string,

"statusCode": "0"

}

return json(res_dict, status=status_code, ensure_ascii=False)

if __name__ == "__main__":

app.run(single_process=True,

access_log=True,

host="0.0.0.0",

port=8032,

workers=1,

)


最终部署的FreeSWITCH的配置文件的账号目录的内容如下:

浏览器访问api接口的结果如下:

至此,即可将部署的http访问路径http://172.16.80.141:8032/registersip/ 按上一篇章的要求,直接粘贴到智能拨号器PC版的【平台地址】,或粘贴到智能拨号器手机app版的管理app中。

经过以上的一顿操作,即可实现将智能拨号器的app,跟开源的FreeSWITCH进行联动,使用蓝牙获取手机SIM号码,并实时获取其关联的中继SIP账号。


总结

本次这两个篇章,均为针对最近的用户反馈的情况,使用最简洁的方式,让蓝牙电话的用户,能第一时间的将所谓的“云平台”给部署出来,并能实现正常的电话呼叫。

对于使用VOS平台及其它平台的用户,本文的python的Rest接口的编写和数据获取方式,也能起到一定的参考作用。

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...