Alexa Conversationsのリクエストと応答のリファレンス
• (GA)
en-US
• (Beta)
en-AU
, en-CA
, en-IN
, en-GB
, de-DE
, ja-JP
, es-ES
, es-US
Alexa Conversationsで、Alexaがスキルとやり取りするために使用するJSONリクエストと応答は、カスタムスキルのJSONインターフェースのリファレンスに記載されている形式とほぼ同じですが、若干の違いがあります。
リクエストの形式
Alexa Conversationsのリクエストとカスタムスキルのリクエストの唯一の違いは、Alexa Conversationsの場合、リクエストオブジェクトはDialog.API.Invoked
タイプで、apiRequest
オブジェクトが含まれていることです。
リクエスト本文の構文
{
"version": "1.0",
"session": {},
"context": {},
"request": {
"type": "Dialog.API.Invoked",
"requestId": "...",
"timestamp": "...",
"locale": "...",
"apiRequest" : {
"name" : "サンプルAPI名",
"arguments" : {
...
},
"slots": {
...
}
}
}
}
フィールド | 説明 | 型 |
---|---|---|
|
リクエストのタイプです。Alexa Conversationsの場合、値は |
文字列 |
|
特定のリクエストの一意のIDです。 |
文字列 |
|
Alexaがリクエストを送信した日時を表す文字列(ISO 8601形式)です。スキルをウェブサービスとしてホスティングしているときに、リクエストを検証するために使用されます(リプレイ攻撃を防ぐため)。詳細については、タイムスタンプを参照してください。 |
文字列 |
|
ユーザーのロケールを示す文字列です。例: |
文字列 |
|
呼び出されたAPIの名前です。 |
文字列 |
|
プレーンなデータオブジェクトとしてAPIリクエストのペイロードを含むオブジェクトです。詳細については、 |
オブジェクト |
|
指定されたAPIリクエスト引数の解決とその値を含むオブジェクトです。詳細については、 |
オブジェクト |
arguments
オブジェクト
arguments
オブジェクトは、プレーンなリクエストデータオブジェクトです。これには次のルールがあります。
arguments
オブジェクトには、APIが使用する各スロットタイプのプリミティブ値が含まれます。arguments
オブジェクトは、API定義で定義されているのと同じ構造に従います。- 値のデータ型は、使用するスロットタイプによって異なります。
- Alexa Conversationsが発話値を関連するスロットタイプ形式に解決できない場合、そのスロットの引数値は設定されません。たとえば、スロットタイプ
AMAZON.NUMBER
のスロットSlotA
に対してユーザーが「神戸」と言った場合、「神戸」は数値に解決できないため、arguments
オブジェクトにはSlotA
の値は含まれません。slots
オブジェクトのSlotA
の値は、未解決の文字列値「神戸」になります。
slots
オブジェクト
apiRequest.slots
オブジェクト内の値を送信する場合、発話値の既存のスロットおよびエンティティ解決のルールがあれば、Alexa Conversationsはそれに従います。slots
オブジェクトには、スロット値とそれに対応する解決が含まれます。
slots
オブジェクトの値は、次のルールに基づいています。
- すべての単純なスロットにスロット値があります。
slotsオブジェクトの解決は、次のルールに基づいています。
- 現在、Alexa Conversationsは複雑なスロットやリストスロットの解決をサポートしていないため、これらのタイプのスロットにはエンティティ解決は存在しません。
AMAZON.DATE
やAMAZON.TIME
など、数値や日付などのデータタイプに変換するスロットタイプには、エンティティ解決は存在しません。- Alexa Conversationsは、他のカスタムスキルと同じスロットタイプの拡張ルールに従います。詳細については、スロットタイプを拡張するを参照してください。
- エンティティ解決は、スロットタイプが単純で、かつ発話の場合にのみ
slots
オブジェクトに存在します。
例1
次の例は、テストに使用できる完全なDialog.API.Invoke
リクエストです。
{
"version": "1.0",
"session": {
"new": false,
"sessionId": "amzn1.echo-api.session.12345678",
"application": {
"applicationId": "amzn1.ask.skill.12345678"
},
"attributes": {},
"user": {
"userId": "amzn1.ask.account.testUser"
}
},
"context": {},
"request": {
"type": "Dialog.API.Invoked",
"requestId": "amzn1.echo-api.request.1234",
"timestamp": "2021-05-25T21:06:28Z",
"locale": "ja-JP",
"apiRequest": {
"name": “PlaceholderAPI”,
"arguments": {
"argument1": "テスト"
}
}
}
}
例2
この例では、スキルAPIには次のスキーマがあります。
// API schema
{
"apiName": "BookMovieTicket",
"arguments": {
"movie" : {
"type" : "Movie"
},
"partySize" : {
"type" : "AMAZON.NUMBER"
},
"preferredShowTimes" : {
"type" : "List<AMAZON.TIME>"
},
"preferredTheaters": {
"type": "List<Theater>"
}
},
"returns": {
"type" : "BookingResult"
}
}
この場合、スキルに対するDialog.API.Invoked
リクエストは次のようになります。
{
"version" : "1.0",
"session" : {
"attributes" : {},
..
},
"context" : {},
"request" : {
// 標準 フィールド
"type" : "Dialog.API.Invoked",
"requestId" : "...",
"timestamp" : "..",
"locale" : "..",
// Alexa Conversations固有
"apiRequest" : {
"name" : "BookMovieTicket", // API 名
"arguments" : {
"movie" : "サンプル映画名", // カスタムスロットタイプ(映画)
"partySize" : 4, // AMAZON.NUMBER
"preferredShowTimes": [ // List<AMAZON.TIME>
"12:00",
"16:00",
"21:00"
],
"preferredTheaters": [ // カスタムスロットタイプのリスト(映画館)
{
"name": "myValue",
"address": "myValue"
}
]
},
// スロットは単純な場合に値を持ちます
// スロットタイプと値は発話されます
"slots": {
"movie": {
"type": "Simple",
"value": “サンプル映画名”,
"resolutions": { .. }
},
"partySize": {
"type": "Simple",
"value": "4"
}
}
}
}
}
応答の形式
Alexa Conversationsの場合、response
オブジェクトにはapiResponse
オブジェクトまたはDialog.DelegateRequest
ディレクティブのどちらか一方を含めることができます。apiResponse
オブジェクトを使用した応答のスキーマは次のとおりです。
{
"version" : "1.0",
"sessionAttributes": {},
"response" : {
"apiResponse" : {
"key1": "value1",
"key2": {},
"key3": []
},
"shouldEndSession": true|false|null
}
}
応答本文の構文
フィールド | 説明 | 型 | 必須 |
---|---|---|---|
|
応答のバージョン指定子です。値は |
文字列 |
◯ |
|
ユーザーに対して何を出力するかと現在のセッションを終了するかどうかを定義する応答オブジェクトです。 |
オブジェクト |
◯ |
|
API応答エンティティオブジェクトと、ビルド時にスキルによって定義された値です。 |
|
◯ |
|
Alexaが応答を発話した後に何が起こるかを表すブール値です。
|
ブール値 |
✕ |
例
次の例は、apiResponse
オブジェクトを含む応答を示しています。
例1
{
"version" : "1.0",
"sessionAttributes": {},
"response" : {
"apiResponse" : {
“movieShows”: [
{
"movieId" : "movie-1",
“availableSeats” : 4,
“movieTime” : "12:00"
},
{
"movieId" : "movie-2",
“availableSeats” : 2,
“movieTime” : "16:00"
}
]
},
"shouldEndSession": false
}
}
例2
{
"version" : "1.0",
"sessionAttributes": {},
"response" : {
"apiResponse" : {
"orderStatus" : "submitted",
"pickupOrDelivery" : "pickup",
"toppings": [
"オリーブ", "ピーマン", "パイナップル"
],
"orderTime": "14:00"
},
"shouldEndSession": false
}
}
応答の処理
apiResponse
オブジェクトで返せるディレクティブは、Dialog.DelegateRequest
ディレクティブのみです。これにより、ダイアログ管理をスキルにデリゲートし、標準のカスタムスキル応答を返すことができます。次のターンでは、リクエストはスキルに送信されます。Alexa Conversationsでダイアログを処理する場合は、Alexa Conversationsにデリゲートする必要があります。
Dialog.API.Invoked
に応答を返すときは、次のルールに従います。
- Alexa Conversationsモデルでダイアログの次のアクションの予測を継続するには、
apiResponse
オブジェクトを返します。 - ダイアログ管理のコントロールをスキルに転送するには、
Dialog.DelegateRequest
ディレクティブを返します。 Dialog.API.Invoked
リクエストに応答を返すときは、応答オブジェクトでapiResponse
オブジェクトまたはDialog.DelegateRequest
ディレクティブのどちらか一方のみを返す必要があります。apiResponse
オブジェクトとDialog.DelegateRequest
ディレクティブの両方を返すことはできません。sessionAttributes
オブジェクトでデータを設定できます。sessionAttributes
オブジェクトは、応答のJSONエンベロープ内の応答オブジェクトの外側にあります。apiResponse
オブジェクトは、呼び出されたAPIのスキーマと一致する必要があります。apiResponse
オブジェクトの値は、使用しているスロットタイプの形式と一致する必要があります。たとえば、AMAZON.DATE
(ユーザーの発話を数値や日付などのデータタイプに変換するスロットタイプ)に値を返す場合、その値は2020-01-01
のようなAMAZON.DATE
形式である必要があります。同様に、カタログベースのスロットの場合は、任意の文字列値を返すことができます。
次の例は、通常のAPI応答を返します。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"apiResponse": {
"orderStatus": "submitted",
"pickupOrDelivery": "pickup",
...
}
}
}
ダイアログ中にディレクティブやその他の応答オブジェクトが必要な場合は、まずスキルに再度デリゲートする必要があります。
次の応答は、ダイアログ管理をスキルにデリゲートします。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"directives":[
{
"type":"Dialog.DelegateRequest",
..
}
]
}
}
次に、レンダリングする応答を次のように返します。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"directives":[
{
"type":"AudioPlayer.Play",
..
}
]
}
}
完了したら、次のように同じDialog.DelegateRequest
ディレクティブを使用して、コントロールをAlexa Conversationsに戻すことができます。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"directives":[
{
"type":"Dialog.DelegateRequest",
"target" : "AMAZON.Conversations",
"period": {
"until": "EXPLICIT_RETURN"
},
"updatedRequest": {..}
..
}
]
}
}
関連トピック
最終更新日: 2022 年 01 月 14 日