Google Cloud は、Google Cloud Monitoring を使用してプロジェクトの信頼性をモニタリングし、Google Cloud Logging エラーログを使用して問題をデバッグするためのツールを提供します。ユーザー インテントのフルフィルメントに失敗すると、Google Home アナリティクスのパイプラインがその失敗を指標に記録し、プロジェクト ログにエラーログを公開します。
エラーのトラブルシューティングは、次の 2 つの手順で行います。
- スマートホームの指標でプロジェクトの状態をモニタリングする。
 - エラーログでエラーの詳しい説明を確認して問題を調査する。
 

必要に応じて、他のユーザーと共有することでアクションをテストできます。エラーと例外の処理を適切に行えるようにします。
エラーをモニタリングする
Google Cloud Monitoring dashboard を使用して、プロジェクトの指標にアクセスできます。品質のモニタリングとデバッグにおいて、特に役に立つグラフをいくつか紹介します。
- 成功率のグラフは、プロジェクトの信頼性をモニタリングする際にまず確認すべきグラフです。このグラフが急激に低下している場合、ユーザーベースの一部または全体が停止している可能性があります。このグラフを慎重にチェックし、プロジェクトに変更や更新を加えた後に異常が発生していないかを確認します。
 - 95 パーセンタイルのレイテンシのグラフは、Cloud-to-cloud インテグレーションのパフォーマンスに関する重要な指標です。このグラフが突然変動した場合、システムによるリクエストの処理が追いついていない可能性があります。予期しない動作が発生しないように、このグラフを定期的に確認することをおすすめします。
 - エラーの内訳のグラフは、統合のトラブルシューティングにおいて特に役立ちます。成功率グラフでハイライト表示されたすべてのエラーについて、その内訳とエラーコードを確認できます。Google Home platform から報告されたエラーとそのトラブルシューティングの方法については、次の表をご覧ください。
 
プラットフォームのエラーコード
Google Home platform によって検出された問題を特定するために、プロジェクト ログに表示される可能性のある一般的なエラーコードを以下に示します。トラブルシューティング情報については、次の表をご覧ください。
| エラーコード | 説明 | 
|---|---|
BACKEND_FAILURE_URL_ERROR | 
          
            Google は、サービスから 401 以外の HTTP 4xx エラーコードを受信しました。 GCP Logging の requestId を使用して、スマートホーム サービスのログを確認します。 | 
        
BACKEND_FAILURE_URL_TIMEOUT | 
          
            Google のリクエストがサービスにアクセスしようとしたときにタイムアウトしました。 サービスがオンラインで、接続を受け入れており、容量を超えていないことを確認します。また、ターゲット デバイスの電源がオンになっていて、オンラインで同期されていることを確認します。  | 
        
BACKEND_FAILURE_URL_UNREACHABLE | 
          
            Google は、お客様のサービスから HTTP 5xx エラーコードを受け取りました。 GCP Logging の requestId を使用して、スマートホーム サービスのログを確認します。 | 
        
DEVICE_NOT_FOUND | 
          
            デバイスがパートナー サービス側に存在しません。 これは通常、データ同期の失敗または競合状態を示します。  | 
        
GAL_BAD_3P_RESPONSE | 
          
            ペイロードの形式または値が無効であるため、Google はアカウント リンク サービスからのレスポンスを解析できません。 GCP Logging の requestId を使用して、アカウント リンク サービスのエラーログを確認します。 | 
        
GAL_INTERNAL | 
          
            Google がアクセス トークンを取得しようとしたときに、Google の内部エラーが発生しました。 GCP Logging でこのエラーの発生率が増加している場合は、詳細についてお問い合わせください。  | 
        
GAL_INVALID_ARGUMENT | 
          
            Google がアクセス トークンを取得しようとしたときに、Google の内部エラーが発生しました。 GCP Logging でこのエラーの発生率が増加している場合は、詳細についてお問い合わせください。  | 
        
GAL_NOT_FOUND | 
          
            Google に保存されているユーザーのアクセス トークンと更新トークンが無効になり、更新できなくなります。サービスを継続して利用するには、アカウントを再リンクする必要があります。
             GCP Logging でこのエラーの発生率が増加している場合は、詳細についてお問い合わせください。  | 
        
GAL_PERMISSION_DENIED | 
          
            トークンの共有が承認されていない場合に、Google の内部エラーが発生しました。 GCP Logging でこのエラーの発生率が増加している場合は、詳細についてお問い合わせください。  | 
        
GAL_REFRESH_IN_PROGRESS | 
          
            ユーザーのアクセス トークンの有効期限が切れており、同時に更新を試みる別の処理がすでに進行中です。 これは問題ではなく、対応は必要ありません。  | 
        
INVALID_AUTH_TOKEN | 
          
            Google は、お客様のサービスから HTTP 401 エラーコードを受け取りました。 アクセス トークンの有効期限は切れていませんが、サービスによって無効になっています。GCP Logging の requestId を使用して、スマートホーム サービスのログを確認します。 | 
        
INVALID_JSON | 
          
            JSON レスポンスを解析または認識できません。
             JSON レスポンスの構造をチェックし、かっこの不一致、カンマの欠落、無効な文字など、無効な構文がないか確認します。  | 
        
OPEN_AUTH_FAILURE | 
          
            ユーザーのアクセス トークンの有効期限が切れていて、Google が更新できない場合、または Google がサービスから HTTP 401 エラーコードを受け取った場合。 このコードのレートが増加している場合は、スマートホーム インテントまたは更新トークン リクエストに関連するエラーのレートも増加しているかどうかを確認します。  | 
        
PARTNER_RESPONSE_INVALID_ERROR_CODE | 
          
            レスポンスに、認識できないエラーコードが示されています。
             リクエスト レスポンスにエラーが示されている場合は、 サポートされているエラーコードが使用されていることを確認します。  | 
        
PARTNER_RESPONSE_INVALID_PAYLOAD | 
          
            レスポンスの payload フィールドを JSON オブジェクトとして解析できません。リクエスト レスポンスのペイロード フィールドのかっこが一致していること、JSON フィールドとして正しく構造化されていることを確認します。  | 
        
PARTNER_RESPONSE_INVALID_STATUS | 
          
            レスポンスにステータスが示されていないか、示されているステータスが正しくありません。
             インテントのフルフィルメント リクエストに対するレスポンスでは、 SUCCESS, OFFLINE, ERROR, EXCEPTIONS のいずれかのステータスを示す必要があります。詳しくは、
            エラーと例外を処理するをご覧ください。 | 
        
PARTNER_RESPONSE_MISSING_COMMANDS_AND_DEVICES | 
          
            レスポンスに、リクエスト内の 1 つ以上のインテントが見つかりません。 EXECUTE レスポンスが正しく構造化されていること、リクエストからのすべてのインテントの結果がレスポンスに含まれていることを確認します。  | 
        
PARTNER_RESPONSE_MISSING_DEVICE | 
          
            レスポンスに、リクエスト内の 1 つ以上のデバイスが見つかりません。 EXECUTE レスポンスが正しく構造化されていること、リクエストからのすべてのデバイス ID がレスポンスに含まれていることを確認します。  | 
        
PARTNER_RESPONSE_MISSING_PAYLOAD | 
          
            レスポンスに payload フィールドが含まれていません。リクエスト レスポンスにペイロード フィールドが含まれていることを確認します。 EXECUTE レスポンスを正しく構築する方法を参照してください。  | 
        
PARTNER_RESPONSE_NOT_OBJECT | 
          
            レスポンスを JSON オブジェクトとして解析できません。
             リクエスト レスポンス内のすべてのフィールドで、意図されていない文字が含まれていないか、角かっこの不一致やフォーマット エラーがないかを確認します。一部の Unicode 文字はサポートされていない可能性があります。また、レスポンスが JSON オブジェクトとして正しく構造化されていることを確認してください。  | 
        
PROTOCOL_ERROR | 
          
            リクエストの処理中にエラーが発生しました。 Google Cloud Logging の requestId を使用して、スマートホーム サービスのログを確認します。
           | 
        
RELINK_REQUIRED | 
          
            レスポンスで relinkRequired エラーが示されたため、ユーザーに Google アカウントとパートナー アカウントの再リンクを求めるメッセージが表示されます。詳細については、 サポートされているエラーコードをご覧ください。  | 
        
RESPONSE_TIMEOUT | 
          
            レスポンスの待機中にリクエストがタイムアウトしました。 レスポンスの送信がタイムアウトするまでの時間は、リクエストが送信されてから 9 秒です。この時間内にレスポンスが送信されていることを確認してください。  | 
        
RESPONSE_UNAVAILABLE | 
          
            レスポンスを受信していないか、レスポンスにステータスが示されていません。
             インテントのフルフィルメント リクエストに対するレスポンスは、 スマートホームのドキュメントに沿って構造化し、ステータスを示す必要があります。  | 
        
TRANSIENT_ERROR | 
          
            一時的なエラーは、自動的に解決されるエラーです。 通常、これらのエラーはデバイスまたはサービスへの接続が切断されたときに発生します。サーバーへの新しい接続を開けない場合も同様です。  | 
        
検索ログ
指標を使用して統合をモニタリングできるようになったら、次は Cloud Logging を使用してエラーのトラブルシューティングを行います。エラーログには、時間、エラーコード、スマートホーム インテントの詳細などの有用な情報が、JSON によく似た形式で記録されています。
Google Cloud 内の複数のシステムから、常にプロジェクトにログが送信されます。目的のログを探すには、ログをフィルタするクエリを記述する必要があります。クエリを作成するには、「期間」、「リソース」、ログの「重大度」を指定するか、カスタム エントリを記述します。
  クエリボタンを使用すると、カスタムフィルタの作成に役立ちます。
  「期間」を指定するには、期間選択ボタン をクリックして、いずれかのオプションを選択します。ログがフィルタされ、選択した期間に発生したログのみが表示されます。
「リソース」を指定する場合は、[リソース] プルダウンをクリックし、[Google アシスタント アクション プロジェクト] を選択します。クエリにフィルタが追加され、プロジェクトからのログのみが表示されます。
[重大度] ボタンを使用して、緊急、情報、デバッグなどの重大度ログレベルでフィルタします。
Logs Explorer の [クエリ] フィールドを使用してカスタム エントリを記述することもできます。このフィールドで使用するクエリエンジンは、文字列一致などの基本的なクエリと、コンパレータ(<, >=, !=)やブール演算子(AND, OR, NOT)のような高度なクエリの両方をサポートしています。
たとえば次のカスタム エントリは、LIGHT デバイスタイプで発生したエラーのみを返します。
resource.type = "assistant_action_project" AND severity = ERROR AND jsonPayload.executionLog.executionResults.actionResults.device.deviceType = "LIGHT"
ログを効果的にクエリするその他の例については、クエリ ライブラリをご覧ください。
修正をテストする
エラーを特定し、修正するアップデートを適用したら、Google Home Test Suite を使用して修正を徹底的にテストすることをおすすめします。修正のテストを効果的に行う方法については、Test Suite のユーザーガイドで詳しく説明しています。
学習用リソース
このドキュメントでは、スマートホーム アクションのエラーをトラブルシューティングする手順について説明します。デバッグの詳細については、以下の Codelab も参考にしてください。
- Codelab: スマートホームのデバッグ: スマートホームのクラウド統合をデバッグするためのクイック スタートガイドです。
 - Codelab: ローカルホームのデバッグ: スマートホームのローカル統合をデバッグするためのクイック スタートガイドです。