【问题标题】:How to tell the difference between an offline and online mobile phone via sip?如何通过 sip 区分离线和在线手机?
【发布时间】:2013-06-28 09:36:24
【问题描述】:

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

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

  1. 我发送INVITE
  2. 0 秒:我得到一个100 Trying
  3. 5 秒:我得到一个183 Session description
  4. 我收到一个音频流,一种情况是响铃,另一种情况是“您正在呼叫的人是……”

如果我等待的时间足够长(约 40 秒),我会得到更合适的状态代码,例如 180 Ringing

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

关于现在去哪里的任何提示?

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

【问题讨论】:

  • 在“您正在呼叫的人是...”的情况下,如果您等待的时间足够长,您最终应该会收到错误消息。这将是您呼叫未成功完成的唯一指示。
  • @Celada - 是的,正如我所说,如果我等待 40 秒+,我会得到一些更有用的东西。在“那个人......”的情况下,我得到了一些484 Incomplete address(很奇怪)。但我不想等那么久。到那时,就会有人拿起电话,接听电话并浪费一些钱。
  • 对不起,您必须等待。这是电话网络中的一个长期问题:SS7 和 ISDN 也会出现这种情况,而不仅仅是 SIP。在配置为发出“友好”错误消息的中继上,在“友好”消息完成之前,您不会获得呼叫清除状态。
  • 1) 这听起来有点像“答案”? (不是我想听的,很明显)。您可能想发布作为答案?你有一些参考资料吗? 2)这是否意味着我可以获得(阅读:购买)一个特定的“主干”,它可以给我更好的信号,可能没有友好的消息?

标签: sip voip


【解决方案1】:

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

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

另一方面,您也可以主张让远程开关(离目的地最近的开关或遇到问题的开关)说出自己的错误消息。该开关最清楚实际问题是什么。例如,移动运营商可以发出语音错误消息,说明您尝试拨打的手机当前超出范围。没有具有该含义的 Q.931 代码(或 SIP 错误代码)。它可能会返回 27=Destination 乱序??或者 35=无法到达的目的地??这两个代码都非常深奥,谁知道本地交换机会将它们翻译成什么样的错误消息(实际上:可能只是一个重新排序音,这对人类调用者来说确实是用户不友好的)。而且,当您尝试将 Q.931 原因代码来回映射到 SIP 错误代码时,甚至会丢失更多信息,因为代码实际上根本无法很好地匹配。如果远程开关仅播放描述问题的信息丰富、适当的录音,则可能会为呼叫者提供更好的用户体验。

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

无论如何,有时这是可配置的:您的 SIP 提供商可能能够为您的中继配置编码错误而不是记录消息。如果他们提供此功能(有些提供),则值得尝试设置此选项。但结果会有所不同:此选项仅影响其本地行为。一般来说,如果您想立即使用原因代码调用 clearing 并从另一端获取记录的错误消息,您将无法对此做任何事情,因为决定它将以哪种方式响应的开关是远程的。

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

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 2015-09-25
    • 2017-05-24
    • 2012-07-16
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多