使用Twilio官方tutorial code here,我得到一个正常运行的电话号码和TwiML应用程序,并启动printf()
服务器和flask
转发进程。操作系统和浏览器为ngrok
。
不幸的是,它失败了,给出了这个错误:Chrome 53.0.2785.143 (64-bit) on Mac OSX
如屏幕截图所示:
我尝试将Twilio.Device Error: JWT signature validation failed
移交给这样的电话:
{debug : true}
并获得以下输出:
但目前还不清楚发生了什么。如果我尝试将返回到Python控制台的实际兼容性令牌(使用JWT encoder/decoder)并尝试使用Twilio秘密身份验证令牌和HS256 algorithm解码它:
Twilio.Device.setup(data.token, { debug: true });
我收到以下错误:
from jose import jwt
token = "xxxxx" # compatibility token from above in browser
print jwt.decode(token, TWILIO_AUTH_TOKEN, algorithms=['HS256'])
所以也许他们没有将它作为编码解码的秘密,所以不确定证明了多少。
有什么想法吗?
答案 0 :(得分:3)
有几件事要尝试。
首先:确保您使用的是实际的AccountSID和AuthToken,DONT尝试使用"测试凭证"。如果您在试用帐户中一切正常,twilio只会对语音通话提出问候语。
第二:确保您已经创建了一个TwiML应用程序并且正在使用该关联的AppID来实现" applicationId"在" allowClientOutgoing"方法
这应该可以帮助您完成JWT签名过程。如果您的服务器似乎没有工作。我刚刚构建了位于here的Google Apps脚本版本。只需复制一下代码中的符号来放置您的凭据和appId,然后您就可以看到它是否与您的服务器有关。 要使用,只需向pubilshed应用程序脚本URL发出GET请求,它就会重新获取令牌。
确保JWT签名正确后确保的其他步骤。
对于传出,您将需要回拨到您的服务器,以便发送一些TwiML以及拨打拨出号码的订单。附加的Google Apps脚本上还有一个设置。将脚本URL添加到已注册的twilio号码上的语音回调部分,并将其设置为POST请求。
传出的TwiML示例
<Response><Dial callerId="+//enter your registered phonenumber here////">'+tocall+'</Dial></Response>'
对于传入连接,您需要设置一个带有一些代码的TwiML Bin,以拨打您在&#34; allowIncoming(clientName)&#34;中使用的用户名。方法
传入的TwiML示例
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Client>//client name or id registered during token generation here\\</Client>
</Dial>
</Response>
然后将TwiML Bin分配给控制台内注册的语音的传入侧。