对于玩具项目,我想知道手机是否连接到gsm。所以我想“好吧,让我们使用我当地的sip提供商,看看”。
但在这两种情况下,事情都是这样的:
INVITE
100 Trying
183 Session description
如果我等待足够长的时间(约40秒),我会获得更合适的状态代码,例如180 Ringing
。
音频分析确实不是一种选择。
现在有什么提示吗?
(我使用twinkle进行测试和当地德国sip-provider。)
答案 0 :(得分:1)
此问题在电话网络的工作方式中很常见,并非特定于SIP或IP。这就是为什么当你拨打另一个国家并且电话号码很忙时,你有时可能听到当地国家的忙音,或者你可能听到来自另一个国家的不同的忙音。在后一种情况下,您无法通过音频分析检测到问题所在。在SS7和ISDN中,我们谈到Q.931原因代码而不是SIP错误代码,但原理是相同的。
有一个论点要求配置电话系统发出状态代码而不是音频错误消息。对于使用普通电话的呼叫者,始发交换机(最接近呼叫者的呼叫者)可以将该代码映射到适当的语音错误消息或音频音调。这样,当通过软件而不是通过人员进行呼叫时,软件可以立即访问实际的错误代码。
另一方面,您也可以争辩说远程开关(最接近目的地的那个或遇到问题的那个)说出自己的错误信息。那个开关最清楚实际问题是什么。例如,移动运营商可以发出语音错误消息,指出您尝试呼叫的移动电话当前超出范围。具有该含义的Q.931代码(或SIP错误代码)没有。它可能会返回27 =目的地无序?或者35 =目的地无法实现?这两个代码都是如此深奥,谁知道本地交换机将它们转换为什么错误消息(实际上:可能只是一个重新排序音,这对用户来说真的是用户不友好的)。当您尝试将Q.931原因代码来回映射到SIP错误代码时,会丢失更多信息,因为代码实际上根本不匹配。如果远程交换机只播放描述问题的信息丰富,适当的录音,则可能为呼叫者提供更好的用户体验。
由于存在这种困境(双方的争论),我们可以得出结论,这不可能通过一种方式或其他方式很快完全标准化来解决。
无论如何,有时这是可配置的:您的SIP提供商可能能够为编码错误而不是录制的消息配置中继。如果他们提供这个(有些人),那么值得尝试设置这个选项。但结果会有所不同:此选项仅影响其本地行为。一般情况下,如果您希望立即使用原因代码清除呼叫,而是从另一端收到记录的错误消息,您将无法对此做任何事情,因为决定它将以何种方式响应的交换机是远程的。
当使用音频消息方法时,通常会出现正确的Q.931原因代码或SIP错误代码(在录制结束后),但正如您所指出的那样,到那时可能已经太晚了。