2017-10-17 7 views
0

J'essaye de tirer quelques statistiques pour un TaskQueue utilisant le SDK TaskRouter.js. Pour cela, j'ai besoin de générer un jeton de routeur de capacité, qui permet d'accéder à la TaskQueue. Selon l'exemple à twilio docs, je suis supposé passer null comme le paramètre de canal (regarder dans l'exemple C# .Net), pour générer le jeton TaskRouterCapability. Mais quand je fais ceci, j'obtiens une exception (l'objet est null dans get_Claims).Erreur dans Twilio .net SDK faisant TaskRouterCapability pour TaskQueue

En regardant le code source, je devrais passer dans le TaskQueue Sid comme l'ID de canal au lieu de null. Quand j'ai fait cela, un jeton a été généré correctement.

Pour commencer, je suis en utilisant le code exemple de génération de jetons de base à twilio docs:

class Program { 
    static void Main(string[] args) 
    { 
     // Find your Account Sid and Auth Token at twilio.com/console 
     const string accountSid = "ACbe0c12d747XXXXXXXXXXXXXXXXXb"; 
     const string authToken = "your_auth_token"; 
     const string workspaceSid = "WSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
     const string taskQueueSid = "WQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 

     var urls = new PolicyUrlUtils(workspaceSid, taskQueueSid); 

     var allowFetchSubresources = new Policy($"{urls.TaskQueue}/**", 
               HttpMethod.Get); 

     var allowUpdates = new Policy(urls.TaskQueue, HttpMethod.Post); 

     var policies = new List<Policy> 
    { 
     allowFetchSubresources, 
     allowUpdates 
    }; 

     // By default, tokens are good for one hour. 
     // Override this default timeout by specifiying a new value (in seconds). 
     // For example, to generate a token good for 8 hours: 
     var capability = new TaskRouterCapability(
      accountSid, 
      authToken, 
      workspaceSid, 
      null, 
      policies: policies, 
      expiration: DateTime.UtcNow.AddSeconds(28800) // 60 * 60 * 8 
      ); 

     Console.WriteLine(capability.ToJwt()); 
    } } 

class PolicyUrlUtils { 
    const string taskRouterBaseUrl = "https://taskrouter.twilio.com"; 
    const string taskRouterVersion = "v1"; 

    readonly string _workspaceSid; 
    readonly string _taskQueueSid; 

    public PolicyUrlUtils(string workspaceSid, string taskQueueSid) 
    { 
     _workspaceSid = workspaceSid; 
     _taskQueueSid = taskQueueSid; 
    } 

    public string TaskQueue => $"{Workspace}/TaskQueue/{_taskQueueSid}"; 

    string Workspace => 
     $"{taskRouterBaseUrl}/{taskRouterVersion}/Workspaces/{_workspaceSid}"; 

}

Cela me donne une exception sur la dernière ligne (capability.ToJwt()). Exception est:

System.NullReferenceException occurred 
    HResult=0x80004003 
    Message=Object reference not set to an instance of an object. 
    Source=<Cannot evaluate the exception source> 
    StackTrace: 
    at Twilio.Jwt.Taskrouter.TaskRouterCapability.get_Claims() 
    at Twilio.Jwt.BaseJwt.ToJwt() 
    at DeleteMe.Program.Main(String[] args) in D:\Projects\DeleteMe\DeleteMe\Program.cs:line 46 

Maintenant, je regardais le code source de TaskRouterCapability à twilio-csharp github, et semble être la file d'attente sid doit être passé comme paramètre de canal. Lorsque je fais cela, le jeton est créé. Alors je pris le jeton généré ici, et le mettre dans ce fichier HTML:

<html> 
<head> 
    <script type="text/javascript" src="https://media.twiliocdn.com/taskrouter/js/v1.11/taskrouter.min.js"></script> 
    <script type="text/javascript"> 
     var taskQueue = new Twilio.TaskRouter.TaskQueue("token generated by console application"); 

     taskQueue.on("ready", function (taskQueue) { 
      console.log(taskQueue.sid)    // 'WQxxx' 
      console.log(taskQueue.friendlyName)  // 'Simple FIFO Queue' 
      console.log(taskQueue.targetWorkers)  // '1==1' 
      console.log(taskQueue.maxReservedWorkers) // 20 
     }); 
    </script> 
</head> 
<body> 

</body> 

Cela me donne alors des messages dans la console:

taskrouter.min.js: 1 Websocket ouvert: WSS://event-bridge.twilio.com/v1/wschannels/ACxxxxxxxxxxxxxx/WQxxxxxxxx?token=eyJh ..... & closeExistingSessions = false taskrouter.min.js: 1 a reçu un message de type [connecté] taskrouter.min. js: 1 POST https://event-bridge.twilio.com/v1/wschannels/ACxxxxxxxxx/WQxxxxxxxxxxx 403 (Les stratégies sont définies de telle sorte que nous ne pouvons pas accéder à la ressource donnée)

L'événement connecté est appelé, mais l'événement prêt ne se produit jamais.

+0

Pouvez-vous partager le code que vous utilisez maintenant pour générer le jeton de capacité qui renvoie cette erreur? – philnash

+0

Avoir ajouté du code au problème. – Shailesh

Répondre

0

tours dehors il y a 2 erreurs dans l'échantillon:

  1. Le paramètre de canal du constructeur TaskRouterCapability doit être passé le Sid TaskQueue plutôt que nul. Une valeur de null provoque une exception System.NullReferenceException s'est produite HResult = 0x80004003 Message = La référence d'objet n'est pas définie sur une instance d'un objet. Source = StackTrace: à Twilio.Jwt.Taskrouter.TaskRouterCapability.get_Claims() à Twilio.Jwt.BaseJwt.ToJwt()

  2. Il y a une faute de frappe dans la propriété TaskQueue de PolicyUrlUtils. L'URL doit avoir lieu de TaskQueue vos files d'attente

ont présenté une demande de tirage pour la même https://github.com/TwilioDevEd/api-snippets/pull/539