twilio - 使用 Twilio 通过 Cisco SPA504G IP 电话调用/接听电话

标签 twilio sip voip

希望通过 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端口转发到手机上。

enter image description here

  • 上传了以下 xml 文件:
  • <Response>
    <Say>Testing</Say>
    <Dial>
        <Sip>
            sip:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="05696c6b60344537312b30342b3737342b3c3d" rel="noreferrer noopener nofollow">[email protected]</a>
        </Sip>
    </Dial>
    </Response>
    

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

  • 我调用我的互联网提供商,现在我有一个静态 IP 地址,因此 24.51.221.98 永远不会改变。

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

  • enter image description here

  • 当我调用 (855) 804-0420 时,我可以听到连接到我的路由器的电话(VoIP 电话)响起!好消息是我可以调用我在第 1 步购买的手机了!

  • 接听电话后,我无法收听语音:/。我可能做错了什么?

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

    最佳答案

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

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

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

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

    如何诊断由于 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 地址是私有(private)地址,无法通过互联网路由;该端口只是我随机选择的一个,但您看到的端口需要打开并转发到您的设备

    如何修复

    这个问题有多种解决方案,所有这些解决方案都可以归结为将您的设备发出的私有(private) IP 地址重写为您设备的流量经过 NAT 输出的公共(public) IP 地址,以便远程设备解析时SDP 中的连接信息行,它具有用于将音频流量发送到的有效的、公共(public)可路由的 IP 地址,以及通过 NAT 连接到您的设备的 UDP 端口。有时 VoIP 设备本身可以处理重写(例如,您可以在其配置中静态地告诉设备其公共(public) IP 是什么,或者它可以从 STUN 等协议(protocol)中发现它),有时重写是由防火墙/路由器完成的正在执行 NAT(对此有多种名称,例如 SIP ALG 或 SIP Fixup)。 不幸的是,由于不同路由器和防火墙的 NAT 实现存在差异,没有任何解决方案能够保证 100% 正常工作;如果您在同一防火墙后面有多台设备,则让它进行重写将仅适用于其中一台。

    就您而言:

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

    关于twilio - 使用 Twilio 通过 Cisco SPA504G IP 电话调用/接听电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35686867/

    相关文章:

    ruby-on-rails - Sidekiq Twilio Redis 'undefined method ` strip' for nil :NilClass'

    java - Android 使用 Jain-SIP 库创建 SipStack 时出错

    ios - 如何用 setKeepAliveTimeout 方法替换 UIRemoteNotificationTypeVoip 方法?

    ios - 用于去电 iOS webrtc 的 VOIP 拨号器提示音

    ios - twilio API : how can I play an audio file to both sides of a voice call and not disconnect the call?

    android - Twilio Video - 调用参与者加入视频通话

    javascript - twilio 获取消息详细信息(不允许的方法)

    ios - PJSIP 项目中缺少库文件以及如何链接库文件?

    java - 安卓NDK : load_library: cannot locate srand

    ios - 如何使用 DNS 域连接到 SIP 服务器