Request Sync は、指定された agentUserId が関連付けられているデバイス(最初の SYNC リクエストで送信されたもの)を持つすべての Google ユーザーの SYNC リクエストをフルフィルメントに送信します。これにより、ユーザーのアカウントのリンクをいったん解除して再びリンクしなくても、ユーザーのデバイスを更新できます。この識別子にリンクされているすべてのユーザーが
SYNC リクエストを受け取ります。
SYNC リクエストは次の場合にトリガーします。
- ユーザーが新しいデバイスを追加した場合
- ユーザーが既存のデバイスを削除した場合
- ユーザーが既存のデバイスの名前を変更した場合
- 新しいデバイスタイプ、トレイトを実装したか、新しいデバイス機能を追加した場合
使ってみる
Request Sync を実装する方法は次のとおりです。
Google HomeGraph API を有効にする
-
Google Cloud Console[HomeGraph API] ページに移動します。
[HomeGraph API] ページに移動 - smart home プロジェクト ID に一致するプロジェクトを選択します。
- [有効にする] をクリックします。
サービス アカウント キーを作成する
Google Cloud Console からサービス アカウント キーを生成する手順は次のとおりです。
-
Google Cloud Console[**サービス アカウント**] ページに移動します。
[サービス アカウント] ページに移動します。[サービス アカウント] ページに進むには、プロジェクトの選択が必要になることがあります。
[**サービス アカウントを作成**] をクリックします。
[サービス アカウント名] フィールドに名前を入力します。
[サービス アカウント ID] フィールドに ID を入力します。
[サービス アカウントの説明] フィールドに説明を入力します。
[作成して続行] をクリックします。
[**ロール**] プルダウンから、[**サービス アカウント**] > [サービス アカウントの OpenID Connect ID トークン作成者] を選択します。
[続行] をクリックします。
[完了] をクリックします。
サービス アカウントのリストから、作成した上記のサービス アカウントを選択し、 [鍵を管理] を [操作] メニューから選択します。
[鍵を追加] > [新しい鍵を作成] を選択します。
[**キーのタイプ**] として [**JSON**] を選択します。
[作成] をクリックするとキーが含まれている JSON ファイルがパソコンにダウンロードされます。
API を呼び出す
HTTP
HomeGraph API は HTTP エンドポイントを提供します。
- ダウンロードしたサービス アカウントの JSON ファイルを使用して、JSON ウェブトークン(JWT)を作成します。詳細については、サービス アカウントを使用した認証をご覧ください。
- oauth2l を使用し、
https://www.googleapis.com/auth/homegraphスコープを指定して OAuth 2.0 アクセス トークンを取得します。 agentUserIdを使用して JSON リクエストを作成します。 次に、Request Sync に対する JSON リクエストの例を示します。- Request Sync JSON と HTTP POST リクエスト内のトークンを Google ホームグラフ エンドポイントに結合します。次の例では、テストとして
curlを使用してコマンドラインでリクエストを行う方法を示します。
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "user-123" }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:requestSync"
gRPC
HomeGraph API は gRPC エンドポイントを提供します。
- HomeGraph API 用のプロトコル バッファ サービス定義を取得します。
- gRPC デベロッパー向けドキュメントに沿って、サポートされている言語のうちいずれかのクライアント スタブを生成します。
- RequestSync メソッドを呼び出します。
Node.js
Google API Node.js クライアントは、HomeGraph API のバインディングを提供します。
- アプリケーションのデフォルト認証情報を使用して、
google.homegraphサービスを初期化します。 - RequestSyncDevicesRequest を使用して
requestSyncメソッドを呼び出します。RequestSyncDevicesResponse でPromiseが返されます。
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.requestSync({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', async: false } });
Java
Java 用 HomeGraph API クライアント ライブラリは、HomeGraph API 用のバインディングを提供します。
HomeGraphApiServiceを アプリケーションのデフォルト認証情報を使用して初期化します。requestSyncメソッドをRequestSyncDevicesRequestを使用して呼び出します。空の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(); // Request sync. RequestSyncDevicesRequest request = new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false); homegraphService.devices().requestSync(request);
エラー レスポンス
Request Sync を呼び出したとき、次のいずれかのエラー レスポンスが返される場合があります。これらのレスポンスは、HTTP ステータス コードの形で返されます。
400 Bad Request- サーバーがクライアントから送信されたリクエストを 不正な構文のため処理できませんでした。一般的な原因としては、不正な形式の JSON や、文字列値に "" でなくnullを使っていることなどが挙げられます。403 Forbidden- トークンの更新中にエラーが発生したため、サーバーは指定されたagentUserIdのリクエストを処理できませんでした。OAuth エンドポイントが更新トークン リクエストに正しく応答することを確認し、ユーザーのアカウントのリンク ステータスをチェックしてください。404 Not Found- リクエストされたリソースは見つかりませんでしたが、将来使用可能になる可能性があります。このエラーは通常、ユーザー アカウントが Google とリンクしていないか、無効なagentUserIdを受け取ったことを意味します。agentUserIdが SYNC レスポンスで指定された値と一致していること、 DISCONNECT インテントを適切に処理していることを確認してください。429 Too Many Requests- 指定されたagentUserIdに対する同時同期 リクエストが最大数を超えました。asyncフラグが true に設定されていない限り、呼び出し元は同時同期リクエストを 1 つしか発行できません。