问题
I'm trying to integrate with Twilio's IP messaging service and I'm attempting to follow their guide here: https://www.twilio.com/docs/api/ip-messaging/guides/identity
I'm using AngularJS front end with Node.JS backend.
Here's my backend call, which executes fine:
getTwilioToken: function (request, response) {
var appName = 'AppTwilio';
var identity = request.body.id;
var deviceId = request.body.device;
// Create a unique ID for the client on their current device
var endpointId = appName + ':' + identity + ':' + deviceId;
// Create a "grant" which enables a client to use IPM as a given user,
// on a given device
var ipmGrant = new IpMessagingGrant({
serviceSid: "[MY_PROD_SID]",
endpointId: endpointId
});
// Create an access token which we will sign and return to the client,
// containing the grant we just created
var token = new AccessToken(
"[MY PROD ACCOUNT SID]",
"[MY PROD ACCOUNT SID]",
"[Prod Auth Token]"
);
token.addGrant(ipmGrant);
token.identity = identity;
// Serialize the token to a JWT string and include it in a JSON response
response.send({
identity: identity,
token: token.toJwt()
});
}
Here's my AngularJS stuff:
This is in my MessagingService this executes fine
getTwilioToken: function (userid, devicekey) {
return $http.post(apiUrl + '/getTwilioToken', { id: userid, device: devicekey }).then(function (response) {
deferred.resolve(response.data);
return deferred.promise;
});
}
In my controller I have a button wired up to this:
$scope.getTwilioToken = function () {
var userid = uuid.v4(); //just creating a dummy id for now
var device = uuid.v4(); //just creating dummy device for now
MessagingService.getTwilioToken(userid, device).then(function (response) {
$scope.accessManager = new Twilio.AccessManager(response.token);
$scope.messagingClient = new Twilio.IPMessaging.Client($scope.accessManager);
});
}
Here's my response i'm getting back from my server/twilio that includes the token:
{
"identity": "1f778bb6-2b3f-4008-9697-4733cf7870c5",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0.eyJqdGkiOiJBQzg1ZTNkYTYzZjNiY2MxNTY3ODdjMDA5NzdjZTBhNDA5LTE0NjM2NzM0MDYiLCJncmFudHMiOnsiaWRlbnRpdHkiOiIxZjc3OGJiNi0yYjNmLTQwMDgtOTY5Ny00NzMzY2Y3ODcwYzUiLCJpcF9tZXNzYWdpbmciOnsic2VydmljZV9zaWQiOiJJUzMyNjhlN2NhYWYxZDRlYTk5MGM5NWZkMTRkNWQ0NDM0IiwiZW5kcG9pbnRfaWQiOiJSaXNlclVUd2lsaW86MWY3NzhiYjYtMmIzZi00MDA4LTk2OTctNDczM2NmNzg3MGM1Ojc4NzcxNDc3LWJmZjktNDU3NC04Njc4LWQwOGZiM2Q0YjcxMCJ9fSwiaWF0IjoxNDYzNjczNDA2LCJleHAiOjE0NjM2NzcwMDYsImlzcyI6IkFDODVlM2RhNjNmM2JjYzE1Njc4N2MwMDk3N2NlMGE0MDkiLCJzdWIiOiJBQzg1ZTNkYTYzZjNiY2MxNTY3ODdjMDA5NzdjZTBhNDA5In0.XIUAGoyO8EtKZOfzbRe4qo-1wXddiMGswidbakUE2ZA"
}
I'm getting these errors in the browser at that point:
twilio-ip-messaging.min.js:151 Twilsock connection closed by server []i._onSocketRejected @ twilio-ip-messaging.min.js:151x.create.callbacks.onsocketRejected @ twilio-ip-messaging.min.js:151e.doCallback @ twilio-ip-messaging.min.js:235e.afterThisEvent @ twilio-ip-messaging.min.js:235e.afterEvent @ twilio-ip-messaging.min.js:235transition @ twilio-ip-messaging.min.js:235(anonymous function) @ twilio-ip-messaging.min.js:235r.onmessage @ twilio-ip-messaging.min.js:151 cds.twilio.com/v2/Streams:1 POST https://cds.twilio.com/v2/Streams 403 (Forbidden)
twilio-ip-messaging.min.js:150 IPMSG: failed to create session Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:150s @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153c @ twilio-ip-messaging.min.js:152Mutation (async)n @ twilio-ip-messaging.min.js:152(anonymous function) @ twilio-ip-messaging.min.js:152I @ twilio-ip-messaging.min.js:153P @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:152o.onreadystatechange @ twilio-ip-messaging.min.js:151XMLHttpRequest.send (async)(anonymous function) @ twilio-ip-messaging.min.js:151w @ twilio-ip-messaging.min.js:153o @ twilio-ip-messaging.min.js:151l.post @ twilio-ip-messaging.min.js:151f.post @ twilio-ip-messaging.min.js:151i.post @ twilio-ip-messaging.min.js:149i.createStream @ twilio-ip-messaging.min.js:149i.initialize @ twilio-ip-messaging.min.js:150i @ twilio-ip-messaging.min.js:150(anonymous function) @ messagingController.js:32(anonymous function) @ angular.js:15961n.$eval @ angular.js:17229n.$digest @ angular.js:17045n.$apply @ angular.js:17337l @ angular.js:11572H @ angular.js:11778u.onload @ angular.js:11711XMLHttpRequest.send (async)(anonymous function) @ angular.js:11756m @ angular.js:11517g @ angular.js:11227(anonymous function) @ angular.js:15961n.$eval @ angular.js:17229n.$digest @ angular.js:17045n.$apply @ angular.js:17337(anonymous function) @ angular.js:25023n.event.dispatch @ jquery.min.js:3r.handle @ jquery.min.js:3 twilio-ip-messaging.min.js:153 Unhandled promise rejection Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:153R @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153t.exports @ twilio-ip-messaging.min.js:152m.(anonymous function) @ twilio-ip-messaging.min.js:152_ @ twilio-ip-messaging.min.js:152v @ twilio-ip-messaging.min.js:152 twilio-ip-messaging.min.js:153 Unhandled promise rejection Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:153R @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153t.exports @ twilio-ip-messaging.min.js:152m.(anonymous function) @ twilio-ip-messaging.min.js:152_ @ twilio-ip-messaging.min.js:152v @ twilio-ip-messaging.min.js:152 twilio-ip-messaging.min.js:153 Unhandled promise rejection Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:153R @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153t.exports @ twilio-ip-messaging.min.js:152m.(anonymous function) @ twilio-ip-messaging.min.js:152_ @ twilio-ip-messaging.min.js:152v @ twilio-ip-messaging.min.js:152 twilio-ip-messaging.min.js:153 Unhandled promise rejection Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:153R @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153t.exports @ twilio-ip-messaging.min.js:152m.(anonymous function) @ twilio-ip-messaging.min.js:152_ @ twilio-ip-messaging.min.js:152v @ twilio-ip-messaging.min.js:152 twilio-ip-messaging.min.js:153 Unhandled promise rejection Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:153R @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153t.exports @ twilio-ip-messaging.min.js:152m.(anonymous function) @ twilio-ip-messaging.min.js:152_ @ twilio-ip-messaging.min.js:152v @ twilio-ip-messaging.min.js:152 twilio-ip-messaging.min.js:153 Unhandled promise rejection Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:153R @ twilio-ip-messaging.min.js:153(anonymous function) @ twilio-ip-messaging.min.js:153t.exports @ twilio-ip-messaging.min.js:152m.(anonymous function) @ twilio-ip-messaging.min.js:152_ @ twilio-ip-messaging.min.js:152v @ twilio-ip-messaging.min.js:152
回答1:
Twilio developer evangelist here.
Looking at your error here:
twilio-ip-messaging.min.js:150 IPMSG: failed to create session Object {status: 403, description: "Forbidden", body: "{"message":"Access forbidden","status":403}"}(anonymous function) @ twilio-ip-messaging.min.js:150s
Suggests to me you're failing to authenticate, which means the generated identity and token are incorrect. Looking at your code I saw this:
var token = new AccessToken(
"[MY PROD ACCOUNT SID]",
"[MY PROD ACCOUNT SID]",
"[Prod Auth Token]"
);
Now, unless you've just used copied and pasted this wrong, you shouldn't be using your account SID twice. Your access token should be composed of the Account SID, API Key and API Secret. More like this:
var token = new AccessToken(
"[MY PROD ACCOUNT SID]",
"[API KEY]",
"[API SECRET]"
);
If you're unsure about how to get this information though, have a look at the Gather Account Information section on the JavaScript Quickstart.
Other than that your code looks fine, and I think the error will disappear when you make sure you're using the correct authentication tokens.
Hope this helps you
来源:https://stackoverflow.com/questions/37328494/twilio-twilsock-connection-closed-by-server