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

时间:2015-03-17 11:35:41

标签: python sip voip low-level

我正在尝试检查某个SIP联系人是否在python应用程序中联机。我已经找到并测试了sipping作为使用python发送SIP消息的方法。现在我需要了解要发送的消息。

不幸的是到目前为止,我只使用他们的高级代码和伙伴/订阅函数找到了pjsip示例。

SIP协议提供了一种简单的方式来询问注册商(例如linphone.org)“用户XYZ在线吗?”?这样的消息会是什么样的?

1 个答案:

答案 0 :(得分:0)

SIP标准提供OPTIONS个请求,允许查询"基本状态"。

  

使用标准规则构建对OPTIONS的响应      对于第8.2.6节中讨论的SIP响应。响应代码      选择必须与根据请求选择的相同      是一个邀请。也就是说,如果UAS是,则返回200(OK)      准备接受电话,如果是486(忙碌在这里)将被退回      UAS正忙等。这允许使用OPTIONS请求      确定UAS的基本状态,可以作为指示      UAS是否接受INVITE请求。

唯一的问题是大多数SIP服务器都没有像这样实现OPTIONS请求处理。相反,OTIONS请求通常被视为更像ping请求,而SIP服务器将以200 OK响应以指示它们处于活动状态。您当然可以尝试使用您正在使用的服务器,但如果您总是得到200 OK响应,那就是原因。

除了OPTIONS请求之外,对成功的REGISTER请求的响应将保存特定SIP地址的可用联系人列表。理论上,这可以让您检查设备是否至少连接到该地址,但它不会告诉您有关设备状态的任何信息,无论是通话,请勿打扰等。加上REGISTER请求必须被授权,响应中的联系人列表可以包含SIP设备的IP地址,这是敏感信息。

另一种方法是根据SIP Presence Event Package订阅在线状态事件通知。这也可能要求SUBSCRIBE请求获得授权,SIP服务器或提供商不会普遍支持。

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