2017-01-20 2 views
0

Ich habe an einer Fähigkeit gearbeitet, bei der ich Login mit Amazon Accountverknüpfung verwende, damit ich die E-Mail-Adresse und den Namen des Benutzers für meine Fertigkeit nutzen kann. Ich mache etwas, das dem scoreKeeper-Beispiel ähnlich ist, indem ich die eventHandlers.js und die storage.js zum Speichern von Elementen in einer Datenbank verwende. Im eventHandlers.onLaunch bekomme ich erfolgreich den Profilnamen und E-Mail-Adresse von Amazon und ich spare es den session.attributes wie folgt aus:Alexa Skills Kit, Probleme beim Erhalten der Sitzungsattribute, um bestehen zu bleiben

 var profile = JSON.parse(body); 
       speechOutput="Hello, " + profile.name.split(" ")[0] + "."; 
       var sessionAttributes = {}; 
       sessionAttributes = { name: profile.name, email: profile.email }; 
       session.attributes = sessionAttributes; 
       console.log("Name in session:", session.attributes.name); 

Die Konsolenprotokoll zeigt den Namen, so weiß ich es in gespeichert wird Die session.attributes, aber wenn ich versuche, auf die session.attributes in meiner storage.js oder intentHandlers.js zuzugreifen, zeigt es, dass es leer ist. Was vermisse ich? Danke im Voraus. Das hat mich verrückt gemacht.

Antwort

0

Ich habe diese Arbeit von Sitzung zu den Rückruf der response.ask Funktion hinzufügen, wie folgt aus:

ask: function (speechOutput, repromptSpeech, _session) { 
     this._context.succeed(buildSpeechletResponse({ 
      session: _session, 
      output: speechOutput, 
      reprompt: repromptSpeech, 
      shouldEndSession: false 
     })); 
    }, 

Es Sitzung hatte: this._session die Sitzung für das Speichern, aber das schien nicht zu arbeite für mich. Es als Variable übergeben hat.

0

Angenommen, Sie wollen von den Benutzerstadtnamen erhalten und in der Lage, diesen Wertes für den Zugriff auf später in der Alexa-Sitzung:

1) vordefinieren Ihr Schlüssel/Wert-Paare in der JSON-Antwort:

def build_response(session_attributes, speechlet_response): 
return { 
    'version': '1.0', 
    'sessionAttributes': { 
     "session_attributes": { 
      'NameOfCity': city_name, 
     } 
}, 
    'response': speechlet_response 
} 

2) Im globalen Bereich, erklären die Variable als eine leere Zeichenfolge:

city_name = "", 

3) Jedes Mal, wenn Sie diese Variable innerhalb einer Funktion aktualisieren, stellen Sie sicher, dass variab Referenz le als global. Zum Beispiel:

def set_city_name_in_session(intent, session): 

card_title = intent['name'] 
session_attributes = {} 
should_end_session = False 

if 'CityIntent' in intent['slots']: 
    global city_name 
    city_name = intent['slots']['CityIntent']['value'] 

4) Wenn Sie eine Funktion erstellen, die diese Variable zugreifen muss, dann die globale Variable als Argument in die Funktion übergeben, in der Funktion, setzen alle Sitzungsschlüssel/Paar Werte wie folgt:

Um zu testen, geben Sie Beispieläußerungen in Service Simulator ein und überprüfen Sie dann, ob Werte in Ihrer Lambda JSON-Antwort bestehen bleiben.

Verwandte Themen