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

时间:2013-06-27 14:03:39

标签: sip voip

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

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

  1. 我发送了INVITE
  2. 0 s:我得到100 Trying
  3. 5 s:我得到183 Session description
  4. 我得到一个音频流,在一个案例中有铃声,在另一个案例中有一个“你正在呼唤的人是......”
  5. 如果我等待足够长的时间(约40秒),我会获得更合适的状态代码,例如180 Ringing

    音频分析确实不是一种选择。

    现在有什么提示吗?

    (我使用twinkle进行测试和当地德国sip-provider。)

1 个答案:

答案 0 :(得分:1)

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

有一个论点要求配置电话系统发出状态代码而不是音频错误消息。对于使用普通电话的呼叫者,始发交换机(最接近呼叫者的呼叫者)可以将该代码映射到适当的语音错误消息或音频音调。这样,当通过软件而不是通过人员进行呼叫时,软件可以立即访问实际的错误代码。

另一方面,您也可以争辩说远程开关(最接近目的地的那个或遇到问题的那个)说出自己的错误信息。那个开关最清楚实际问题是什么。例如,移动运营商可以发出语音错误消息,指出您尝试呼叫的移动电话当前超出范围。具有该含义的Q.931代码(或SIP错误代码)没有。它可能会返回27 =目的地无序?或者35 =目的地无法实现?这两个代码都是如此深奥,谁知道本地交换机将它们转换为什么错误消息(实际上:可能只是一个重新排序音,这对用户来说真的是用户不友好的)。当您尝试将Q.931原因代码来回映射到SIP错误代码时,会丢失更多信息,因为代码实际上根本不匹配。如果远程交换机只播放描述问题的信息丰富,适当的录音,则可能为呼叫者提供更好的用户体验。

由于存在这种困境(双方的争论),我们可以得出结论,这不可能通过一种方式或其他方式很快完全标准化来解决。

无论如何,有时这是可配置的:您的SIP提供商可能能够为编码错误而不是录制的消息配置中继。如果他们提供这个(有些人),那么值得尝试设置这个选项。但结果会有所不同:此选项仅影响其本地行为。一般情况下,如果您希望立即使用原因代码清除呼叫,而是从另一端收到记录的错误消息,您将无法对此做任何事情,因为决定它将以何种方式响应的交换机是远程的。

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