6

これは簡単なことかもしれませんが、数日では理解できませんでした。

Alexa に次のような会話をさせたい。

>> アレクサ、testSkill を開始して。

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

>> 一つ。

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

>>ブルー。

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

>>チキン。

A: ブルーとチキンの 1 つだと教えてくれました。

スキルのセッション属性を処理する必要があることがわかりました。これは 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);
    }
}

Intent Schema JSON はそのようなものです。

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

] }

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

4

2 に答える 2

3

まだ誰もあなたに答えを出していないので、私はあなたに私の 2 セントをあげようと思いました。私が選んだ言語は Python ですが、いくつかの高レベルのアイデアを提供できます。

  • セッション オブジェクトを使用して、会話に関連するすべてを追跡します。「応答」を計算したら、セッション オブジェクトをセッション json にシリアル化し、次のインテント リクエストで逆シリアル化します。
  • 会話状態を維持し、有限状態マシン アプローチを使用して、インテントと特定の会話状態が与えられた場合に現在どこにいて、どのコールバックを実行するかを把握します。
  • 会話ロジックを ASK インターフェースからできるだけ切り離してください。ローカルで実行できるテストを作成してみてください。

これらをどのように実装したかを知りたい場合は、以下をチェックしてください。

于 2017-04-10T20:16:27.973 に答える