スマートホームに関するよくある質問

一般

Q: Actions on Google のフルフィルメント インフラストラクチャは、どこで、どの言語で実装すればよいですか?

A: 最新の SSL(TLS)と OAuth 2.0 をサポートしている限り、任意のプラットフォームと任意の言語でインフラストラクチャを実装できます。信頼性を向上させ、実際のユーザー デバイスで実行するまでのレイテンシを減らすために、残りのインフラストラクチャのできるだけ近くにデプロイすることをおすすめします。


Q: デバイス ID は一意である必要がありますか?

A: ID は一意である必要があります。サービス全体で一意の ID がない場合は、少なくともユーザーレベルで一意である必要があります。ユーザーが複数の家を持ち、両方の家が同じユーザーに統合されているとします。ある家で照明を点灯するようにリクエストしても、別の家で同じ ID の照明を点灯することはできません。


Q: デバイス名は一意である必要がありますか?

A: 名前は一意である必要はありませんが、将来的には、ユーザー エクスペリエンスを向上させるために、セットアップ後に不適切な名前を修正することが推奨されます。

以下に簡単な命名ガイドを示します。

  • 実際に呼ばれている名前を使ってください。
  • 文字列の一部を認識するため、「acme color light」を持っていると、「acme light」にも応答します。
  • 製品のわかりやすい名前と、1 つ以上のユーザー定義の名前の両方をおすすめします。
  • ユーザーはライトに部屋名を付ける必要はありません。そのために部屋があるのです。部屋ごとに一意の名前を付ける必要がありますが、すべてを指定するのに複数形を使用できます(たとえば、オフィスの燭台にある 2 つの電球が「north light」と「east light」の場合、単に「lights」として指定できます)。

Q: デバイスの状態はどのくらいの頻度で更新されますか?

A: エフェメラル状態は、ユーザーが開始したアクションである QUERY または EXECUTE で取得されます。ユーザーが「ライトは点灯していますか?」と尋ねたり、ライトを明るくしたりしたい場合は、現在の状態を確認するためにクエリを実行する必要があります。


Q: ホームグラフをデバイスの現在の状態で直接更新することは可能ですか?

回答: はい。Report State API 呼び出しを使用してください。


アカウント リンクと OAuth

A: はい。ユーザーのデバイスをプロバイダのクラウド サービスに接続するには、アカウント リンクが必要です。


Q: OAuth の場合、15.213 時間ごとにアクセス トークンを期限切れにしますが、問題ないですか?

A: はい。ただし、有効期限(10 ~ 20 分など)を短くしてテストしてください。 OAuth クライアントは必要に応じてトークンを更新します。有効期限を短くしてテストすると、正しく動作していることが証明されます。


インテント

Q: SYNC はいつ発生しますか?

A: SYNC は、OAuth が完了した直後と、Request Sync 呼び出しが行われた後に発生します。


Q: SYNC が動作しないのはなぜですか?

A: 動作しない原因はいくつかあります。

  • 間違った種類のデバイスを送信している。

    • たとえば、action.devices.types.LIGHT が必要なのに、action.devices.types.Light を送信しています。
  • サポートされていない種類のデバイスを送信しています。

    • たとえば、action.devices.types.FLASHLIGHT を送信しますが、これは Google ではサポートされていません。
  • 無効なフィールドまたはサポートされていないフィールドを送信しています。

    • たとえば、バージョン フィールドなど、仕様にないフィールドがある場合。
  • SYNC レスポンスに他の形式上の問題があります。

    • かっこを確認してください。
  • アカウント リンクで問題が発生している。

    • 受信した SYNC リクエストの Auth ヘッダーのアクセス トークンが有効であることを確認してください。
  • SYNC リクエストへの応答に時間がかかりすぎている。

    • SYNC リクエストに対して 5 秒以内に応答していることを確認してください。

Q: 「保留中」のレスポンスは問題ありませんか?

A: デバイスがリアルタイムで使用可能な場合は、保留状態ではなく、成功/失敗のレスポンスを強くおすすめします。「保留」のレスポンスが必要な場合はお問い合わせください。低電力の非リアルタイム デバイスでは、保留レスポンスと非同期実行モデルが必要になる場合があります。


テストと送信

Q: ステージング環境を設定できますか?

A: はい。別のプロジェクトを作成し、そのプロジェクトのセットアップを実行してください。開発プロセスとインフラストラクチャにマッピングするために必要なだけのプロジェクトを作成できます。


Q: ドラフト プロジェクトはどのくらいの頻度で更新する必要がありますか?

A: ドラフト プロジェクトは 3 日ごとに更新する必要があります。3 日後に、テスト エージェントは mobile-HomeControl の設定に表示されなくなります。その場合は、Actions on Google Console でプロジェクトの [ドラフトをテスト] ボタンをクリックします。


Q: 一度に複数のデバイスでテストできますか?

A: Actions on Google は、一度に 1 つの「デバイスで試す」AP のみをサポートします。最初に「ap1」でドラフトのテストを使用してデバイスを同期すると、ap1 のリンクを解除せずに「ap2」の「ドラフトをテストする」を直接実行すると、「ap1」は mobile-HomeControl-settings に表示されなくなります。これを修正するには、再度「ap1」で下書きのテストを実行し、設定で「ap1」のリンクを解除します。

この単一のアクション パッケージを、すべての Google Assistant デバイスでユーザーに利用できます。たとえば、新しいハードウェア統合は、音声認識スピーカーと Android の両方でテストできます。


Q: 名前や発音が原因で、提出したアクション プロジェクトが不承認になりました。何を変更する必要がありますか?

A: 名前の発音をチェックして、発音名が今後別のアクションによって取得されないようにし、表示名と一致していることを確認します(将来の名前登録に影響する不一致を防ぐため)。

同じ名前を引き続き使用するには、サポートに連絡して、音声チームが表示名を Assistant に追加するよう依頼してください。


Q: Google Home アプリの [スマートホーム] セクションに自分のアクションが表示されません。何が起こっていますか?

A: 問題は以下のいずれかが考えられます。

  • Actions Console でプロジェクトの [ドラフトをテスト] ボタンをクリックしなかった。
  • Test-on-Device で一度に実行できるアクションは 1 つだけです。
  • Actions Console で、アクション プロジェクトの [Simulator] タブに移動し、[Active/Inactive] 切り替えを [Inactive] にしてから [Active] に切り替えます。
  • すでに共有されているアクションの場合は、すべての共有手順に従っていることを確認してください。
  • Test-on-Device は 3 日後に期限切れになります。Actions Console で、プロジェクトの [TEST DRAFT] ボタンをクリックします。

Q: シミュレータで「<my agent name> と話したい」と入力するとエラーが発生するのはなぜですか?

A: スマートホーム アクションは呼び出し名を使用しません。シミュレータでテストするには、Google Home app (GHA) がインストールされている Android または iOS スマートフォンでアカウントのリンクを実行する必要があります。また、アカウント リンクを実行する前に、アカウントにデバイスを関連付けておく必要があります。


Q: シミュレータを使用しようとするとエラーが発生するのはなぜですか?

A: デプロイされた smart home アクションをシミュレータを使用してテストすることはできません。本番環境のスマートホーム プロジェクトでシミュレータを使用する場合は、テスト用に新しいプロジェクトを作成する必要があります。


Report State

Q: Report State を実装するための前提条件はありますか?

A: プロジェクトは、Smart Home API を使用し、OAuth2 をサポートする必要があります。また、報告する状態を持つトレイトが必要です。


Q: どの程度の頻度でデバイスに Report State を実行する必要がありますか?

A: Google は遷移と終了状態に関心がありますが、短時間に多くの状態変化がある場合(たとえば、ユーザーが 1 分間に 3 回、冷蔵庫の開閉や調光器のスライドをする場合)最終状態の報告だけが必要です。


Q: Report State 呼び出しを行うときに完全なデバイス状態を送信する必要がありますか?

A: 部分的な状態更新はサポートされていないため、Report State の呼び出しには、更新された特定のトレイトのすべてのデータを常に含める必要があります。2 つのトレイトで不整合が生じる場合は、まとめて報告する必要があります。


Q: Google は、状態を取得するためにデバイスにクエリすること(デバイスのポーリング)はできますか?

A: これは推奨されない代替メカニズムです。フォールバックしてこうしたユーザーのために頻繁にデバイスをポーリングする必要がある場合、どのような追加の負荷がかかるかは保証できません。その必要性は新しいビジュアル サーフェスから来るものです。未知の負荷の問題だけでなく、ユーザー エクスペリエンスの低下につながります。Google は、Report State がプラットフォームにとって非常に重要であると考えています。


Q: 現在どのような特性が Report State をサポートしていますか?

A: 状態が関連付けられているすべてのパブリック トレイトがサポートされています。デバイスのオンライン状態の変化も報告する必要があります。

シーンには状態がありませんが、ただし、デバイスの状態が変わる可能性はあります。Google Home Graph のデバイスの状態が変化した場合は、それを報告する必要があります。


Q: Report State にはタイムスタンプの送信が必要ですか?

回答: タイムスタンプは不要です。最後に送信された状態が、以前の呼び出しをオーバーライドします。


Q: すでに QUERY または EXECUTE、あるいはその両方で状態を送信している場合、個別に Report State を実行する必要がありますか?

A: Home GraphReport State を介して送信された状態のみを保存します。EXECUTE インテントと QUERY インテントへのレスポンスとして返される状態は、ユーザーへの音声レスポンスにのみ使用され、保存されることはありません。そのため、デバイスの新しい状態が EXECUTE または QUERY インテントへのレスポンスとしてすでに返されている場合でも、Report State を呼び出す必要があります。


Q: 指定された期限内に Report State を完全に実装しなかった場合の影響は何ですか?

A: GHA サーフェスやビジュアル サーフェスなどで、ユーザー エクスペリエンスが低下します。これは、多くの QUERY インテントが状態のポーリングのために送信されることを意味し、パートナー クラウドの負荷の増加に対応することは保証できません。


Q: Report State の実装はどのようにテストできますか?

A: ホームグラフ ビューアを使用します。これは、Home Graph に保存されている現在のデバイスの状態を表示するセルフサービス テストツールです。


Q: Report State にランダムな requestId を使用できますか?

回答: Report State が EXECUTE リクエストによってトリガーされた場合は、EXECUTE リクエストから受け取ったものと同じ requestId を使用することをおすすめします。それ以外の場合は、ランダムな requestId を使用できます。


Q: ユーザーが複数のデバイスを持っていて、そのうちの 1 つの状態が変化した場合、すべてのデバイスの最新の状態を報告する必要がありますか?

A: 必要ありません。状態が変化したデバイスについて報告するだけで構いません。


ベスト プラクティス

Q: どの程度のレイテンシなら許容されますか?

回答: 200 ミリ秒未満が理想的です。2 ~ 5 秒で問題ありません。レイテンシが 5 秒ほど経過している場合は、お問い合わせください。


Q: 音声認識スピーカーをオフラインのときに正しく応答させるにはどうすればよいですか?

A: オフライン デバイスのオフライン状態を返します。このエラーについては、TTS として「not available now」が返されます。詳細については、エラーと例外をご覧ください。