Frage Wie geben Sie Amazon String Skills Kit (ASK) eine gemischte Zeichenfolge mit Zahlen?


Ich versuche, ein Amazon Alexa Skills Kit zu erstellen, um eine Art von Automatisierung zu ermöglichen, die benötigt wird, um Spracheingabe mit Strings und Zahlen zu machen (a-test12fish).

Wenn ich benutzerdefinierte Slots in Alexa Skills Kit verwendet habe, kann ich keine Strings mit Zahlen eingeben. Wenn ich versuche zu tippen ask alexa, dangerZone find a-test12fishIch erhalte den folgenden Fehler:

Fehler: Ungültige Texteingabe. Text sollte mit Alphabeten beginnen und sollte nur Alphabete, Leerzeichen, Punkte oder Apostrophe enthalten

Wie kann ich diesen Fehler beheben?


5
2018-03-17 13:03


Ursprung


Antworten:


Hier ist eine Lösung.

Sie möchten dies wahrscheinlich nicht im Intent-Schema abschließen. Versuchen Sie stattdessen, einen benutzerdefinierten Modus mit Node.js zu erstellen, der Buchstaben, Zahlen und Symbole zu einer einzigen Antwort kompiliert. Dies ist meine Wiedergabe eines alphanumerischen Eingabemodus. Bitte beachten Sie: Ich habe dies nur als Antwort auf Ihre Frage geschrieben und es nicht in einer größeren Fähigkeit getestet. Damit habe ich großen Erfolg gehabt MODES und werde dies sicherlich in meiner eigenen Fähigkeit umsetzen, wenn ich eine Chance habe.

Die Idee hinter diesem Code ist, dass Sie die Benutzer in einen separaten Modus versetzen, der alle anderen Absichten ignoriert NumberIntent, LetterIntent, SymbolIntentund ein paar Hilfefunktionen. Der Benutzer gibt schnell seinen alphanumerischen Wert ein und aktiviert nach Abschluss den CompletedIntent. Dieser alphanumerische Wert kann dann an anderer Stelle in Ihrer Fähigkeit verwendet werden. Wenn Sie nicht benutzt haben Modes Beachten Sie, dass Sie nach dem Beenden oder Beenden zurück zu LOBBYMODE wo Sie weiterhin auf andere Absichten in Ihrer Fähigkeit zugreifen können.

var lobbyHandlers = Alexa.CreateStateHandler(states.LOBBYMODE, {

    'enterPasswordIntent': function () {
      this.attributes['BUILDPASSWORD'] = '';
      this.handler.state = states.PASSWORDMODE;
      message = ` You will now create a password one letter, number or symbol at a time.  there will be no message after each entry.  simply wait for alexa's ring to become solid blue then stay your next value.  When you are satisfied say complete. Begin now by saying a number, letter, or keyboard symbol. `;
      reprompt = `Please say a number letter or symbol`;
      this.emit(':ask', message, reprompt);
    },

    //Place other useful intents for your Skill here

    'Unhandled': function() {
        console.log("UNHANDLED");
        var reprompt = ` You're kind of in the middle of something.  Say exit to end createing this password.  otherwise say complete if you've stated the whole password.  or repeat to hear the current password you've entered.  `;
        this.emit(':ask', reprompt, reprompt);
    }
});


var buildAlphaNumericPasswordHandlers = Alexa.CreateStateHandler(states.PASSWORDMODE, {
    'numberIntent': function () {// Sample Utterance: ninty nine  AMAZON.NUMBER
      var number = this.event.request.intent.slots.number.value; //I believe this returns a string of digits ex: '999'
      this.attributes['BUILDPASSWORD'] = this.attributes['BUILDPASSWORD'].concat(number);
      message = ``; //No message to make saying the next letter, number or symbol as fluid as possible.
      reprompt = `Please say the next number letter or symbol`;
      this.emit(':ask', message, reprompt);
    },
    'letterIntent': function () {// Sample Utterance: A   -- Custom Slot LETTERS [A, b, c, d, e, ... ]
      var letter = this.event.request.intent.slots.letter.value;
      this.attributes['BUILDPASSWORD'] = this.attributes['BUILDPASSWORD'].concat(letter);
      message = ``; //No message to make saying the next letter, number or symbol as fluid as possible.
      reprompt = `Please say the next number letter or symbol`;
      this.emit(':ask', message, reprompt);
    },
    'symbolIntent': function () {// Sample Utterance: Dash -- Custom Slot SYMBOLS [Pound, Dash, Dollar Sign, At, Exclamation point... ]
      var symbol = this.event.request.intent.slots.symbol.value;

      // Create a dictionary object to map words to symbols ex Dollar Sign => $.  Will need this because you likely cant put $ as a custom slot value. Can also map multiple names to the same value  ex. Dash => Tack = \> "-"
      var singleCharacterSymbol = symbolDict[symbol]; //^^^ Need to create dictionary

      this.attributes['BUILDPASSWORD'] = this.attributes['BUILDPASSWORD'].concat(singleCharacterSymbol);
      message = ``; //No message to make saying the next letter, number or symbol as fluid as possible.
      reprompt = `Please say the next number letter or symbol`;
      this.emit(':ask', message, reprompt);
    },
    'CompleteIntent': function() { //Sample Utterance: Complete
        console.log("COMPLETE");
        this.handler.state = states.LOBBYMODE;
        var reprompt = ` Your entry has been saved, used to execute another function or checked against our database. `;
        this.emit(':ask', reprompt, reprompt);
    },
    'ExitIntent': function() { //Sample Utterance: Exit
        console.log("EXIT");
        this.handler.state = states.LOBBYMODE;
        message = `You have returned to the lobby, continue with the app or say quit to exit.`;
        this.emit(':ask', message, message);
    },
    'RepeatIntent': function() {
        var currentPassword = this.attributes['BUILDPASSWORD'];
        var currentPasswordExploded  =  currentPassword.replace(/(.)(?=.)/g, "$1 "); //insert a space between each character so alexa reads correctly.
        var message = ` Your current entry is as follows. `+currentPasswordExploded;
        var reprompt = `  say complete if you've stated the whole password. Otherwise continue to say numbers letters and symbols. `;
        this.emit(':ask', reprompt, reprompt);
    },
    'Unhandled': function() {
        console.log("UNHANDLED");
        var reprompt = ` You're kind of in the middle of something.  Say exit to end creating this password, say complete if you've stated the whole password, say repeat to hear the current password you've entered, or continue to state letters, numbers and symbols  `;
        this.emit(':ask', reprompt, reprompt);
    }
});

3
2017-08-04 21:14



Sie haben nicht angegeben, wie Sie den Wert des Benutzers angeben wollten. Zum Beispiel "ein Strich Test zwölf Fische" oder "ein Strich das eins zwei f i s h." In jedem Fall ist das Erkennungssystem dazu ausgelegt, Wörter zu erkennen, und diese Daten sind kein gültiges Wort.

Um das Problem zu lösen, könnten Sie versuchen, eine Rechtschreib-Lösung (die letztere Eingabe) zu erstellen, indem Sie einen benutzerdefinierten Slot-Typ mit allen gültigen Zeichenwerten und Beispieläußerungen erstellen, die die gültigen Längen unterstützen.

Sie werden etwas Arbeit haben, um die Nachricht wieder zusammenzusetzen, aber es sollte nicht zu kompliziert sein. Die wahrscheinliche Herausforderung wird immer noch vom Erkenner kommen. Während ich dieses Szenario nicht unter Alexa getestet habe, habe ich die meisten, die ich verwendet habe, ziemlich schlecht mit alphanumerischen Strings variabler Länge gemacht. Die Töne sind einfach zu ähnlich und es gibt mehrere Werte, die leicht mit Pausen und Hintergrundgeräuschen verwechselt werden könnten. Die typische Arbeit ist es, a zu verwenden phonetisches Alphabet.


1
2018-03-18 13:05



Ein anderer Ansatz wäre ein Spiel innerhalb der Systembeschränkung. Sie könnten es mit einem anderen Namen beziehen.

Prompte Benutzer mit "sagen 1 für a-test12fish" und so weiter. Und ordnen Sie es intern Ihrem spezifischen Wert zu.


1
2017-11-23 09:02



Verwenden Sie SSML, wo Sie Ihren eigenen Stil der Aussprache entwerfen können. Bitte überprüfen.


-3
2017-12-16 11:18