標準インテントを実装する



ビルトインインテントを実装する

Alexa Skills Kitは、ビルトインインテントのライブラリを提供します。ビルトインインテントは、サンプル発話を提供しなくてもカスタムスキルに実装できる共通のアクションのインテントです。

ビルトインインテントの概要

たとえば、ビルトインのAMAZON.HelpIntentは、スキルのヘルプをリクエストする一般的な言い方に自動的にマッピングされます。このインテントの使用を選択すると、ユーザーは「ヘルプ」などと言うことでスキルを呼び出すことができ、AlexaサービスはサービスにAMAZON.HelpIntentIntentRequestを送信します。サービスはこのインテントをスキルに合った方法で処理します。

同様に、ビルトインインテントAMAZON.SearchAction<object@WeatherForecast>は、天気予報を尋ねる共通の方法に自動でマッピングされます。このインテントを実装すると、ユーザーが「神戸の天気は?」と言うことで、AlexaサービスがサービスにAMAZON.SearchAction<object@WeatherForecast>IntentRequestを送信します。このときスロット値には、「神戸」が入ります。

ビルトインインテントが便利な理由はいくつかあります。

  • インテント用にサンプル発話を記述する手間が省けます。
  • ユーザーは、さまざまなスキルに共通で一貫したフレーズを使ってインテントにアクセスできるため、スキルを簡単に使用できます。
  • Alexaサービスの音声認識機能向上やインテントのサンプル発話に更新があった場合にそのメリットを活用できます。

ビルトインインテントライブラリは、以下の一般的なカテゴリーに分類されます。

利用可能なすべてのビルトインインテントのリファレンス全体については、ビルトインインテントライブラリを参照してください。

ビルトインインテントを実装する

ビルトインインテントを実装するには、インテントをインテントスキーマに追加し、インテントの処理をコードに追加する必要があります。

ビルトインインテントの検索

ビルトインインテントは開発者コンソールのビルドページから検索できます。カスタム>対話モデル>インテントの順に移動し、新しいインテントを追加して、Alexaのビルトインライブラリから既存のインテントを使用オプションを選択します。

インテント名を指定する際は、AMAZON名前空間を含めてください。たとえば、以下のスキーマには、2つのカスタムインテントと3つのビルトインインテントが含まれます。ビルトインの以下のセットを、天気予報を取得するスキルで使用します。

  • AMAZON.SearchAction<object@WeatherForecast>
  • AMAZON.CancelIntent
  • AMAZON.HelpIntent
  • AMAZON.StopIntent

この例では、インテントスキーマに上記の4つのビルトインインテントと、WeatherOnThisDayというカスタムインテントが含まれます。

{
  "interactionModel": {
    "languageModel": {
      "invocationName": "天気",
      "intents": [
        {
          "name": "AMAZON.CancelIntent",
          "samples": []
        },
        {
          "name": "AMAZON.HelpIntent",
          "samples": []
        },
        {
          "name": "AMAZON.StopIntent",
          "samples": []
        },
        {
          "name": "AMAZON.SearchAction<object@WeatherForecast>",
          "samples": []
        },
        {
          "name": "WeatherOnThisDay",
          "slots": [
            {
              "name": "PastYear",
              "type": "AMAZON.FOUR_DIGIT_NUMBER"
            }
          ],
          "samples": [
            "{PastYear}の今日の天気を教えて",
            "{PastYear}の天気はどうだった"
          ]
        }
      ],
      "types": []
    }
  }
}

開発者コンソールとSkill Management APIに互換性がある完全なインテントスキーマについては、対話モデルのスキーマを参照してください。

各ビルトインインテントの処理をコードに追加する方法は、カスタムインテントと同様です。スキーマ内のすべてのインテントにハンドラーを含めてください。インテントハンドラーの例は以下の通りです。

たとえば、Alexa Skills Kit SDK for Node.jsを使用している場合は、インテントハンドラーのコードを以下のように記述できます。

var handlers = {
  'WeatherOnThisDay': function () {
      // カスタムのWeatherOnThisDayのコードはここに入ります。
  },
  'AMAZON.SearchAction<object@WeatherForecast>': function () {
      // AMAZON.SearchAction<object@WeatherForecast>ビルトインインテントのハンドラーです。
  },
  'AMAZON.HelpIntent': function () {
      // ビルトインのHelpIntentのハンドラー
  },
  'AMAZON.StopIntent': function () {
      // ビルトインのStopIntentのハンドラー
  },
  'AMAZON.CancelIntent': function () {
      // ビルトインのCancelIntentのハンドラー
  }
};

Javaで以下のようにハンドラーを作成することができます。

@Override
public SpeechletResponse onIntent(final IntentRequest request, final Session session)
        throws SpeechletException {
    log.info("onIntent requestId={}, sessionId={}", request.getRequestId(),
            session.getSessionId());

    Intent intent = request.getIntent();
    String intentName = intent.getName();

    if ("WeatherOnThisDay".equals(intentName)) {
        // WeatherOnThisDayのハンドラー
    } else if ("AMAZON.SearchAction<object@WeatherForecast>".equals(intentName)){
        // ビルトインインテントAMAZON.SearchAction<object@WeatherForecast>のハンドラー
    } else if ("AMAZON.HelpIntent".equals(intentName)) {
        // ビルトインのhelpインテントのハンドラーはこちらです。
    } else if ("AMAZON.StopIntent".equals(intentName)) {
        // ビルトインのstopインテントのハンドラーはこちらです。
    }  else if ("AMAZON.CancelIntent".equals(intentName)) {
        // ビルトインのcancelインテントのハンドラーはこちらです。
    } else {
        throw new SpeechletException("Invalid Intent");
    }
}

Alexaサービスからのリクエストを処理する方法の詳細については、Alexaから送信されたリクエストを処理するを参照してください。

ユーザーは、標準的で共通のフレーズを使用してビルトインインテントをリクエストするため、サービスでもその意図する目的と一貫した方法でインテントを処理する必要があります。たとえば、ヘルプに関連しない他の機能をAMAZON.HelpIntentに追加すると、ヘルプが提供されることを想定して「ヘルプ」、または「何ができるの?」と言ったユーザーは混乱してしまいます。 AMAZON.SearchAction<object@WeatherForecast>などのインテントを含める場合、ユーザーは、インテントハンドラーにより天気情報が提供されるように「天気予報は何ですか」というフレーズを使用できます。

ビルトインインテントの意図する目的とサンプル発話を確認するには、ビルトインインテントライブラリを参照してください。

ビルトインインテントを使用しない場合

ビルトインインテントの実装は推奨ではありますが、任意です。インテントスキーマにビルトインインテントを含めない場合、Alexaサービスは、たとえ通常そのインテントを起動するフレーズを使用したとしても、サービスにそのインテントを送信することは絶対にありません。

これらのフレーズを、サンプル発話の中で独自に作成したカスタムインテントにマッピングすることはできます。たとえば、MyHelpIntentインテントを作成して、以下のようなサンプル発話を記述することができます。

MyHelpIntent ヘルプ
MyHelpIntent 使い方を教えて
MyHelpIntent 何ができますか
...

この場合、サービスは、これらのフレーズがビルトインのAMAZON.HelpIntentと重複していたとしても、MyHelpIntentに対してIntentRequestを受け取ります。

通常、ビルトインインテントのほうが、自身で作成したサンプル発話よりも幅広い範囲を網羅できるため、この方法は推奨されません。代わりに、スキル固有のサンプル発話を追加し、ビルトインインテントを拡張して使用することを検討してください。

サンプル発話を追加してビルトインインテントを拡張する

追加のサンプル発話を追加することで、標準ビルトインインテントを拡張できます。この方法は、スキル固有の発話でインテントを呼び出す際に有効です。

開発者コンソールでビルトインインテントを拡張するには、モデルにビルトインインテントを追加し、カスタムインテントと同じ方法でカスタムサンプル発話を指定します。

  1. 左側のサイドバーから、カスタム>対話モデル>インテントの横の追加をクリックします。
  2. Alexaのビルトインライブラリから既存のインテントを使用オプションを選択します。
  3. ビルトインインテントを見つけてインテントを追加をクリックします。
  4. インテントを追加したら、左側のナビゲーションでそれを選択し、サンプル発話を入力します。

拡張されたインテントのJSONは次のようになります。

{
  "name": "AMAZON.HelpIntent",
  "slots": [],
  "samples": [
    "タクシーの呼び方を教えて",
    "タクシーを呼ぶのを手伝って"
  ]
}

開発者コンソールとSkill Management APIに互換性がある完全なインテントスキーマについては、対話モデルのスキーマを参照してください。

この例では、ユーザーが以下のいずれかを実行した場合には常にAMAZON.HelpIntentが呼び出されます。

  • スキルを呼び出して、ヘルプをリクエストするいずれかの標準的なリクエスト(「ヘルプ」、「使い方を教えて」など)を言った場合
  • スキルを呼び出して、カスタムフレーズのいずれか(「タクシーの呼び方を教えて」または「どうやってタクシーを呼ぶの」)を言った場合

ビルトインインテントへ移行する

Alexa Skills Kitの以前のバージョンでは、これらのビルトインインテントを提供していなかったため、自身でキャンセル、停止、ヘルプのインテントを実装する必要がありました。すでに実装していた場合は、これらのインテントも引き続き動作しますが、今後、発話への改良が行われた場合にもメリットを受けられるようにするには、ビルトインインテントに移行する必要があります。

スキルを移行するには、以下の手順を実行します。

  1. カスタムインテント名をビルトインインテント名に置換してインテントスキーマを更新します。
  2. カスタムインテントのサンプル発話を削除します。ただし、サンプル発話を追加してビルトインインテントを拡張するにあるとおり、スキル固有のサンプル発話は残しておくことができます。
  3. コードのインテントハンドラーをビルトインインテント名で更新します。

利用可能なすべてのビルトインインテント: ビルトインインテントライブラリ

ビルトインインテントの命名構造について: ビルトインインテントライブラリの構造について

インテントと対話モデルについて:

スキルのサービスのエンコーディングについて: Alexaから送信されたリクエストを処理する