あなたのAlexaダッシュボード 設定

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

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

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

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

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

ビルトインインテントが有効な理由をいくつか挙げます。

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

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

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

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

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

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

  • AMAZON.SearchAction<object@WeatherForecast>
  • AMAZON.HelpIntent
  • AMAZON.StopIntent
{
  "intents": [
    {
      "intent": "CustomIntentWithSlots",
      "slots": [
        {
          "name": "day",
          "type": "AMAZON.DATE"
        }
      ]
    },
    {
      "intent": "CustomIntent"
    },
    {
      "intent": "AMAZON.SearchAction<object@WeatherForecast>"
    },
    {
      "intent": "AMAZON.HelpIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    }
  ]
}

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

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

var handlers = {
  'CustomIntent': function () {
      // Code for the custom GetLocationIntent goes here.
  },
  'CustomIntentWithSlots': function () {
      // Code for the custom GetLocationIntent goes here.
  },
  'AMAZON.SearchAction<object@WeatherForecast>': function () {        
      // Handler for the AMAZON.SearchAction<object@WeatherForecast> built-in intent.
  },
  'AMAZON.HelpIntent': function () {    
      // Code for the weather temperature handler goes here
  },
  'AMAZON.StopIntent': function () {
      // Code for the weather condition handler goes here.
  }
};

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 ("CustomIntent".equals(intentName)) {
        // Handling for CustomIntent
    } else if ("CustomIntentWithSlots".equals(intentName)) {
        // Handling for CustomIntentWithSlots        
    } else if ("AMAZON.SearchAction<object@WeatherForecast>".equals(intentName)){
      // Handling for the built-in intent AMAZON.SearchAction<object@WeatherForecast>
    } else if ("AMAZON.HelpIntent".equals(intentName)) {
        // Handling for the built-in help intent goes here
    } else if ("AMAZON.StopIntent".equals(intentName)) {
        // Handling for the built-in stop intent goes here.
    } else {
        throw new SpeechletException("Invalid Intent");
    }
}

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

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

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

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

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

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

MyHelpIntent help
MyHelpIntent help me
MyHelpIntent what can I ask you
...

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

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

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

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

インテントを拡張するには、他のインテントと同じように、フレーズをサンプル発話のそのインテントにマッピングします。例:

AMAZON.HelpIntent help me order a taxi
AMAZON.HelpIntent how do I order a taxi

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

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

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

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

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

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

次のステップ

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

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

コーディングに関するトピック

その他のトピック:

リファレンス: