我正在创建一个webb应用程序,用户可以点击数字并从浏览器拨号。
我正在使用Twilio JS Client API和Django后端来生成功能令牌。我正在使用这个Python Helper Library。
一切似乎都运转得很好但是一旦我试图打电话,我的客户就会收到错误:
Uncaught Twilio.Exception: 31205: [object Object] twilio.min.js:45
WebSocket is already in CLOSING or CLOSED state.
错误31205是JWT令牌过期错误,这很奇怪,因为当我点击拨号时令牌的生命周期最多为1分钟。
这是我在Django中的view方法,它生成一个很好的功能令牌:
def dialer(req, phone_number):
capability = TwilioCapability(settings.TWILIO_ACCOUNT_SID,
settings.TWILIO_AUTH_TOKEN)
# allow outgoing voice
capability.allow_client_outgoing(settings.TWILIO_APP_SID)
profile = user_models.UserProfile.objects.get(user=req.user)
v = {'capability_token': capability.generate(expires=600),
'phone_number': phone_number, 'user': req.user,
'caller_id': profile.user_phone}
return shortcuts.render_to_response('dialer.html', v)
这是我的dialer.html中的JavaScript:
Twilio.Device.setup('{{capability_token}}');
Twilio.Device.ready( function(device) {
console.log('Device ready...');
});
Twilio.Device.connect({
CallerId:'{{caller_id}}',
PhoneNumber: '{{phone_number}}'
});
$('#hang-up').click( function() {
Twilio.Device.disconnectAll();
});
关于我为什么会收到此错误的任何想法? Twilio文档说,capability_token的生命周期默认为一小时。
谢谢!
PS。我使用Node.js作为后端制作了完全相同的应用程序,并且效果很好:)
答案 0 :(得分:2)
解决了!
所以代码没有任何问题。问题是我的虚拟机有错误的日期/时间设置。
因此,当您尝试从Twilio检索功能令牌时,请确保这是正确的:)