ServiceAlexa開発者フォーラムAlexaデザインガイドAlexaスキルマーケティングガイドラインイベントゲートウェイにイベントを送信する﻿イベントゲートウェイにイベントを送信するAlexaに応答する場合、Alexaイベントゲートウェイに応答することができます。このドキュメントでは、メッセージのコンテンツと送信先について説明します。成功エラーメッセージをテストするフェーズのテストとツールイベントの応答性イベントのエンドポイント、Lambda関数、ユーザー認証情報ChangeReport、非同期の応答、プロアクティブな検出イベントをAlexaに送信する場合、スマートホームスキルが利用できる地域に合ったイベントエンドポイントと通信する必要があります。以下は、エンドポイントとその地域のリストです。北米:https://api.amazonalexa.com/v3/eventsヨーロッパ:https://api.eu.amazonalexa.com/v3/events極東:https://api.fe.amazonalexa.com/v3/events以下の要件を満たす必要があります。スキルが権限を必要とする地域ごとにLambdaを指定します。開発者コンソールのスキルのビルドページで地域を選択して、Lambdaを有効にします。選択した地域ごとにARNを指定します。地域ごとにユーザー認証情報を取得し保存します。地域固有のLambda関数に対するAcceptGrantリクエストを受信した場合、同じLambdaがアクセスできるようにその認証情報を保存します。Lambda関数と同じ地域のエンドポイントと、その地域のユーザーに代わって通信します。米国と英国で変更レポートイベントを送信するスキルを提供する場合、北米とヨーロッパの両方にLambdaを設定する必要があります。米国のユーザーに対するAcceptGrantリクエストは、スキルの北米のLambdaに送信されます。LWAを使った認可フローを完了してそのユーザーのトークンを保存し、スキルの北米のLambdaからエンドポイントにアクセスできるようにします。そのユーザーのイベントをhttps://api.amazonalexa.com/v3/eventsに送信します。英国のユーザーの場合、AcceptGrantをヨーロッパ向けに設定されたLambdaに送信してトークンを保存し、ヨーロッパのエンドポイントにイベントを送信します。ユーザーが地域間を移動する場合、ユーザーはスキルの再有効化と再リンクを行い、ユーザー情報の保存先を変更する必要があります。以下の図は、ユーザーを認証し、ユーザーの代わりにAlexaイベントゲートウェイにメッセージを送信するプロセスを示しています。北米やヨーロッパなどの地域と、地域に関連付けられたエンドポイントのマッピング情報は、Lambda関数とは別にテーブルや静的なコンフィギュレーションファイルに保存してください。すれば、変更があった場合にもこの情報を簡単に更新できます。次の表では、Alexaイベントゲートウェイに送信できるシナリオとメッセージの種類のいくつかを示しています。POSTメッセージを適切なAlexaイベントゲートウェイに送信することでAlexaに伝えます。エンドポイントのリストは、Alexaイベントのエンドポイントを参照してください。メッセージには以下が含まれます。ベアラートークンを含む認可ヘッダー。ベアラートークンはメッセージのscopeプロパティにも含まれます。コンテンツタイプを含むContent-Typeヘッダー。コンテンツタイプにはJSONを指定します。JSON形式のメッセージ本文。本文には、メッセージの目的に応じて以下のいずれかを含めることができます。ResponseChangeReportStateReportAddOrUpdateReportDeleteReport以下の2つの識別情報を含むendpointオブジェクト。デバイスを識別するendpointId。このIDはデバイスの検出中に指定します。Alexaでユーザーを認証するベアラートークン。ユーザーを関連付けるトークンを取得するプロセスの詳細は、アクセス権限を設定してAlexaへのユーザー認証を実現するとAlexa.Authorizationを参照してください。イベントゲートウェイへのメッセージの例を次に示します。Accepted応答か、エラーのいずれかを受信します。受信する可能性のある応答、注釈、エラーの解決方法を以下に示します。リクエストは認可され、メッセージは構文的に有効なイベントでした。イベントは受け付けられ、論理的な検証と処理に進みます。エラーエラー応答を受信したら、ペイロードのcodeフィールドを取得して、エラーの原因を判断する必要があります。ペイロードにはdescriptionフィールドも含まれますが、このフィールドはログ目的のみに使用し、ビジネスロジックには使用しないでください。以下の表は、受信する可能性のあるHTTP応答のタイプ、関連するエラーコード、エラー解決のヒントを表しています。メッセージは有効ではありません。原因としては、必須フィールドがない、値が正しくない、正しいJSON形式ではないことが考えられます。ドキュメントでメッセージをチェックして、イベントにすべての必須フィールドが含まれていることを確認してください。非同期応答の例、変更レポートの例、検証スキーマを参照してください。指定されたアクセストークンが有効ではありません。トークンの期限が切れているか、形式が正しくない可能性があります。トークンを更新して、リクエストを再試行してください。イベントを正しい地域のエンドポイントに送信していることを確認してください。北米のイベントは北米のエンドポイントに送信する必要があります。イベントを正しいエンドポイントに送信しているのにエラーが解消されない場合、このユーザーがスキルを無効にしている可能性があります。ユーザーの認可が取り消されたため、これらについての変更レポートの送信を停止できるということです。トークンに必要な権限がありません。スキルにAlexaイベントを送信する権限があることを確認してください。非同期メッセージ認証のステップを参照してください。このトークンに関連付けられたスキルIDが見つかりませんでした。このエラーは、スキルが認定中など公開中でない状態にあるときにユーザーのアクセストークンが生成された場合に発生します。このユーザーでスキルの無効化と有効化を行ってみてください。イベントペイロードが大きすぎます。1回のリクエストで許容されるエンドポイントの最大数は300です。少ないペイロードでリクエストを送信してください。リクエスト数が多すぎます。メッセージを最大3回再送します。再送の間隔は、少なくとも1秒以上空けます。Alexaでエラーが発生したため、メッセージを処理できませんでした。メッセージを最大3回再送します。再送の間隔は、少なくとも1秒以上空けます。問題が解消されない場合、Amazonサポートに問い合わせてください。Alexaがメッセージを受け付けられませんでした。メッセージを最大3回再送します。再送の間隔は、少なくとも1秒以上空けます。問題が解消されない場合、Amazonサポートに問い合わせてください。400エラーの例です。}}メッセージをテストするAlexaイベントゲートウェイに送信されるイベントによってAlexaアプリでの表示に影響を与えるため、Alexaに送信するイベントの形式が正しいこと、正しい認証情報が含まれていることを確認してください。メッセージの形式が正しくない場合、エンドポイントで拒否される可能性があります。AlexaスマートホームGitHubリポジトリで提供されているリソースを使用して、単体テストとテストスクリプトを作成し、送信する前にメッセージを検証してください。フェーズのテストとツールプロアクティブな送信更新(ChangeReportイベント)を送信している開発者向けのツールが提供されており、プロアクティブな状態更新が正確に行われるかどうかに関わる問題を特定できます。ツールの詳細については、スマートホームスキルのデバッグを参照してください。イベントの応答性ディレクティブを受信したら、同期的な応答を送信するか、ディレクティブを受信したことを表すDeferredResponseを送信し、その後で非同期のイベントをAlexaエンドポイントに送信します。どちらの場合も、Alexaがタイムアウトするまでの時間は8秒です。8秒のタイムアウトの例外は、以下のとおりです。低速ロックに設定し、想定されるResponseの遅延の秒数をDeferredResponseのestimatedDeferralInSecondsに指定します。