組み込みインテントは、アクションが特定のカテゴリのユーザー リクエストを遂行できることを Google アシスタントに伝えるために指定できる一意の識別子です。次に、アシスタントが組み込みインテントを適合させるユーザークエリの例を示します。
- 「ゲームをプレイ」組み込みインテント: 「OK Google,記憶ゲームをする」
- 「星占いを聞く」組み込みインテント: 「OK Google。星占いをチェック」
アシスタントは、アクションの検出中に、アクションに関するメタデータ(指定した組み込みインテントなど)を使用して、アクションをユーザーに推奨できます。会話のラウンドトリップを最小限に抑えるため、アシスタントはユーザークエリからパラメータをスキャンし、アクションに渡します。
アシスタントがサポートする組み込みインテントの完全なリスト(パラメータとユーザークエリの例を含む)を見るには、組み込みインテントのリファレンスをご覧ください。
組み込みインテントの統合
アクションの作成方法に応じて、組み込みインテントを統合する方法が異なります。
Dialogflow
Dialogflow を使用してアクションを作成する場合は、Dialogflow コンソールから組み込みインテントをグラフィカルにアタッチできます。
Dialogflow を使用して組み込みインテントをアタッチするには、次の手順に従います。
- Dialogflow コンソールを開き、エージェントを選択して、[Intents] 画面に移動します。
エージェントが特定の組み込みインテントを受け取ったときにトリガーするインテントを作成または選択します。[イベント] セクションを開き、[イベントを追加] をクリックします。
[Events] フィールドに、エージェントの組み込みインテント イベントの名前を入力します(例:
actions_intent_PLAY_GAME
)。[保存] をクリックします。
Actions SDK
Actions SDK を使用してアクションを作成する場合は、組み込みインテントとアクション パッケージ内のアクションとの間のマッピングを指定する必要があります。
Actions SDK を使用して組み込みインテントをアタッチするには、次の手順に従います。
- アクションの定義の名前フィールドに、組み込みインテントを指定します。
- Actions SDK の概要の説明に従って、
gactions
ツールを使用して、アクション パッケージを Actions プロジェクトにアップロードします。
たとえば、次のスニペットは、CHECK_AIR_QUALITY
組み込みインテントを追加する方法を示しています。
{
"actions":[
{
"description":"Default Welcome Intent",
"name":"MAIN",
"fulfillment":{
"conversationName":"conversation_1"
},
"intent":{
"name":"actions.intent.MAIN"
}
},
{
"description":"Check Air Quality",
"name":"CHECK_AIR_QUALITY",
"fulfillment":{
"conversationName":"conversation_1"
},
"intent":{
"name":"actions.intent.CHECK_AIR_QUALITY"
}
}
],
"conversations":{
"conversation_1":{
"name":"conversation_1",
"url":"https://example.com/fulfillment",
"fulfillmentApiVersion":2
}
}
}
組み込みインテントのパラメータの処理
組み込みインテントを介してアクションが呼び出されると、フルフィルメントは追加のパラメータを受け取る場合があります。インテント スキーマでは、パラメータの名前とそれらの型をプリミティブ型または schema.org エンティティとして定義します。会話型アクションの組み込みインテントのスキーマについては、組み込みインテントのリファレンスをご覧ください。
組み込みインテントのパラメータはオプションです。ユーザーが組み込みインテントを呼び出してからパラメータを抽出できる場合、アシスタントはそれらのパラメータに値を設定します。
たとえば、actions.intent.CHECK_AIR_QUALITY
組み込みインテントのスキーマでは、次の 4 つのオプション パラメータが定義されています。
パラメータ名 | 種類 |
---|---|
attributes |
文字列値 |
location |
schema.org/Place オブジェクト。
|
temporalCoverage |
schema.org/Duration オブジェクト。
|
timeIndicator |
EnumeratedDuration (Google 固有の拡張機能)。 |
次のコード スニペットは、ユーザーが「明日のサンフランシスコの大気質は?」と話しかけてアクションを呼び出した場合の会話 Webhook(JSON)リクエストの例を示しています。
"inputs":[
{
"intent":"actions.intent.CHECK_AIR_QUALITY",
"rawInputs":[
{
"inputType":"VOICE",
"query":"what is the air quality in san francisco tomorrow"
}
],
"arguments":[
{
"name":"location",
"structuredValue":{
"geo":{
"longitude":-122.41941550000001,
"latitude":37.7749295
},
"@context":"https://schema.org",
"@type":"Place",
"name":"san francisco"
}
},
{
"name":"temporalCoverage",
"rawText":"2018-04-25",
"textValue":"2018-04-25"
}
]
}
]
この例では、各パラメータは次の値をとります。
location
パラメータには、「サンフランシスコ」のschema.org/Place
値が含まれます。temporalCoverage
パラメータには、呼び出し時刻を基準とした明日の日付のschema.org/Duration
値が含まれます。- ユーザーの呼び出しフレーズに情報が含まれていないため、
attributes
パラメータとtimeIndicator
パラメータの値はありません。
Node.js 用 Actions on Google クライアント ライブラリを使用する場合は、次のスニペットに示すように、パラメータの値を取得できます。
app.intent('actions.intent.CHECK_AIR_QUALITY', (conv) => {
const attributes = conv.arguments.get('attributes');
const location = conv.arguments.get('location');
const temporal_coverage = conv.arguments.get('temporalCoverage');
Const time_indicator = conv.arguments.get('timeIndicator')
// Your Action logic. If you need to use any of the parameter values,
// you should check first that it is defined. Arguments.get returns
// undefined if it can't find a value for a parameter.
});
組み込みインテントとの統合のテスト
統合をテストするには、次の手順に従います。
- テスト アクションを有効にしてアクション シミュレータを開くか、デバイスでアシスタントを開きます。
- その組み込みインテントに関連付けられているクエリを音声または文字で入力します。たとえば、「ゲームをしたい」と言います。
- 表示されたアプリ選択ダイアログから、該当アクションを見つけます。
- アプリを選択し、アプリにインテントを送信します。
組み込みインテントを使用するためのベスト プラクティス
組み込みインテントを使用する場合は、以下のベスト プラクティスに従います。
- 組み込みインテントを特定のアクションにマッピングする: 特定の組み込みインテントがアクションをトリガーする場合、できるだけ手間をかけずに、ユーザーをアクション内の特定のインテントと機能に誘導します。たとえば、アクションが
PLAY_GAME
組み込みインテントをサポートしていて、そのインテントを受け取った場合、ユーザーをアクションのゲーム機能にすぐに誘導する必要があります。ゲームをプレイしたいかどうかをユーザーに再度尋ねることは避けてください。 - 組み込みインテントのパラメータを処理する: アシスタントがフルフィルメントに送信する組み込みインテント パラメータ値を必ず使用してください。これらの値を入力するように、ユーザーに再度促すことは避けてください。