在当今的集成服务世界中,OpenSIPS 与外部应用程序交互的能力不再是可选的 – 而是一种必需品。为了满足这种必要性,OpenSIPS 发布了一个新的 Python 包, 一种“瑞士军刀”工具,以提供与 OpenSIPS 集成的更简单、更快速、更高效的方式。
该包通过提供 Python 模块来促进高效的双向通信:
- 运行命令:通过管理接口(MI)轻松发送命令并接收响应——
opensips.mi
模块。 - 事件处理:通过事件接口(EVI)接收和处理实时事件——
opensips.event
模块。
它还包括以下强大的命令行工具:
- opensips-mi:用于执行 MI 命令的工具。它直接在控制台中显示输出。它是
opensips-cli -x mi
命令的简化替代方案。 - opensips-event:注册特定事件并将其直接输出到控制台的实用程序。非常适合轻松测试各种场景中的事件生成。
opensips.mi
该模块可用于向OpenSIPS MI接口发送命令。目前支持三种不同的传输协议:
fifo:用于在OpenSIPS运行的同一台机器上本地运行命令。
datagram:用于通过数据报消息运行命令。
http:通过HTTP查询运行命令。
当然,确保OpenSIPS加载了适当的MI模块是至关重要的。此外,还必须正确配置以供外部使用。
该模块以JSON对象的形式返回命令响应,允许根据需要进行无缝的进一步处理。
opensips.event
该模块在OpenSIPS中注册特定事件。当事件触发时,它通过数据报传输接收通知。可以选择性地包含一个过期超时时间。每当事件发生时,会调用一个指定的函数。事件负载作为JSON对象传递,包含与事件相关的所有信息。
该模块提供后端支持,在单独的线程中同步等待事件。它还使用asyncio接口来异步处理I/O事件。
示例
使用此软件包的最简单方法是使用opensips-mi
工具运行OpenSIPS MI的任意命令。
$ opensips-mi uptime
{
"Now": "Wed Nov 20 10:40:23 2024",
"Up since": "Wed Nov 20 10:37:52 2024",
"Up time": "151 [sec]"
}
此命令在控制台以 JSON 格式输出结果——用户可以获取并相应地处理它(例如,使用 jq)。然而,用户也可以通过以下脚本以编程方式轻松实现这一点。
$ python -c 'import opensips.mi; print(opensips.mi.OpenSIPSMI().execute("uptime"))'
OrderedDict({'Now': 'Wed Nov 20 10:44:34 2024', 'Up since': 'Wed Nov 20 10:37:52 2024', 'Up time': '402 [sec]'}
最新版本当然在构建命令和处理响应方面提供了更高的灵活性。用户可以在以下部分找到高级用法示例。
通过OpenSIPS Python包处理事件也相当简单:如果用户仅想测试事件的生成/接收,可以使用opensips-event
命令。
$ opensips-event E_TEST
{
"jsonrpc": "2.0",
"method": "E_TEST",
"params": {
"attempt": 0
}
}
可以通过以下脚本以编程方式实现相同的行为:
import time
from opensips.mi import OpenSIPSMI, OpenSIPSMIException
from opensips.event import OpenSIPSEvent, OpenSIPSEventHandler
mi_connector = OpenSIPSMI()
hdl = OpenSIPSEventHandler()
event = hdl.subscribe('E_TEST', print)
time.sleep(3600)
event.unsubscribe('E_TEST')
运行此脚本的结果是:
$ python3 opensips-event.py
OrderedDict({'jsonrpc': '2.0', 'method': 'E_TEST', 'params': OrderedDict({'attempt': 0})})
项目
目前已经有很多项目使用 OpenSIPS Python 包:
- OpenSIPS CLI已迁移至使用此包来运行 MI 命令
- SIPSSert – 提供运行 MI 命令的任务
- OpenSIPS SIPSSert测试 – 使用
opensips.mi
模块运行命令来检查 OpenSIPS 测试的状态 - OpenSIPS AI 语音连接器社区版 – 使用 Python 模块与 OpenSIPS B2B UA 实例进行交互。
python-opensips
模块对于开发人员来说是一个很有价值的工具。它允许他们在基于 OpenSIPS 的电信项目中充分利用 Python 的简单性和多功能性。
原文:https://blog.opensips.org/2024/11/20/enhance-opensips-integration-with-new-python-package/
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/54065.html