0

Zu Demonstrationszwecken sollte ich eine Alexa Skill auf Dialogbasis entwickeln. Alle alexa Antworten sind hart codiert.Alexa Skill - Keep Intent lebendig für den Dialog

Die Vorlage des Berufs ist wie:

Teil 1: Benutzer: Alexa, fragen MySkill {Question1}. Alexa: Hardcodierte Antwort.

Teil 2: Benutzer: Alexa, fragen MySkill {Question2.1} Alexa: Hardcodierte Antwort für Frage2.1. Benutzer: Alexa, fragen Sie MySkill {Qetion2.2} Alexa: Hardcoded Antwort.

Ich konnte Teil 1 erstellen. Aber in Teil 2 habe ich ein paar Probleme. Brauche ich separate Intents für Fragen 2.1 und 2.2. Oder gibt es eine Möglichkeit, die Fähigkeiten am Leben zu erhalten?

Antwort

0

Sieht so aus, als ob Sie Single-Turn-Interaktionen verwenden (d. H. Sie lassen die Sitzung nicht geöffnet, überprüfen Sie shouldEndSessionhttps://www.npmjs.com/package/alexa-app). Unabhängig davon müssen Sie entweder den aktuellen Status im Sitzungsobjekt speichern oder an anderer Stelle speichern (gebunden an das eindeutige request.userId).

Die Verwendung anderer Absichten kann eine andere Lösung sein, aber sie neigt zum Scheitern, wenn Sie ähnliche Äußerungen haben, die fälschlicherweise falsch zugeordnet werden können.

0

Ich gehe zunächst davon aus, dass Sie das Alexa-SDK während Ihrer Entwicklung verwenden. Wenn Sie nicht wissen, dass das ist, benutzen Sie bitte diesen Link finden Sie unter:

https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs

Es gibt mehrere Möglichkeiten, wie Sie Fragen zu Ihrem Geschick in Ihrer Absicht Schema brechen kann. Sie können entweder individuelle Absichten wie "QuestionOneIntent" und "QuestionTwoIntent" oder eine einzelne Absicht "QuestionIntent" sein, wobei die Slot-Werte in diesen Abstimmungen einzelnen Fragen entsprechen. Da der ursprüngliche Beitrag nicht viele Informationen gegeben hat, kann ich nicht sagen, welche Struktur die beste Einstellung wäre.

Es gibt zwei allgemeine Arten von Antworten in der Alexa-SDK. ": tell" wird Alexa dazu bringen, eine Antwort zu geben und sofort in ihren Ruhezustand zurückzukehren (nicht auf Sie zu hören). ": ask" sagt eine Antwort, wartet 8 Sekunden und folgt mit einer wiederholten Nachricht, während Sie darauf warten, dass Sie einen weiteren Befehl geben.

Wie für die Sitzung am Leben in einem Gespräch zu halten, können Sie einfach Ihre Antwort emittieren von

mit
var speechOutput = "This is the answer to Question" 
var speechOutputReprompt = "Do you have any more questions?" 
this.emit(":ask", speechOutput, speechOutputReprompt) 

Dies ermöglicht für die Sitzung geöffnet zu bleiben und der Benutzer weiterhin mehr Fragen stellen. Sie müssen eine weitere Absicht festlegen, die die Sitzung schließt, wenn Sie mit "Nein" antworten und die Variable "sentEndSession" auf "true" setzen. Hier ist ein Beispiel, wie ich den Code strukturieren könnte:

"QuestionIntent": function(){ 
var responseName = "" 
var slots = this.event.request.intent.slots 
for (var slot in slots){ 
    if(slots[slot].value != undefined){ 
     responseName = slots[slot].name; 
     switch(responseName){ 
      case "QuestionOneIntent": 
       var QuestionOneAnswer = "Answer to question one"; 
       this.emit(":tell", QuestionOneAnswer); 
       break; 
      case "QuestionTwoIntent": 
       var QuestionTwoAnswer = "Answer to question two"; 
       this.emit(":ask", QuestionTwoAnswer, QuestionTwoAnswerReprompt); 
       break; 
      default: 
       console.log("error"); 
       break; 
     } 
    } 
} 
} 
Verwandte Themen