【问题标题】:how can I make an outbound SIP call using Twilio?如何使用 Twilio 进行出站 SIP 呼叫?
【发布时间】:2017-11-01 09:28:24
【问题描述】:

我正在使用带有三星 SIP 设置的 Galaxy 8S 安卓手机。我已经在电话上成功注册了一个 (Twilio) SIP 帐户。我想拨打国际 PSTN 号码而不是另一个 sip 地址。

我在 Twilio 上的 SIP 域指向我的 heroku app

代码是:

@application.route("/makesip", methods=['GET', 'POST'])
def makesip():
    to_number=request.values.get('To', None),
    client = Client(ACCOUNT_SID, AUTH_TOKEN)
    call = client.calls.create(to=to_number, from_="+1415792xxxx", url="https://myapp.herokuapp.com/sipout", method="POST")
    return call.sid
    #return "OK"

@application.route("/sipout", methods=['GET', 'POST'])
def sipout():
    response = VoiceResponse()
    to_number = request.values.get('To', None)
    dial = Dial(caller_id='+1415792xxxx')
    dial.number(to_number)
    response.append(dial)
    return str(response)

当我从手机拨打电话时,它几乎立即挂断并显示“服务器错误稍后再试”。 Twilio 错误日志说:

We don't support dialing out to global twilio domains (domainname.sip.twilio.com). Only regional (domainname.sip.us1.twilio.com) ones are supported.

我认为我在这里犯了一个非常根本的错误,但我根本无法识别它。有人可以帮忙吗?例如,我是否应该将“from_”参数设置为“sip:my_sip_address.domainname.sip.us1.twilio.com”?

【问题讨论】:

  • “收件人”号码是完整的 E.164 格式吗?是否有可能因为在 url 查询字符串中,前导“+”被从数字中删除?
  • 是的,没有问题。谢谢。

标签: python twilio sip


【解决方案1】:

我不是 Heroku 专家,但您的代码看起来与我运行的 php 非常相似,可以正常工作。

在您的电话设置中,您的 SIP 服务器设置为user@domainname.sip.twilio.com 还是user@domainname.sip.us1.twilio.com?应该是后者。我似乎记得当我试图让事情正常进行时被这样的事情抓住了

编辑

刚刚和我的另一场比赛,我想通了。您必须将电话号码拨打为 phonenumber@yourdomain.sip.twilio.com,然后 twilio 将返回 tosip:phonenumber@yourdomain.sip.twilio.com

您需要更改这行代码以仅删除数字

to_number=request.values.get('To', None),

我的 php 行是 substr(strtok($to, '@'), 4);,所以无论你的等价物是什么。

【讨论】:

  • 谢谢。它是 user@domainname.sip.twilio.com 但我按照您的建议将其更改为 user@domainname.sip.us1.twilio.com 并且现在的错误是“您的 TwiML 尝试拨打当前未注册的 Twilio SIP 注册用户挂号的”。我认为这是因为域名在他们的服务器上仍然是 domainname.sip.twilio.com,我无法更改。
  • 我明白谢谢。我会试一试,但我认为系统应该自动为我们做这件事。会报告的!
  • 如果系统剥离了 sip 地址,您将无法拨打任何 sip 电话
  • 我并不是建议系统去掉 sip 位,而是自动添加它。
【解决方案2】:

我认为可能发生的情况是,您的 Heroku 应用程序中的“To”格式为“sip:+12312123123@yoursipdomain.sip.twilio.com;user=phone”,而您正在尝试注入那直接变成“拨号”动词。

您真正想要的是将其剥离为 E.194 格式的裸数字(带有前导 +)。

我建议首先根据 Twilio SIP 注册文档使用快速 TwiML Bin 进行测试,而不是使用您的 Heroku 应用程序。

TwiML Bins 基本上是静态的 TwiML,但在特殊标签中具有一点点智能。如果您曾经在 Microsoft Word 中使用过,它就像 Twilio 中的 Mail Merge 一样。

(Twilio 最近更新了 SIP 注册文档。它们现在好多了。)

使用 TwiML Bin 进行初始测试,否则您可能会花时间修复原本可以正常工作的 Heroku 应用,因为问题出在您的手机/帐户上。

转到“Twilio 文档 > API 参考 > Twilio 语音 API > SIP 注册”。

向下滚动到“使用增强的 TwiML Bin 模板呼叫公共电话网络上的移动电话/固定电话”并按照此操作。

看看这是否有效。

如果没有,我怀疑你的三星实际上是因为拨号计划相关而吐出一些愚蠢的东西。 (拨号计划是将 +12345645642 转换为 SIP URI。您可能会发现它正在执行类似 +012345645642 的操作。)

如果它确实有效,那就太好了。如果您想让您的 Heroku 应用程序正常工作,请将工作响应正文与您的 Heroku 应用程序吐出的响应正文进行比较。发布两者,我们将找出问题所在。

只是为了检查一下,您是在三星的域和注册服务器设置中指定一个区域,是吗? miknik 所说的“yoursipdomain.sip.us1.twilio.com”?

【讨论】:

  • 感谢您提供此信息。我实际上正在同时与 Twilio 人员交谈,所以当我得到解决方案时,我会在这里发布解决方案!感谢您的宝贵时间。
  • 再次感谢。我正在查看您在 SIP 注册时指导我查看的 Twilio 文档。它看起来很有帮助。会回来报告的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多