2017-07-11 4 views
0

J'écris une fonction Lambda qui obtient des données d'une API pour une compétence Alexa, mais je veux rendre les résultats plus spécifiques en utilisant le type de fente AMAZON.DATE intégré d'Amazon . Par exemple, renvoyer uniquement des événements pour une date spécifique.Renvoyer les données de l'API en fonction de la date/type d'emplacement Amazon

Fonction:

switch(event.request.intent.name) { 
    case "GetTodaysPerfs": 
    var endpoint = "http://services-app.lincolncenter.org/api/v1/event?dateFrom=2017-06-11T04%3A00%3A00.0Z&dateTo=2017-06-12T04%3A00%3A00.0Z" 
    var body = "" 
    http.get(endpoint, (response) => { 
     response.on('data', (chunk) => { body += chunk }) 
     response.on('end',() => { 
     var data = JSON.parse(body) 
     var perfs = data.data[0].show.title 
     context.succeed(
      generateResponse(
      buildSpeechletResponse(`The following performances are on today: ${perfs}`, true), 
      {} 
     ) 
     ) 
     }) 
    }) 
    break; 

    default: 
    throw "Invalid intent" 
} 

je peux obtenir des résultats plus précis en spécifiant manuellement une plage de dates dans l'URL du point final, mais de toute évidence, ce n'est pas idéal car il est pas dynamique.

Je suis nouveau à travailler avec les API, mais j'ai quelques idées:

  1. Contstruct l'URL de point final à la volée en utilisant AMAZON.DATE

  2. boucle à travers les objets data et filtre sur la base data.dateRange pour chaque événement

pour de meilleures performances, je me penche vers la première depuis la defaul Les données sont très grandes. Quelle serait la meilleure solution pour moi et comment pourrais-je y parvenir?

S'il vous plaît laissez-moi savoir si je peux fournir plus d'informations utiles.

Merci!

Répondre

1

Si vous souhaitez laisser l'utilisateur spécifier la date, incluez un emplacement pour la date dans l'intention. Comme vous l'avez identifié, cet emplacement sera de type AMAZON.DATE.

Ensuite, dans votre gestionnaire d'intention, vérifiez que l'emplacement contient des données valides et utilisez-les dans votre demande. Reportez-vous au document Alexa (par exemple, this link) pour plus d'informations sur les emplacements (cela ressemble à ce que vous avez déjà lu) et recherchez l'exemple d'emplacement alexa (par exemple this link) pour obtenir de l'aide sur le code pour accéder à l'emplacement Les données.

On dirait que vous êtes sur la bonne voie avec la 1ère approche.

+0

Merci! Ceci est vraiment utile. J'essaye juste d'accéder aux données de fente, mais ne peux pas sembler. J'ai essayé de définir 'var todaySlot = this.request.intent.slots.Today.value' au-dessus de ma variable' data', mais elle n'a pas retourné la date. A-t-il besoin de sa propre fonction? –