如何通过sip区分离线和在线手机?

如何通过sip区分离线和在线手机?,sip,voip,Sip,Voip,对于一个玩具项目,我想知道手机是否连接到gsm。所以我想“好吧,让我们使用我当地的sip提供商看看” 但在这两种情况下,情况都是这样的: 我发送了一个邀请 0秒:我得到一个100分 5秒:我得到一个183会话描述 我得到一个音频流,一个是铃声,另一个是“你打电话的人是…” 如果我等待的时间足够长(~40秒),我会得到一个更合适的状态码,比如180响铃 音频分析不是一种选择,真的 关于现在去哪里有什么提示吗 (我使用twinkle进行测试,并使用了一家当地的德国sip提供商。)这个问题在电话网络的

对于一个玩具项目,我想知道手机是否连接到gsm。所以我想“好吧,让我们使用我当地的sip提供商看看”

但在这两种情况下,情况都是这样的:

  • 我发送了一个
    邀请
  • 0秒:我得到一个
    100分
  • 5秒:我得到一个
    183会话描述
  • 我得到一个音频流,一个是铃声,另一个是“你打电话的人是…”
  • 如果我等待的时间足够长(~40秒),我会得到一个更合适的状态码,比如
    180响铃

    音频分析不是一种选择,真的

    关于现在去哪里有什么提示吗


    (我使用twinkle进行测试,并使用了一家当地的德国sip提供商。)

    这个问题在电话网络的工作方式中很常见,并不特定于sip或IP。这就是为什么,当你打电话到另一个国家,而号码正忙时,你有时可能会听到当地国家的忙音,或者你可能会听到来自另一个国家的不同忙音。在后一种情况下,除非通过音频分析,否则无法检测问题所在。在SS7和ISDN中,我们说的是Q.931原因码,而不是SIP错误码,但原理是相同的

    对于将电话系统配置为发出状态码而不是音频错误消息,有一个值得讨论的论点。对于使用普通电话的呼叫者,发起开关(离呼叫者最近的开关)可以将该代码映射到相应的语音错误消息或音频音调。这样,当呼叫是由软件而不是由人进行时,软件可以立即访问实际的错误代码

    另一方面,您也可以主张让远程交换机(距离目的地最近的交换机或遇到问题的交换机)说出自己的错误消息。这个开关最清楚实际问题是什么。例如,移动运营商可能会发出一条语音错误消息,表示您试图呼叫的移动电话当前超出范围。没有Q.931代码(或SIP错误代码)具有这种含义。它可能返回27=目的地故障??或35=无法到达目的地??这两种代码都是如此深奥,谁知道本地开关会将它们转换成什么错误消息(实际上:可能只是一种重新排序的音调,这对用户来说确实是不友好的)。当您尝试映射Q.931时,会导致代码来回SIP错误代码,甚至会丢失更多信息,因为代码实际上根本不匹配。如果远程开关只是播放一段描述问题的信息性、适当的录音,那么对呼叫方来说,这可能是一种更好的用户体验

    由于存在这一困境(双方都有争议),我们可以得出结论,短期内不可能通过一种或另一种方式完全标准化来解决这一问题

    无论如何,有时这是可配置的:您的SIP提供商可能能够为您的主干配置编码错误,而不是记录的消息。如果他们提供这种服务(有些提供),那么设置这种选项是值得的。但结果会有所不同:这一选择只会影响其局部行为。一般来说,如果您希望立即使用原因码清除呼叫,而从另一端收到记录的错误消息,您将无法对此采取任何措施,因为决定其响应方式的开关是远程开关


    使用音频消息方法时,通常最终会出现正确的Q.931原因代码或SIP错误代码(在录制完成后),但正如您所指出的,到那时可能已经太晚了。

    对于“您正在呼叫的人是…”的情况,如果您等待的时间足够长,您最终应该会返回错误。这将是您唯一的指示,表明呼叫没有成功完成。@Celada-是的,正如我所说的,如果我等待40秒以上,我会得到更有用的东西。在“这个人…”的案例中,我得到了一些
    484个不完整的地址
    (很奇怪)。但我不想等那么久。到那时,会有人拿起电话,接了电话,浪费了一些钱。对不起,你得等一下。这是电话网络中的一个长期问题:SS7和ISDN也是如此,而不仅仅是SIP。在配置为发出“友好”错误消息的中继上,只有在“友好”消息完成后才能获得呼叫清除状态。1)这听起来有点像“应答”?(显然不是我想听的那个)。你可能想发布一个答案?你有一些推荐信吗?2) 这是否意味着我可以得到(阅读:购买)一个特定的“主干”,它给我更好的信号,可能没有友好的消息?