2017-08-02 2 views
0

Ich möchte eine Lotterie Fähigkeit erstellen, die 6 Zahlen vom Benutzer nimmt. Ich lerne gerade, indem ich die Beispiele und Entwicklerhandbücher durchführe, und ich kann die Anleitungen durchgehen und eine Arbeitsfertigkeit erhalten, die eine Eingabe benötigt und dann die Sitzung beendet. Aber ich glaube, ich muss irgendwie einen Dialog schaffen, wo ich stecken bleibe.Geben Sie eine Liste von Zahlen zu Alexa

Vom Design her, würde ich den Dialog so gehen wie: Alexa: Bitte geben Sie die ersten Zahl Benutzer: 1 Alexa: und jetzt die zweiten ... Benutzer: 2 etc etc

Aber ich denke, es wäre in Ordnung sein, wenn es so ging: Alexa: Bitte rufen 6 Zahlen Benutzer: 1, 2, 3, 4, 5, 6.

Ist das überhaupt möglich? Muss ich einen benutzerdefinierten Slot-Typ namens "Numbers" erstellen und dann die Zahlen eingeben, zB 1-50 oder was auch immer das Limit ist?

Im besten Fall kann ich es derzeit um eine Nummer bitten, also ist es wirklich die Dialoginteraktion, auf der ich feststecke. Hat jemand jemals so etwas getan?

Danke.

Antwort

1

Ja zu beiden Fragen. Sie können eine Antwort mit 6 verschiedenen benutzerdefinierten Slots kombinieren. "Benutzer: Meine Nummern sind {num1}, {num2}, {num3}, {num4}, {num5}, {num6}" und machen sie alle erforderlich mit den Fähigkeiten Beta-Entwickler. Es wird jedoch eine ziemlich schlechte Benutzererfahrung sein, wenn der Benutzer seine Antwort nicht angemessen formuliert und Alexa Folgefragen stellen muss, um jede Nummer zu erhalten. Das letzte Problem, auf das Sie stoßen werden, ist, dass, während ein benutzerdefinierter Slot so definiert werden könnte, dass er die Nummern 1-50 enthält, alexa im Allgemeinen ähnliche Werte wie in einem benutzerdefinierten Slot erkennt, wie beispielsweise Zahlen von 50-99. Es wäre dann an Ihnen, zu überprüfen, ob die Werte, die Sie erhalten, zwischen 1 und 50 liegen. Wenn nicht, würden Sie den Benutzer bitten, eine andere Nummer im entsprechenden Bereich anzugeben.

Fazit: Sie möchten individuelle Interaktionen haben, bei denen ein Benutzer jeweils eine einzelne Nummer bereitstellt.

Alexa:"you will be prompted for 6 numbers between 1 and 50 please state them one at a time. Choose your first number." 
User:"50" 
Alexa:"Your First number is 50, Next number."... 

Sie können dies mit einer einzigen Absicht implementieren. Nennen wir diese Absicht GetNumberIntent. GetNumberIntent wird entlang der Linie der

Probe uterances haben
{number} 
pick {number} 
choose {number} 

wo {Nummer} ein Slot Typ Brauch ist oder einfach AMAZON.NUMBER. Es liegt dann an Ihnen zu überprüfen, ob die Zahl zwischen 1 und 50 liegt.

Ich programmiere in Node.js mit dem SDK. Ihre Implementierung kann je nach Sprachauswahl variieren.

Was ich tun würde, ist 6 verschiedene State-Handler zu definieren. Jeder Handler sollte den GetNumberIntent haben. Wenn ein GetNumberIntent zurückgegeben wird, wenn der Slot-Wert entsprechend ist, speichern Sie den Wert für die Sitzungsdaten und/oder Dynamob und fahren Sie mit dem nächsten Status fort. Wenn der Schlitzwert zum Beispiel im Zustand „NumberInputFiveStateHandlers“ ungültig Aufenthalt, bis ein guter Wert dann Zustandes in dem nächsten „NumberInputSixStateHandlers“

var NumberInputFiveStateHandlers = Alexa.CreateStateHandler(states.NUMFIVEMODE, { 
    'NewSession': function() { 
     this.emit('NewSession'); // Uses the handler in newSessionHandlers 
    }, 
    //Primary Intents 
    'GetNumberIntent': function() { 
     let message = ` `; 
     let reprompt = ` `; 
     let slotValue = this.event.request.intent.slots.number.value; 
     if(parseInt(slotValue) >= 1 && parseInt(slotValue) <= 50){ 
      this.handler.state = states.NUMSIXMODE; 
      this.attributes['NUMBERFIVE'] = this.event.request.intent.slots.number.value; 
      message = ` Your fifth number is `+slotValue+`. please select your sixth value. `; 
      reprompt = ` please select your sixth value. `; 
     }else{ 
      message = ` The number `+slotValue)+` is not in the desired range between 1 and 50. please select a valid fifth number. `; 
      reprompt = ` please select your fifth value. `; 
     } 
     this.emit(':ask',message,reprompt); 
    }, 
    //Help Intents 
    "InformationIntent": function() { 
     console.log("INFORMATION"); 
     var message = ` You've been asked to choose a lottery number between 1 and 50. Please say your selection.`; 
     this.emit(':ask', message, message); 
    }, 
    "AMAZON.StopIntent": function() { 
     console.log("STOPINTENT"); 
     this.emit(':tell', "Goodbye!"); 
    }, 
    "AMAZON.CancelIntent": function() { 
     console.log("CANCELINTENT"); 
     this.emit(':tell', "Goodbye!"); 
    }, 
    'AMAZON.HelpIntent': function() { 
     var message = `You're playing lottery. you'll be picking six numbers to play the game. For help with your current situation say Information. otherwise you may exit the game by saying quit.`; 
     this.emit(':ask', message, message); 
    }, 
    //Unhandled 
    'Unhandled': function() { 
     console.log("UNHANDLED"); 
     var reprompt = ' That was not an appropriate response. Please say a number between 1 and 50.'; 
     this.emit(':ask', reprompt, reprompt); 
    } 
}); 

Diese Änderung empfangen wird, ist ein Beispiel für die fünfte Anfrage. Sie haben 6 identische Zustände wie diesen, die Rücken an Rücken aneinanderreihen. Schließlich werden Sie mit 6 Sitzungswerten enden.

this.attributes['NUMBERONE'] 
this.attributes['NUMBERTWO'] 
this.attributes['NUMBERTHREE'] 
this.attributes['NUMBERFOUR'] 
this.attributes['NUMBERFIVE'] 
this.attributes['NUMBERSIX'] 

Sie können diese Werte dann für Ihr Spiel verwenden.


Wenn Sie nicht die alexa-sdk verwendet haben, bevor Sie sich erinnern müssen Ihren Zustand Handler registrieren und Ihren Modi zum states Variable hinzufügen.

alexa.registerHandlers(newSessionHandlers, NumberInputOneStateHandlers, ... NumberInputSixStateHandlers); 

var states = { 
    NUMONEMODE: '_NUMONEMODE', 
    ... 
    ... 
    NUMSIXMODE: '_NUMSIXMODE', 
} 

Diese Antwort ist die Grundlagen zur Deckung der Codierung mit Alexas-SDK nicht vorgesehen. Es gibt andere Ressourcen für spezifischere Fragen zu diesem Thema.


Alternativ weil Ihre Absicht identisch ist [GetNumberIntent], können Sie in der Lage sein, mit einem einzigen StateHandler zu erhalten, indem die neuen gültige Zahlen auf ein Array schiebt, bis das Array die gewünschte Länge. Das würde einfach mehr Logik innerhalb des Intent-Handlers und eine Bedingung erfordern, um aus dem Zustand auszubrechen, sobald das Array die Länge 6 hat. Probieren Sie den obigen Code zuerst aus, weil es einfacher ist, die verschiedenen Zustände zu sehen.

+0

Können Sie nicht einfach {Nummer} {Nummer} {Nummer} {Nummer} {Nummer} {Nummer}? Ich habe ähnliche für eine Liste von zufälligen Wörtern verwendet. Und so sendet es nur eine einzige Absicht, sobald der Benutzer 6 Wörter gesagt hat. Dann stellen Sie sicher, dass alle in dem Bereich sind, nach dem Sie suchen. – ialexander

0

Ich mag Calebs Antwort. Darüber hinaus sorgt es für eine bessere Benutzererfahrung, wenn Sie Feedback zu Fehlern geben, z. B. dass die Eingabe keine Nummer ist, und versuchen, an zusätzliche Antworten des Benutzers zu denken, z. B. "Ich weiß nicht" oder "Geben Sie mir eine Beispiel "oder" was kann ich sagen ".

Verwandte Themen