Report State

Report State は、 Home アクションは、検出ルールの最新の状態をプロアクティブに報告します。 ユーザーのデバイスが Google Home Graph に復帰するまでの時間を QUERY インテント。

Report State は、ユーザー デバイスの状態を Google に報告します。 指定された agentUserId が関連付けられている(元の SYNC リクエストなど)。Google Assistant さんが操作をリクエストしたとき デバイスの現在の状態を理解する必要があるため、 代わりに Home Graph の状態情報を使用する QUERY インテントを発行する前に、さまざまなサードパーティ クラウドに EXECUTE インテント。

Report State を使用せずに、複数のプロバイダの照明が 「OK Google, リビングルームを明るくして」というコマンドを使用するには、 複数のクラウドに送信された複数の QUERY インテントを解決する 検出された現在の輝度値に基づいて現在の明るさの値を あります。最高のユーザーエクスペリエンスのために Assistant にはデバイスの現在の状態が必要です。 デバイスへのラウンドトリップは不要です

デバイスに対する最初の SYNC の後で、プラットフォームは QUERY インテントを送信します。 このメソッドは、Home Graph にデータを入力するデバイスの状態を収集します。 その時点以降、Home Graph はその時点の状態のみを保存します。 Report State で送信されました。

Report State を呼び出す際は、 特定のトレイトの状態データを保持します。Home Graph は、 そのトレイトのデータがすべて上書きされる Report State が呼び出されます。たとえば StartStop トレイトの状態、ペイロード isRunningisPaused の両方の値を含める必要があります。

始める

Report State を実装する手順は次のとおりです。

Google HomeGraph API を有効にする

  1. Google Cloud Console で、[HomeGraph API] ページに移動します。

    [HomeGraph API] ページに移動
  2. smart home プロジェクト ID と一致するプロジェクトを選択します。
  3. [有効にする] をクリックします。

サービス アカウント キーを作成する

Google Cloud Console からサービス アカウント キーを生成する手順は次のとおりです。

: 以下の手順を行う場合は、正しい GCP プロジェクトこれは、smart home プロジェクト ID と一致するプロジェクトです。
  1. Google Cloud Console で、[サービス アカウント キーの作成] ページに移動します。

    [サービス アカウント キーの作成] ページに移動
  2. [サービス アカウント] リストから [新しいサービス アカウント] を選択します。
  3. [サービス アカウント名] フィールドに名前を入力します。
  4. [サービス アカウント ID] フィールドに ID を入力します。
  5. [ロール] リストから、[サービス アカウント] > [サービス アカウント トークン作成者] を選択します。

  6. [キーのタイプ] として [JSON] を選択します。

  7. [作成] をクリックするとキーが含まれている JSON ファイルがパソコンにダウンロードされます。

API を呼び出す

以下のタブから選択してください。

HTTP

Home GraphHTTP エンドポイントを提供します。

  1. ダウンロードしたサービス アカウントの JSON ファイルを使用して、JSON ウェブトークン(JWT)を作成します。詳細については、サービス アカウントを使用した認証をご覧ください。
  2. oauth2l を使用し、https://www.googleapis.com/auth/homegraph スコープを指定して OAuth 2.0 アクセス トークンを取得します。
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId を使用して JSON リクエストを作成します。 次に Report State と Notification の JSON リクエストの例を示します。
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. Google ホームグラフ エンドポイントに送信する HTTP POST リクエストに、Report State JSON、Notification JSON、アクセス トークンを含めます。次の例では、テストとして curl を使用してコマンドラインでリクエストを行う方法を示します。
  7. curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d @request-body.json \
      "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
    

gRPC

Home GraphgRPC エンドポイントを提供します。

  1. HomeGraph API 用のプロトコル バッファ サービス定義を取得します。
  2. gRPC デベロッパー向けドキュメントに沿って、サポートされている言語のうちいずれかのクライアント スタブを生成します。
  3. ReportStateAndNotification メソッドを呼び出します。

Node.js

Google API Node.js クライアントは、Home Graph API のバインディングを提供します。

  1. アプリケーションのデフォルト認証情報を使用して、google.homegraph サービスを初期化します。
  2. ReportStateAndNotificationRequest を使用して reportStateAndNotification メソッドを呼び出します。ReportStateAndNotificationResponsePromise が返されます。
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.reportStateAndNotification({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    requestId: 'PLACEHOLDER-REQUEST-ID',
    payload: {
      devices: {
        states: {
          "PLACEHOLDER-DEVICE-ID": {
            on: true
          }
        }
      }
    }
  }
});
    

Java

Java 用 HomeGraph API クライアント ライブラリは、HomeGraph API 用のバインディングを提供します。

  1. アプリケーションのデフォルト認証情報を使用して HomeGraphApiService を初期化します。
  2. ReportStateAndNotificationRequest を使用して reportStateAndNotification メソッドを呼び出します。ReportStateAndNotificationResponse が返されます。
  // Get Application Default credentials.
  GoogleCredentials credentials =
      GoogleCredentials.getApplicationDefault()
          .createScoped(List.of("https://www.googleapis.com/auth/homegraph"));

  // Create Home Graph service client.
  HomeGraphService homegraphService =
      new HomeGraphService.Builder(
              GoogleNetHttpTransport.newTrustedTransport(),
              GsonFactory.getDefaultInstance(),
              new HttpCredentialsAdapter(credentials))
          .setApplicationName("HomeGraphExample/1.0")
          .build();

  // Build device state payload.
  Map<?, ?> states = Map.of("on", true);

  // Report device state.
  ReportStateAndNotificationRequest request =
      new ReportStateAndNotificationRequest()
          .setRequestId("PLACEHOLDER-REQUEST-ID")
          .setAgentUserId("PLACEHOLDER-USER-ID")
          .setPayload(
              new StateAndNotificationPayload()
                  .setDevices(
                      new ReportStateAndNotificationDevice()
                          .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states))));
  homegraphService.devices().reportStateAndNotification(request);
}
    

Report State をテストする

<ph type="x-smartling-placeholder"></ph>
このタスクに推奨されるツール

アクションの認定を準備するには、テストが重要になります。 Report State

そのためには、Home Graph ビューア ツール ダウンロードやデプロイが不要なスタンドアロンのウェブアプリです。

Report State ダッシュボードは引き続き使用できますが、 サポートを終了しました

Report State ダッシュボード

前提条件

アクションをテストするには、サービス アカウント キーと agentUserId が必要です。すでにサービス アカウント キーがあり、 agentUserId は、Report State をデプロイするをご覧ください。 ダッシュボードをご覧ください。

Report State ダッシュボードをデプロイする

プロジェクトのサービス アカウント キーとエージェント ユーザー ID を取得したら、 から最新バージョンをダウンロードして Report State ダッシュボードをご覧ください。 最新バージョンをダウンロードしたら、 README.MD ファイルが含まれています。

Report State ダッシュボードをデプロイしたら、以下にアクセスします。 次の URL からアクセスできます(your_project_id を プロジェクト ID ):

http://<your-project-id>.appspot.com

ダッシュボードで、以下の手順を行います。

  • アカウントキー ファイルを選択する
  • agentUserId を追加する

次に、[List](リスト)をクリックします。

すべてのデバイスが一覧表示されます。一覧が表示されると、[Refresh](更新)ボタンを使用してデバイスのステータスを更新できます。デバイスのステータスが変化した場合、その行は緑色でハイライト表示されます。

エラー レスポンス

呼び出しの際に次のいずれかのエラー レスポンスが返されることがあります。 Report State。これらのレスポンスは、HTTP ステータスの形式で あります。

  • 400 Bad Request - サーバーは処理できませんでした。 無効な構文が原因でクライアントから送信されたリクエスト。一般的な原因 不正な形式の JSON が含まれているか、"" ではなく null を使用している使用します。
  • 404 Not Found - リクエストされたリソースを 今後利用可能になる可能性もあります。通常これは はリクエストされたデバイスが見つかりません。また、ユーザー アカウントが が Google にリンクされていないか、無効な agentUserId を受け取りました。必ず agentUserIdSYNC レスポンスを DISCONNECT インテントを処理する。