【问题标题】:Using Twilio to make/receive calls via Cisco SPA504G IP phone使用 Twilio 通过 Cisco SPA504G IP 电话拨打/接听电话
【发布时间】:2016-02-28 18:57:32
【问题描述】:

希望通过 Twilio 使用我们的 Cisco SPA504G IP 电话拨打电话。我们有 4 条 Twilio 电话线/号码,我们希望使用它们在实体电话上拨打和接听电话。

编辑问题:

我在这里发现了一个有趣的帖子:https://ertw.com/blog/2013/11/05/using-an-ip-phone-with-twilio/

这是我为了让电话响起但我听不到声音的步骤:/

  1. 我刚买了:http://www.amazon.com/Grandstream-GXP1620-Medium-Business-Device/dp/B00VUU8EZM

  2. 已将手机连接到我的路由器。我正在将 10000-20000 范围内的所有流量端口转发到电话。我也在端口转发端口 5060 到手机。

  1. 已上传以下 xml 文件:
<Response>
<Say>Testing</Say>
<Dial>
    <Sip>
        sip:line1@24.51.221.98
    </Sip>
</Dial>
</Response>

可以在以下位置找到:http://antnam.com/voip.xml

  1. 我打电话给我的互联网提供商,现在我有了一个静态 IP 地址,因此 24.51.221.98 永远不会改变。

  2. 我将我的 twilio 号码 (855) 804-0420 配置为执行 GET @http://antnam.com/voip.xml

  1. 当我拨打 (855) 804-0420 时,我可以听到连接到我的路由器(voip 电话)的电话响铃!!!好消息,我可以拨打我在第 1 步购买的电话了!

  2. 一旦我接听电话,我就无法听到声音:/。我可能做错了什么?

总而言之,一切都很好,我只是听不到任何东西。就好像通话处于静音状态。我是否错过了打开更多端口?

【问题讨论】:

  • 这道题涉及到什么编程?
  • 我只需要这个问题的帮助。有类似这样的问题:stackoverflow.com/questions/21500697/…。那为什么twilio标签存在呢?
  • 您是否尝试将手机放在 DMZ 上?
  • DMZ 在我的路由器上已关闭。所以我想我没有@Alex Braban。感谢您的帮助!
  • 我尝试使用 DMZ 而不是端口转发,但我得到了相同的行为。

标签: twilio sip voip


【解决方案1】:

听起来这可能只是一个 NAT 穿越问题;如果是,请移动或删除此问题,因为这仅在您对此客户端进行编程时才相关。有大量关于这个问题的信息(例如,here 是一篇很棒的文章,当我在谷歌上搜索“voip nat traversal”时,它作为第一个结果出现),但这里有一个简短的总结:

为什么 NAT 会导致 VoIP 出现问题

大多数 VoIP 协议在一个端口(例如本例中的 5060)上使用数据流来协商连接信息,其中包括用于接收音频/RTP 流量的套接字(IP 地址和端口);关于这个套接字的协商有两件事可能是出乎意料的:

  1. 它可以是任何 IP 地址和端口组合,而不仅仅是 VoIP 设备本身的组合。因此,例如,您可能有一个 VoIP 服务器,它在另一台主机上协商一个套接字,该主机不是 SIP 对话的一部分,并且可能位于 NAT 后面
  2. 协商在 OSI 应用层(第 7 层)完成,因此它通常不受 NAT 进程的影响,NAT 进程在第 3 层和第 4 层运行

如何诊断由于 NAT 而丢失的音频

如果您能够获取数据包捕获(理想情况下在 WAN 和 LAN 端口上,这样您就可以看到您的 VoIP 设备在 NAT 之前和之后的流量),您可以看到问题的实际效果:只需查找包含 SDP 的数据包有效负载(例如,如果您在 UDP 5060 上进行 SIP,只需过滤该端口,您将看到包含 SDP 有效负载的 INVITE 请求和 200 OK 响应);深入到 c(连接信息)和 m(媒体描述)行,它们应该类似于以下内容:

c=IN IP4 192.168.1.114
m=audio 6094 RTP/AVP 0 8 101

如果您在 WAN 端口上看到类似的内容,则表示您的 VoIP 设备请求在 192.168.1.114:6094 上发送音频; IP 地址是私有地址,不能通过 Internet 路由;该端口只是我随机选择的一个,但您看到的需要打开并转发到您的设备

如何解决

这个问题有多种解决方案,所有这些都归结为将您的设备提供的私有 IP 地址改写为您的设备的流量正在被 NAT 输出的公共 IP 地址,以便在远程设备解析时SDP 中的连接信息行,它有一个有效的、可公开路由的 IP 地址来发送音频流量,以及一个 UDP 端口,它是 NAT'd 到您的设备。有时 VoIP 设备本身可以处理重写(例如,您可以在其配置中静态地告诉设备它的公共 IP 是什么,或者它可以从 STUN 之类的协议中发现它),有时重写是由防火墙/路由器完成的正在做 NAT(有各种名称,如 SIP ALG 或 SIP Fixup)。 不幸的是,由于各种路由器和防火墙的 NAT 实现方式不同,没有任何解决方案可以保证 100% 的工作;如果您在同一个防火墙后面有多个设备,则让它进行重写将只适用于其中一个。

在你的情况下:

您提到了 2 个不同的 VoIP 设备,一个 Cisco SPA504G 和一个 Grandstream GXP1620。两种设备的数据表都说它们支持 STUN,所以我会开始在其配置中查找 STUN 设置或其他任何引用 NAT 遍历的内容。另外,请确保您转发到设备的端口是它使用的端口,这通常只是配置中的另一个项目,称为“RTP 基本端口”或“RTP 范围”

【讨论】:

    【解决方案2】:

    我还会确保您使用 stun.sipgate.net 等公共 stun 服务器启用 nat transveral 并启用 stun

    注意:STUN 在 TCP 和 UDP 端口 3478 上运行。

    这是必需的,因为电话需要在 sip 数据包中发送外部 ip。如果没有 stun,它将发送内部 ip,而远端 sip 设备将尝试在那里发送数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多