有没有一种SIP/VOIP不可知的方法可以知道手机何时离线?
在需要监控电话呼叫活动/状态的SIP应用程序上工作。我的应用程序(UA)已在代理服务器上注册,被监控的手机也是如此。我利用订阅/通知消息告诉手机我想知道它的“对话”事件,一旦订阅,它就可以正常工作。我遇到了两个问题:有没有一种SIP/VOIP不可知的方法可以知道手机何时离线?,sip,voip,Sip,Voip,在需要监控电话呼叫活动/状态的SIP应用程序上工作。我的应用程序(UA)已在代理服务器上注册,被监控的手机也是如此。我利用订阅/通知消息告诉手机我想知道它的“对话”事件,一旦订阅,它就可以正常工作。我遇到了两个问题: 我请求的订阅长度为900秒,并且一直从手机上收到4000秒以上的荒谬回复 当订阅处于活动状态时,手机可能会被拔下(不要问,但这是可能的)。当这种情况发生时,我不会收到任何类型的关于手机不再可用的通知。因此,我必须等待我的订阅超时,尝试并续订它,处理失败,并创建一个新的订阅 我意识到
任何洞察都是伟大的;目前,我只想尝试以更小的时间间隔刷新订阅,但我很想知道是否有更好的方法。提前感谢。我不知道SIP不可知的方式,除了可能以某种方式ping电话之外,但肯定有一种SIP方式来实现状态,即使用与对话框相同的订阅/通知模式,但在本例中用于状态。相关标准如下所示
通常,状态通知将由SIP注册器生成,并且由于您说您的手机正在向您的代理注册,因此还必须内置注册器。当另一部手机的注册状态发生变化时,例如当它第一次联机或无法重新注册时,注册官会通知您的UA。至于手机“消失”和注册服务器检测到它之间的延迟,没有规定的方法。您可以等待注册期到期,并在手机注册失败时将其标记为脱机,或者服务器可以主动向手机发送数据包,甚至SIP请求,如选项请求,并在收到故障响应时将其标记为脱机,Asterisk使用后一种方法。我不知道SIP不可知的方法,除了可能以某种方式ping电话之外,但肯定有一种SIP方法来实现状态,即使用与对话框相同的订阅/通知模式,但在本例中用于状态。相关标准如下所示
通常,状态通知将由SIP注册器生成,并且由于您说您的手机正在向您的代理注册,因此还必须内置注册器。当另一部手机的注册状态发生变化时,例如当它第一次联机或无法重新注册时,注册官会通知您的UA。至于手机“消失”和注册服务器检测到它之间的延迟,没有规定的方法。您可以等待注册期到期,并在手机注册失败时将其标记为脱机,或者服务器可以主动向手机发送数据包,甚至SIP请求,如选项请求,并在收到故障响应时将其标记为脱机,Asterisk使用后一种方法。当SIP UAC客户端向SIP UAS注册器注册时,SIP客户端提供一个到期报头,该报头指示SIP客户端需要重新注册自身的最长时间。如果SIP客户端在此时间段内未重新注册自身,则SIP UAS代理/注册服务器会将客户端标记为已断开连接
像FreePBX和Asterisk这样的专有SIP包主动地以一定间隔连续地向客户端发送SIP选项,其中客户端以OK进行响应。这是一种更主动的验证SIP客户端是否在线的方法;但是,该技术是专有的,不是实际SIP规范的一部分。当SIP UAC客户端向SIP UAS注册器注册时,SIP客户端提供一个到期报头,该报头指示SIP客户端需要重新注册自身的最长时间。如果SIP客户端在此时间段内未重新注册自身,则SIP UAS代理/注册服务器会将客户端标记为已断开连接
像FreePBX和Asterisk这样的专有SIP包主动地以一定间隔连续地向客户端发送SIP选项,其中客户端以OK进行响应。这是一种更主动的验证SIP客户端是否在线的方法;然而,这种技术是专有的,不是实际SIP规范的一部分。非常好。一直在调查出席请求;找到了我将收到的通知的描述,但没有在订阅中找到要发送的内容(无论如何,没有详细说明)。也许偶尔一声“ping”就足够了;我也会查一查。谢谢你的帮助。选项“ping”效果很好。我可以通过一个选项请求每分钟监控一次手机,看看我是否能得到除200响应码以外的任何信息。将不得不对其进行调整,使其做好生产准备,但迄今为止显示出有希望的结果。选项Ping是一个粗糙但有效的措施。选项请求从来没有打算用于这种类型的目的,但是很难找到一个SIP堆栈来实际处理请求,因为它被指定为与INVITE和r类似的处理方式