5

私は、文字列と数字からなる音声入力(a-test12fish)を取るために必要な、ある種の自動化を行うためのAmazon Alexaスキルキットを作成しようとしています。Amazon Alexa Skills Kit(ASK)の混合文字列に数字を入力するには?

私がAlexa Skills Kitでカスタムスロットを使用したとき、数値で文字列を入力することはできません。私はask alexa, dangerZone find a-test12fishでキーにしようとすると、私は次のエラーを取得しています:

Error: Invalid text input. Text should begin with alphabets and should only contain alphabets, whitespaces, periods or apostrophes

は、どのように私はこのエラーを克服することができますか?

+0

こんにちはサティシュ、あなたはまだこの1つを把握しましたか? – Kal

答えて

0

あなたは、ユーザーがどのように値を言うことを意図したものではありませんでした。たとえば、「ダッシュテスト12匹の魚」または「ダッシュの1匹2匹の魚」。いずれの場合でも、認識システムは単語を認識するように設計されており、そのデータは有効な単語ではない。

問題を解決するには、すべての有効な文字値とサンプルの発声が有効な長さをサポートするカスタムスロットタイプを作成して、スペルチェックソリューション(後者の入力)を作成できます。

メッセージを再構成する作業がありますが、それほど複雑ではありません。可能性のある課題は依然として認識者からのものです。私はAlexaのもとでこのシナリオをテストしていませんが、ほとんどの場合、可変長のアルファベット文字列を使用しています。音はあまりにも似ており、一時停止や背景ノイズと誤認される可能性があるいくつかの値があります。典型的な回避策はphonetic alphabetです。

+0

入力いただきありがとうございます、私は "ハイフンテスト1つ2つの魚"として、私はそれが提案として音標的なアルファベットを使用してみて – Sathish

0

異なるアプローチがシステムの制限内で行われます。あなたは別の名前でそれを参照することができます。

「say-for-test12fish」などのプロンプトユーザー。それをあなたの特定の価値に内部的にマッピングします。

-3

あなたの発音スタイルをデザインできるSSMLを使用してください。確認してください。

2

ここに解決策があります。

おそらく、インテント・スキーマでこれを完了したくないかもしれません。代わりに、文字、数字、記号を1つのレスポンスにコンパイルするNode.jsを使用してカスタムモードを作成してみてください。これは、アルファベットの入力モードの私の演出です。注:私はあなたの質問に答えてこれを書いただけで、より大きなスキルでそれをテストしていません。それで私はMODESで大成功を収めましたが、チャンスがあるときは確かに自分のスキルでこれを実装します。

このコードの背後にあるアイデアは、ユーザをNumberIntentLetterIntentSymbolIntent以外のすべてのインテントと、いくつかのヘルプ機能を無視する別のモードにプッシュすることです。ユーザーはすぐにアルファ数値を入力し、完了するとCompletedIntentをアクティブにします。その英数字の値は、スキルの他の場所でも使用できます。 Modesを使用していない場合は、終了時または終了時にLOBBYMODEにリダイレクトされ、スキルの他のインテントに引き続きアクセスできます。

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); 
    } 
}); 
関連する問題