Alexaスキルのナビゲーション管理



Alexaスキルのナビゲーション管理

自動車での移動中に車内でスキルを使用できるように、Echo Autoなどのデバイスで使用するAlexaスキルをデザインできます。ユーザーがナビゲーションに対応したAlexa搭載デバイスを所有している場合、スキルでナビゲーション関連の機能を提供できます。自動車スキルの詳細については、自動車運転用Alexaスキルを参照してください。

リクエスト内のNavigationインターフェースの有無

スキルサービスで、ユーザーのAlexa搭載デバイスがナビゲーションに対応しているかどうかを判断できます。スキルに送信されたリクエスト内で、devices.supportedInterfacesオブジェクトにNavigationが含まれているかどうかを確認します。Navigationが存在する場合は、スキルでSetDestinationディレクティブとCancelDestinationディレクティブを使用して、ナビゲーションを管理できます。AudioPlayerの詳細については、AudioPlayerインターフェースのリファレンスを参照してください。位置情報の詳細については、Alexaスキル向け位置情報サービスを参照してください。

deviceオブジェクトの例

"device":
{
  "deviceId": "amzn1.ask.device.",
  "_deviceType": "<文字列>",
  "rawDeviceId": "<文字列>",
  "supportedInterfaces": {
    "AudioPlayer": {},
    "Geolocation": {},
    "Navigation": {}
  }
}

SetDestinationディレクティブ

SetDestinationディレクティブによって、Alexaはユーザーのナビゲーション対応Alexa搭載デバイスで目的地を設定できます。これにより、ユーザーは目的地の場所へのナビゲーションを開始できます。さらに、デバイスに表示機能がある場合は、目的地の場所と共にナビゲーション情報も表示できます。SetDestinationディレクティブを使用するスキルの応答には、目的地に関する特定の位置情報も含まれています。

応答のパラメーターの詳細については、カスタムスキルのJSONインターフェースのリファレンスを参照してください。

outputSpeechcardrepromptが含まれている場合、これらを空にすることはできません。ただし、それぞれを省略することは可能です。

Navigation.SetDestinationの応答の例

{
  "outputSpeech": {<outputSpeechオブジェクト>},
  "card": {<cardオブジェクト>},
  "reprompt": {<repromptオブジェクト>},
  "shouldEndSession": true,
  "directives": [
    {
      "type": "Navigation.SetDestination",
      "destination": {
        "singleLineDisplayAddress": "2121 7th Ave Seattle, WA 98121",
        "multipleLineDisplayAddress": "2121 7th Ave\nSeattle, WA 98121",
        "name": "Example Corp.",
        "coordinate": {
          "latitudeInDegrees": 47.608013,
          "longitudeInDegrees": -122.335167
        }
      },
      "transportationMode": "DRIVING",
      "metadata": {
        "hoursOfOperation": [
          {
            "dayOfWeek": "MONDAY",
            "hours": [
              {
                "open": "12:30:00-8:00",
                "close": "1:00:00-8:00"
              }
            ],
            "status": "OPEN_DURING_HOURS"
          },
          {
            "dayOfWeek": "TUESDAY",
            "hours": [
              {
                "open": "12:30:00-8:00",
                "close": "1:00:00-8:00"
              }
            ],
            "status": "OPEN_DURING_HOURS"
          },
          {
            "dayOfWeek": "WEDNESDAY",
            "hours": [
              {
                "open": "12:30:00-8:00",
                "close": "1:00:00-8:00"
              }
            ],
            "status": "OPEN_DURING_HOURS"
          },
          {
            "dayOfWeek": "THURSDAY",
            "hours": [
              {
                "open": "12:30:00-8:00",
                "close": "1:00:00-8:00"
              }
            ],
            "status": "OPEN_DURING_HOURS"
          },
          {
            "dayOfWeek": "FRIDAY",
            "hours": [
              {
                "open": "12:30:00-8:00",
                "close": "1:00:00-8:00"
              }
            ],
            "status": "OPEN_DURING_HOURS"
          },
          {
            "dayOfWeek": "SATURDAY",
            "status": "CLOSED"
          },
          {
            "dayOfWeek": "SUNDAY",
            "status": "CLOSED"
          }
        ],
        "phoneNumber": "+12065551212"
      }
    }
  ]
}

directives

フィールド名 説明
destination 目的地情報を含むオブジェクトです。
transportationMode 目的地への移動手段を示します。次のいずれかを指定できます。 BIKING(自転車)、DRIVING(自動車)、TRANSIT(公共交通機関)、WALKING(徒歩)。
metadata 目的地に関する情報を含む任意のオブジェクトです。

directives.destination

フィールド名 説明
multipleLineDisplayAddress 複数行の住所です。改行はエスケープシーケンス\nを使用して表されます。
singleLineDisplayAddress 単一行の住所です。
name 目的地の場所の名前です。
coordinate 目的地の場所の地理的座標(緯度、経度)です。
coordinate.latitudeInDegrees 目的地の緯度です。
coordinate.longitudeInDegrees 目的地の経度です。

directives.metadata

metadataオブジェクトは任意です。指定する場合、次の表に示すように、特定のフィールドが必須になることがあります。

フィールド名 説明
phoneNumber 場所の電話番号(E.164形式)です。
hoursOfOperation 曜日ごとの営業時間の情報を含む配列です。指定する場合、このオブジェクトにはdaysOfWeekが含まれている必要があります。statusがnullでない場合、つまり、UNKNOWN(不明)、OPEN_24_HOURS(24時間営業)、CLOSED(休業日)以外の場合は、hoursを指定する必要があります。
hoursOfOperation.daysOfWeek 次のいずれかを指定できます。 MONDAY(月曜日)、TUESDAY(火曜日)、WEDNESDAY(水曜日)、THURSDAY(木曜日)、FRIDAY(金曜日)、SATURDAY(土曜日)、SUNDAY(日曜日)。
hoursOfOperation.hours 営業開始時刻と営業終了時刻を含むオブジェクトです。指定する場合、opencloseの両方が必須です。
hoursOfOperation.hours.open 場所の営業開始時刻です。
hoursOfOperation.hours.close 場所の営業終了時刻です。
hoursOfOperation.status 当日にその場所が営業しているかどうかを示します。次のいずれかを指定できます。 OPEN_DURING_HOURS(通常営業日)、OPEN_24_HOURS(24時間営業)、CLOSED(休業日)、HOLIDAY(祝祭日)、UNKNOWN(不明)。

opencloseの時間帯は、次のようなタイムゾーンを含むISO-8601形式の時刻を使用して表されます。

partial-time = time-hour ":" time-minute ":" time-second ± time-zone-offset

時刻はUTC+オフセットで表されます。このオフセットにより、時刻がその場所のタイムゾーンの標準時の時刻に変換されます(ただし、夏時間は考慮されません)。

statusには、次のオプションを指定できます。

  • OPEN_DURING_HOURS - 場所は列挙されている時間帯に営業しています。
  • OPEN_24_HOURS - 場所は1日中営業しています。時間帯は列挙されません。
  • CLOSED - 場所はその日は休業しています。時間帯は列挙されません。
  • HOLIDAY - 場所の通常の予定が変更される場合がある日です。利用可能なスケジュールと共に「営業時間は変更される場合があります」という注記を表示することをお勧めします。
  • UNKNOWN - 時間帯やその他のステータスが指定されていない場合や、認識できないstatusフィールドが指定されている場合のデフォルトとして使用されます。

hoursOfOperationが指定されているものの、statusUNKNOWNである場合は、ユーザーのAlexa搭載デバイスでは時刻を?で表示して、スケジュールが不確定であることを示す必要があります。

CancelNavigationディレクティブ

スキルサービスでSetNavigationディレクティブを使用してナビゲーションが設定されている場合、ナビゲーション対応Alexa搭載デバイスを所有するスキルユーザーは、音声コマンドでナビゲーションをキャンセルできます。Alexaは、ナビゲーションをキャンセルするユーザーリクエストを受信すると、応答で以下のディレクティブを返します。

CancelNavigationディレクティブの例

{
  "directive": {
    "header": {
      "namespace": "Navigation",
      "name": "CancelNavigation",
      "messageId": "<<(文字列)このメッセージを表す一意のID>>"
    }
  }
}