2017-07-12 3 views
0

Je rencontre des difficultés pour tester ma compétence Alexa à l'aide du simulateur de service. Si je définis l'appId, la compétence ne fonctionne pas. Voici le code correspondant:Définition de l'application Alexa à l'aide de Node.js

'use strict'; 
const Alexa = require('alexa-sdk'); 

var APP_ID = "amzn1.ask.skill.[my skill ID]"; 

exports.handler = function(event, context, callback) { 
    var alexa = Alexa.handler(event, context); 
    alexa.appId = APP_ID; 
    alexa.registerHandlers(handlers); 
    alexa.execute(); 
} 

Quand je lance ce code dans le simulateur de service, je reçois la réponse « Le critère d'évaluation à distance ne peut pas être appelé, ou la réponse, il est revenu était invalide. » et les messages d'erreur dans les journaux CloudWatch:

The applicationIds don't match: applicationId and amzn1.ask.skill.[my skill id] 
"errorMessage": "Invalid ApplicationId: amzn1.ask.skill.[my skill id]" 

Si je commenter le réglage de la appId

//alexa.appId = APP_ID 

le simulateur semble renvoyer une réponse valide, mais je vois cet avertissement dans les journaux:

"Warning: Application ID is not set." 

Voici la demande Lambda envoyé par le simulateur:

{ 
    "session": { 
    "sessionId": "SessionId.bb263d3e-2018-4aab-a0df-f945b3a25bf9", 
    "application": { 
     "applicationId": "amzn1.ask.skill.[my skill ID]" 
    }, 
    "attributes": {}, 
    "user": { 
     "userId": "amzn1.ask.account.[accountID]" 
    }, 
    "new": true 
    }, 
    "request": { 
    "type": "LaunchRequest", 
    "requestId": "EdwRequestId.d8b56c7f-63ea-48e8-8816-9b7c036d5816", 
    "locale": "en-US", 
    "timestamp": "2017-07-12T12:06:11Z" 
    }, 
    "version": "1.0" 
} 

Quelques exemples en ligne suggèrent que la propriété appId devrait être app_id:

alexa.APP_ID = APP_ID; 

mais cela ne semble pas être correct. Selon le code source d'alexa-sdk (et en l'essayant quand même), la propriété a besoin d'être appId comme je l'ai implémenté.

Il semblerait que le problème soit davantage lié à la requête json lambda créée par le simulateur Amazon. Pour être clair, c'est le simulateur sur le portail du développeur Amazon Alexa, pas la fonction de test sur l'interface d'événement de test AWS lambda.

La chose étrange est, si je coupe et colle la requête lambda à partir du simulateur Amazon et l'exécute à partir de l'interface de test AWS, cela fonctionne très bien.

Répondre

2

J'ai également eu ce problème ces deux jours. Je crois que c'est leur problème final. J'ai vu ceci sur le forum d'amazon.

Amazon a changé quelque chose le week-end qui affecte la demande JSON reçue par Lambda de la vérification du simulateur et les pauses. Voici deux fils à ce sujet, qui comprennent des solutions de contournement à permettre de travailler:

https://forums.developer.amazon.com/questions/78391/application-id-verification-issue-with-nodejs-and.html

https://forums.developer.amazon.com/questions/78393/my-alexa-skill-is-not-returning-a-lambda-response.html

Jusqu'à présent, il n'y a pas eu de mise à jour d'Amazon, ou même un accusé de réception de la question .

--- GadgetChannel

+1

Oui, cela est le problème. Je ne peux pas croire que ça fait si longtemps. J'ai supposé qu'il y avait quelque chose de mal avec mon code. L'ajout de ce problème a résolu le problème: 'if (event.context && event.context.System.application.applicationId == 'applicationId') { \t événement.context.System.application.applicationId = événement.session.application.applicationId; } ' – LaserCat