web-dev-qa-db-ja.com

Alexaスキルインテント応答の確認「はい」または「いいえ」を取得して使用する方法

起動時にDo you want to perform something ?を尋ねるAlexaスキルを開発しています
ユーザーの返信に応じて'yes'または'no'別のインテントを起動したい。

var handlers = {
  'LaunchRequest': function () {
    let Prompt = this.t("ASK_FOR_SOMETHING");
    let reprompt = this.t("LAUNCH_REPROMPT");
    this.response.speak(this.t("WELCOME_MSG") + ' ' + Prompt).listen(reprompt);
    this.emit(':responseReady');
  },
  "SomethingIntent": function () {
    //Launch this intent if the user's response is 'yes'
  }
};

dialog modelを確認しましたが、目的にかなうようです。しかし、私はそれを実装する方法がわかりません。

7
AkshayM

スキルから探していることを実行する最も簡単な方法は、スキルからAmazon.YesIntentAmazon.NoIntentを処理することです(これらもインタラクションモデルに追加してください)。

var handlers = {
  'LaunchRequest': function () {
    let Prompt = this.t("ASK_FOR_SOMETHING");
    let reprompt = this.t("LAUNCH_REPROMPT");
    this.response.speak(this.t("WELCOME_MSG") + ' ' + Prompt).listen(reprompt);
    this.emit(':responseReady');
  },
  "Amazon.YesIntent": function () { 
    // raise the `SomethingIntent` event, to pass control to the "SomethingIntent" handler below 
    this.emit('SomethingIntent');
  },
  "Amazon.NoIntent": function () {
    // handle the case when user says No
    this.emit(':responseReady');
  }
  "SomethingIntent": function () {
    // handle the "Something" intent here
  }
};

より複雑なスキルでは、ユーザーが「何かをする」かどうかに関する質問に答えて「はい」の意図を送信したことを理解するために、いくつかの状態を保存する必要がある場合があることに注意してください。 セッションオブジェクト のスキルセッション属性を使用して、この状態を保存できます。例えば:

var handlers = {
  'LaunchRequest': function () {
    let Prompt = this.t("ASK_FOR_SOMETHING");
    let reprompt = this.t("LAUNCH_REPROMPT");
    this.response.speak(this.t("WELCOME_MSG") + ' ' + Prompt).listen(reprompt);
    this.attributes.PromptForSomething = true;
    this.emit(':responseReady');
  },
  "Amazon.YesIntent": function () { 
    if (this.attributes.PromptForSomething === true) {
      // raise the `SomethingIntent` event, to pass control to the "SomethingIntent" handler below 
      this.emit('SomethingIntent');
    } else {
      // user replied Yes in another context.. handle it some other way
      //  .. TODO ..
      this.emit(':responseReady');
    }
  },
  "Amazon.NoIntent": function () {
    // handle the case when user says No
    this.emit(':responseReady');
  }
  "SomethingIntent": function () {
    // handle the "Something" intent here
    //  .. TODO ..
  }
};

最後に、質問でほのめかしたように Dialog Interface を使用することも検討できますが、実行しようとしているのが、起動要求からのプロンプトとして単純なはい/いいえの確認を取得することだけである場合は、上記の私の例は、実装するのが非常に簡単だと思います。

7
Mike Dinescu