通过低级消息获取SIP用户可用状态

2024-10-01 02:40:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图检查某个SIP联系人是否在python应用程序之外在线。我已经找到并测试了使用python发送SIP消息的sipping方法。现在我需要知道要发送哪个消息。在

不幸的是,到目前为止,我只找到了一个使用高级代码和buddy/subscribe函数的pjsip示例。在

那么SIP协议是否提供了一种简单的方法来询问注册商(例如。林Phone.org)“用户XYZ在线吗?”?这样的信息会是什么样子?在


Tags: 方法函数代码org应用程序消息协议示例
1条回答
网友
1楼 · 发布于 2024-10-01 02:40:14

SIP标准提供了OPTIONS请求,允许查询“基本状态”。在

The response to an OPTIONS is constructed using the standard rules for a SIP response as discussed in Section 8.2.6. The response code chosen MUST be the same that would have been chosen had the request been an INVITE. That is, a 200 (OK) would be returned if the UAS is ready to accept a call, a 486 (Busy Here) would be returned if the UAS is busy, etc. This allows an OPTIONS request to be used to determine the basic state of a UAS, which can be an indication of whether the UAS will accept an INVITE request.

唯一的问题是大多数SIP服务器没有像这样实现选项请求处理。相反,otion请求通常更像ping请求,SIP服务器将响应200ok来表示它们是活动的。你当然可以尝试一下你正在使用的服务器,但是如果你总是得到一个200ok的响应,这就是为什么。在

除了选项请求外,对成功的注册请求的响应将包含一个特定SIP地址的可用联系人列表。从理论上讲,这可以让你检查一个设备是否至少连接到该地址,但它不会告诉你设备的状态,它是否正在通话,请勿打扰等。加上寄存器请求必须经过授权,响应中的联系人列表可以包含SIP设备的IP地址,这是敏感信息。在

另一种方法是根据SIP Presence Event Package订阅状态事件通知。这也可能需要对订阅请求进行授权,而SIP服务器或提供商并不普遍支持该请求。在

作为最后的手段,您可以发送邀请请求,但这有一个很大的缺点,即它可能会导致另一端的电话铃响或显示一个未接来电,而且很可能会在他们的通话记录中结束。在

相关问题 更多 >