全般
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: ホームグラフをデバイスの現在の状態で直接更新することは可能ですか?
A: はい。Report State API 呼び出しを使用します。
アカウント リンクと OAuth
Q: アカウント リンクをする必要がありますか?
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 でプロジェクトの [TEST DRAFT] ボタンをクリックしてください。
Q: 一度に複数のデバイスでテストできますか?
A: Actions on Google は一度に 1 つの「try-on-device」AP のみをサポートします。最初に「ap1」で [TEST DRAFT] を使用してデバイスを同期すると、(ap1 のリンクを解除せずに)直接 [TEST DRAFT] の「ap2」を実行すると、「ap1」は mobile-HomeControl-settings に表示されなくなります。これを修正するには、「ap1」で [TEST DRAFT] を再度実行し、設定で「ap1」のリンクを解除できます。
この単一のアクション パッケージは、ユーザーはすべての Google Assistant デバイスで利用でき、たとえば、音声認識スピーカーと Android の両方で新しいハードウェア統合をテストできます。
Q: 名前や発音が原因で、提出したアクション プロジェクトが不承認になりました。何を変更する必要がありますか?
A: Google は、名前の発音をチェックして、発音名が今後別のアクションで使用されていることと、表示名が一致していることを確認します(これは、将来の名前登録に影響する不一致を防ぐためです)。
同じ名前を引き続き使用するには、サポートに連絡して、スピーチチームが Assistant に表示名を追加するよう依頼してください。
Q: Google Home アプリの [スマートホーム] セクションに自分のアクションが表示されません。何が起こっていますか?
A: 問題は以下のいずれかが考えられます。
- Actions Console でプロジェクトの [TEST DRAFT] ボタンをクリックしなかった。
- Test-on-Device で一度に実行できるアクションは 1 つだけです。
- Actions Console で、Actions プロジェクトの [Simulator] タブに移動し、アクティブ/非アクティブ切り替えを [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: これは推奨されない代替メカニズムです。フォールバックして、そのようなユーザーに対して頻繁にデバイスをポーリングする必要がある場合、追加の負荷がいくらになるかは保証できません。その必要性は新しいビジュアル サーフェスから来るものです。未知の負荷の問題だけでなく、ユーザー エクスペリエンスの低下につながります。Report State はプラットフォームにとって重要であると思われます。
Q: 現在どのような特性が Report State をサポートしていますか?
A: 状態に関連付けられたすべての公開トレイトがサポートされます。デバイスのオンライン状態の変化も報告する必要があります。
シーンには状態がありませんが、ただし、デバイスの状態が変わる可能性があります。Google Home Graph のデバイス状態が変化した場合は、これをレポートする必要があります。
Q: Report State にはタイムスタンプの送信が必要ですか?
A: タイムスタンプは不要です。最後に送信された状態が以前の呼び出しをオーバーライドします。
Q: すでに QUERY または EXECUTE、あるいはその両方で状態を送信している場合、個別に Report State を実行する必要がありますか?
A: Home Graph は、Report State を介して送信された状態のみを保存します。EXECUTE インテントと QUERY インテントへのレスポンスとして返される状態は、ユーザーへの音声レスポンスにのみ使用され、保存されません。そのため、デバイスの新しい状態が EXECUTE インテントまたは QUERY インテントへのレスポンスとしてすでに返されている場合でも、Report State を呼び出す必要があります。
Q: 指定された期限内に Report State を完全に実装しなかった場合の影響は何ですか?
A: GHA やビジュアル サーフェスなどで、ユーザー エクスペリエンスが低下します。つまり、多くの QUERY インテントが状態をポーリングするために送信されますが、パートナー クラウドへの追加負荷に対応するかどうかは保証できません。
Q: Report State の実装はどのようにテストできますか?
A: ホームグラフ ビューア(Home Graph に保存されている現在のデバイスの状態を表示するセルフサービスのテストツール)を使用してください。
Q: Report State にランダムな requestId を使用できますか?
A: Report State が EXECUTE リクエストによってトリガーされた場合は、EXECUTE リクエストから受け取ったものと同じ requestId を使用することをおすすめします。それ以外の場合は、ランダムな requestId を使用できます。
Q: ユーザーが複数のデバイスを持っていて、そのうちの 1 つの状態が変化した場合、すべてのデバイスの最新の状態を報告する必要がありますか?
A: 必要ありません。状態が変化したデバイスについて報告するだけで構いません。
ベスト プラクティス
Q: どの程度のレイテンシなら許容されますか?
A: 200 ミリ秒未満が理想的です。2 ~ 5 秒であれば問題ありません。レイテンシが 5 秒程度推移している場合は、Google までお問い合わせください。
Q: 音声認識スピーカーをオフラインのときに正しく応答させるにはどうすればよいですか?
A: オフライン デバイスのオフライン状態を返します。このエラーに対しては、TTS として「現在は利用不可」が返されます。詳細については、エラーと例外をご覧ください。