如何使用Twilio进行出站SIP呼叫?

时间:2017-11-01 09:28:25

标签: python twilio sip

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

我的SIP doman,在Twilio上,指向我的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”吗?

2 个答案:

答案 0 :(得分:1)

我不是一个heroku专家,但你的代码看起来与我运行的php相似,可以正常运行。

在您的手机设置中,您的SIP服务器是user@domainname.sip.twilio.com还是user@domainname.sip.us1.twilio.com?它应该是后者。我似乎记得当我试图让事情发挥作用时被这样的东西搞砸了

修改

和我一起玩了另一场比赛,我想通了。您必须拨打电话号码phonen@yourdomain.sip.twilio.com,然后twilio将to作为sip:phonenumber@yourdomain.sip.twilio.com

返回

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

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

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

答案 1 :(得分:0)

我认为可能发生的事情是,击中你的Heroku应用程序的“To”格式为“sip:+12312123123@yoursipdomain.sip.twilio.com; user = phone”而你正试图注入直接进入“拨号”动词。

你真正想要的是将其剥离为E.194格式的裸号(前导+)。

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

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

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

使用TwiML Bin进行初步测试,否则您可能会花时间修复其他正在使用的Heroku应用程序,因为问题是您的手机/帐户。

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

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

看看是否有效。

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

如果确实有效,那很好。如果您想让Heroku应用程序正常工作,请将工作响应主体与Heroku应用程序正在吐出的响应主体进行比较。张贴两者,我们将弄清楚出了什么问题。

要检查一下,您在Samsung上的域和注册服务器设置中指定了一个区域,是吗? miknik谈到的“yoursipdomain.sip。 us1 .twilio.com”?