5

これは簡単なことかもしれませんが、数日でわかりませんでした。Alexa(Amazon Echo)会話スキル - セッション属性(JavaScript - AWS Lambda)を使用

私はAlexaに会話をしたいと思っています。

>> Alexa、start testSkill。

A:テストスキルが開始されました。番号を教えてください。

>> 1。

A:さて、色を教えてください。

>>ブルー。

A:最後に、動物の名前を教えてください。

>>鶏。

A:あなたは私に青と鶏を教えました。

JSONが保持しているインテント間で情報を転送するスキルのセッション属性を処理する必要があることがわかりました。

私はこのような関数を使用します。

function testConversation(intent, session, callback) { 

    var cardTitle = intent.name; 
    var repromptText = ""; 
    var sessionAttributes = { // I don't know how to handle this 
     nameOfPairOne: "", 
     nameOfPairTwo: "", 
    }; 
    var shouldEndSession = false; 
    var speechOutput = ""; 

    var color= convertToASCII(intent.slots.color.value); 
    sessionAttributes.nameOfPairOne = color; 

    speechOutput = "You said "+sessionAttributes.nameOfPairOne+". Please say another thing. "; 
    callback(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession)); 
} 

function testConversation2(intent, session, callback) { 

    var cardTitle = intent.name; 
    var repromptText = ""; 
    var sessionAttributes = session.attributes; 
    var shouldEndSession = false; 
    var speechOutput = ""; 

    var number = convertToASCII(intent.slots.number.value); 
    sessionAttributes.nameOfPairTwo = number; 

    speechOutput = "You first said "+sessionAttributes.nameOfPairOne+", and now said "+sessionAttributes.nameOfPairTwo; 
    callback(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession)); 
} 

//------Helpers that build all of the responses ---------// 
function buildSpeechletResponse(title, output, repromptText, shouldEndSession) { 
    return { 
     outputSpeech: {type: "PlainText", text: output}, 
     card: {type: "Simple", title: "SessionSpeechlet - " + title, content: "SessionSpeechlet - " + output}, 
     reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, 
     shouldEndSession: shouldEndSession 
    }; 
} 


function buildResponse(sessionAttributes, speechletResponse) { 
    return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}; 
} 

上記の関数を呼び出すonIntent()関数のコードを示します。 (私は間違っているが正しい方法を理解できなかったことを知っています)

else if ("getColorNum" == intentName) { 
    if (session.attributes.nameOfPairOne === "") { 
     testConversation(intent, session, callback); 
    } else { 
     testConversation2(intent, session, callback); 
    } 
} 

インテントスキーマJSONはそうです。

"intents": [ 
{ 
    "intent": "getColorNum", 
    "slots": [ 
    { 
     "name": "Color", 
     "type": "ColorSlot" 
    }, 
    { 
     "name": "Number", 
     "type": "NumberSlot" 
    } 
    ] 
} 

] }

だから、私は間違ったことのすべてをやっていますか?間違いはどこですか?そして、私は言及したように会話をどのように構築できますか?ありがとう。

+0

Soooは誰かがこれに答えることを望みます。その間、同様の質問の私の研究はこれを助けたかもしれません:http://lovemyecho.com/wp-content/uploads/2015/07/SessionAttributesInJavascript.pdf – brianfit

答えて

2

誰もあなたにまだ答えをくれていないので、私はあなたに私の2セントを与えると思いました。私の選択した言語はPythonですが、私はあなたにいくつかの高度なアイデアを与えることができます。

  • セッションオブジェクトを使用して、会話に関連するすべての情報を記録します。 "レスポンス"を計算した後、セッションオブジェクトをセッションjsonにシリアル化し、次のインテントリクエストでデシリアライズします。
  • 会話状態を維持し、あなたがどこにいるのか、与えられたインテントと特定の会話状態で実行するコールバックを知るために、有限状態機械アプローチを使用します。
  • 可能な限り会話ロジックをASKインターフェイスから切り離します。ローカルで実行できるテストを作成してみてください。

あなたは、私はこれらの実装方法を確認したい場合は、チェックアウト:

+0

あなたの答え、btw私に感謝私usind alexa-sdk npmモジュールで問題を見つけました –

1

これをアプローチにはいくつかの方法は何の複雑さに応じて、ありますあなたは保管しようとしています。

まず、スロットを使用します。 One、blue、chickenなどが分類されたカテゴリにある場合、それらをスロットに格納してJSONの方法でアクセスし、値を取得してJavaScriptコードの変数に格納できます。 例(須藤):スキルが終了した後

var something1 = event.request.intent.slots.assetName.value; 
var something2 = event.request.intent.slots.assetName.value; 
buildSpeechletResponse(`my ${something1} likes ${something2} and blah blah blah`) 

第二には、何かを保存し、実行時に遅れてそれを使用する属性を使用して、アレクサはこれを覚えていないだろう。 例:

'BreakfastIntent': function() { 
    var restaurant = randomArrayElement(getRestaurantsByMeal('breakfast')); 
    this.attributes['restaurant'] = restaurant.name; 

    var say = 'For breakfast, try this, ' + restaurant.name + '. Would you like to hear more?'; 
    this.response.speak(say).listen(say); 
    this.emit(':responseReady'); 
}, 

最終、データベースに格納、強くお勧めします一つはDynamoDBので、Alexaのスキルキットからダイナモを格納し、アクセスのためのチュートリアルがたくさんあります。チェックアウト:https://github.com/alexa/alexa-cookbook/tree/master/aws/Amazon-DynamoDB/read

これが役立ちます。

関連する問題