カードとダイアログのトラブルシューティングと修正

このガイドでは、発生する可能性のある一般的なカード関連のエラーとその解決方法について説明します。


カード作成ツールを使用して、Chat 用アプリのメッセージとユーザー インターフェースを設計してプレビューします。

カードビルダーを開く

カードエラーの表示方法

カードエラーは、次のような形で発生します。

  • カードの一部(ウィジェットやコンポーネントなど)が表示されない、または予期しない方法でレンダリングされる。
  • カード全体が表示されない。
  • ダイアログが閉じたり、開かなかったり、読み込まれなかったりする。

このような動作が発生した場合は、アプリのカードにエラーがあることを意味します。

参考: 動作するエラーのないカード メッセージとダイアログ

エラーのあるカードの例を見る前に、まず、正常に動作するカードのメッセージとダイアログについて考えてみましょう。各エラーとその修正方法を示すため、このカードの JSON にエラーを導入して変更します。

エラーのないカード メッセージ

以下は、ヘッダー、セクション、装飾されたテキストやボタンなどのウィジェットを備えた、連絡先情報を詳細に説明するエラーのないカード メッセージの例です。

エラーのないダイアログ

ユーザーから情報を収集して連絡先を作成する、フッターと、テキスト入力やスイッチなどの編集可能なウィジェット、ボタンを備えた、エラーのないダイアログの例を次に示します。

エラー: カードの一部が表示されない

カードがレンダリングされるものの、表示されるはずのカードの一部が表示されないことがあります。考えられる原因は次のとおりです。

  • 必須の JSON フィールドがありません。
  • JSON フィールドのスペルが間違っているか、大文字と小文字が正しくありません。

原因: 必須の JSON フィールドがありません

このエラー例では、必須の JSON フィールド title がありません。その結果、カードはレンダリングされますが、表示されるはずのカードの一部が表示されません。必須フィールドが省略された場合にカードがどのようにレンダリングされるかを予測することは困難です。

このエラーを修正するには、必要な JSON フィールド(この例では title)を追加します。

JSON フィールドが必須かどうかを確認するには、Cards v2 のリファレンス ドキュメントをご覧ください。この例では、CardHeadertitle フィールドの説明を参照してください。

次に 2 つの例を示します。

例 1: subtitle を指定しても、必須の title を省略すると、ヘッダー全体が空白になります。

必須フィールドのタイトルがないため、このカードのヘッダーが表示されません。
図 1: 必須フィールド title がないため、このカードのヘッダーは表示されません。

エラーのあるカードの JSON スニペットを表示する

エラー: 必須フィールド titleheader にありません。

    . . .
    "header": {

            "subtitle": "Software Engineer"
          }
    . . .
    

正しいカードの JSON スニペットを表示

修正: 必須フィールド titleheader 仕様の一部です。

    . . .
    "header": {
            "title": "Sasha",
            "subtitle": "Software Engineer"
          }
    . . .
    

例 2: subtitleimageUrlimageTypeimageAltText を指定し、必須の title を省略すると、画像は期待どおりにレンダリングされますが、字幕はレンダリングされません。

必須フィールドのタイトルがないため、このカードのヘッダーが表示されません。
図 2: 必須フィールド title がないため、このカードのヘッダーにはサブタイトルが表示されませんが、画像は想定どおりにレンダリングされます。

エラーのあるカードの JSON スニペットを表示する

エラー: 必須フィールド titleheader にありません。

    . . .
    "header": {

            "subtitle": "Software Engineer",
            "imageUrl":
            "https://developers.google.com/chat/images/quickstart-app-avatar.png",
            "imageType": "CIRCLE",
            "imageAltText": "Avatar for Sasha",
          }
    . . .
    

正しいカードの JSON スニペットを表示

修正: 必須フィールド titleheader 仕様の一部です。

    . . .
    "header": {
            "title": "Sasha",
            "subtitle": "Software Engineer",
            "imageUrl":
            "https://developers.google.com/chat/images/quickstart-app-avatar.png",
            "imageType": "CIRCLE",
            "imageAltText": "Avatar for Sasha",
          }
    . . .
    

原因: JSON のスペルまたは大文字と小文字が正しくない

このエラー例では、カード JSON に必要なフィールドがすべて含まれていますが、1 つのフィールド imageUrlimageURL(大文字の R 大文字の L)として誤って大文字で記述されているため、エラーが発生し、参照先の画像がレンダリングされません。

このエラーや同様のエラーを修正するには、正しい JSON 形式を使用します。この場合、imageUrl が正解です。不明な場合は、カードの JSON をカードのリファレンス ドキュメントと照らし合わせてください。

必須フィールドのタイトルがないため、このカードのヘッダーが表示されません。
図 3: 必須フィールド title がないため、このカードのヘッダーにはサブタイトルが表示されませんが、画像は想定どおりにレンダリングされます。

エラーのあるカードの JSON スニペットを表示する

エラー: フィールド imageURL の大文字と小文字が正しくありません。imageUrl にします。

    . . .
    "header": {
      "title": "Sasha",
      "subtitle": "Software Engineer",
      "imageURL":
      "https://developers.google.com/chat/images/quickstart-app-avatar.png",
      "imageType": "CIRCLE",
      "imageAltText": "Avatar for Sasha",
    }
    . . .
    

正しいカードの JSON スニペットを表示

修正: フィールド imageUrl が正しく大文字で表記される。

    . . .
    "header": {
            "title": "Sasha",
            "subtitle": "Software Engineer",
            "imageUrl":
            "https://developers.google.com/chat/images/quickstart-app-avatar.png",
            "imageType": "CIRCLE",
            "imageAltText": "Avatar for Sasha",
          }
    . . .
    

エラー: カード全体が表示されない

カード自体が表示されないことがあります。考えられる原因は次のとおりです。

原因: buttonList または cardFixedFooter が正しく指定されていない

カード メッセージまたはダイアログに、正しく指定されていない ButtonList ウィジェットまたはボタンが正しく指定されていない CardFixedFooter ウィジェットが含まれている場合、カード全体が表示されず、代わりに何も表示されません。仕様が正しくない場合、フィールドが欠落している、フィールドのスペルや大文字と小文字が間違っている、JSON の構造が正しくない(カンマ、引用符、中かっこが欠落しているなど)といったことが考えられます。

このエラーを修正するには、カードのリファレンス ドキュメントと照らし合わせてカードの JSON を確認します。特に、ButtonList ウィジェットを ButtonList ウィジェット ガイドと比較します。

例: ButtonList ウィジェット ガイドで、最初のボタンに不完全な onClick アクションを渡すと、カード全体がレンダリングされなくなります。

エラーのあるカードの JSON スニペットを表示する

エラー: onClick オブジェクトにフィールドが指定されていないため、カード全体が表示されません。

    . . .
    {
      "buttonList": {
        "buttons": [
          {
            "text": "Share",
            "onClick": {


              }
            }
          },
          {
            "text": "Edit",
            "onClick": {
              "action": {
                "function": "goToView",
                "parameters": [
                  {
                    "key": "viewType",
                    "value": "EDIT",
                  }
                ],
              }
            }
          },
        ],
      },
    }
    . . .
    

正しいカードの JSON スニペットを表示する

修正: onClick オブジェクトに openLink フィールドが追加され、カードが想定どおりに表示されるようになりました。

    . . .
    {
      "buttonList": {
        "buttons": [
          {
            "text": "Share",
            "onClick": {
              "openLink": {
                "url": "https://example.com/share",
              }
            }
          },
          {
            "text": "Edit",
            "onClick": {
              "action": {
                "function": "goToView",
                "parameters": [
                  {
                    "key": "viewType",
                    "value": "EDIT",
                  }
                ],
              }
            }
          },
        ],
      },
    }
    . . .
    

エラー: ダイアログが閉じる、停止する、または開かない

ダイアログが予期せず閉じたり、読み込みに失敗したり、開かなかったりする場合は、カード インターフェースに問題がある可能性があります。

よくある原因は次のとおりです。

原因: CardFixedFooterprimaryButton がない

CardFixedFooter ウィジェットを含むダイアログでは、テキストと色の両方を含む primaryButton を指定する必要があります。primaryButton を省略したり、正しく設定しなかったりすると、ダイアログ全体が表示されなくなります。

このエラーを修正するには、CardFixedFooter ウィジェットに primaryButton が正しく指定されていることを確認してください。

エラーのあるカードの JSON スニペットを表示する

エラー: fixedFooter オブジェクトに primaryButton フィールドが指定されていないため、ダイアログを読み込むか開くことができません。

    . . .
    "fixedFooter": {

        "onClick": {
          . . .
      },
      "secondaryButton": {
        . . .
        }
      }
    }
    . . .
    

正しいカードの JSON スニペットを表示する

修正: fixedFooterprimaryButton フィールドが指定されるようになったため、ダイアログが想定どおりに動作するようになりました。

    . . .
    "fixedFooter": {
      "primaryButton": {
        "text": "Submit",
        "color": {
          "red": 0,
          "blue": 1,
          "green": 0
        },
        "onClick": {
          . . .
      },
      "secondaryButton": {
        . . .
        }
      }
    }
    . . .
    

原因: FixedFooteronClick 設定が正しくない

CardFixedFooter ウィジェットを含むダイアログで、ボタンの onClick 設定を誤って指定したり、省略したりすると、ダイアログが閉じたり、読み込みに失敗したり、開かなかったりします。

このエラーを修正するには、各ボタンに onClick 設定が正しく指定されていることを確認してください。

エラーのあるカードの JSON スニペットを表示する

エラー: primaryButton オブジェクトの onClick フィールドで `parameters` 配列のスペルが間違っているため、ダイアログの読み込みまたはオープンに失敗します。

    . . .
    "fixedFooter": {
      "primaryButton": {
        "text": "Submit",
        "color": {
          "red": 0,
          "blue": 1,
          "green": 0
        },
        "onClick": {
          "action": {
            "function": "setLanguageType",
            "parrammetters": [
              {
                "key": "languageType",
                "value": "C++"
              }
            ]
          }
        }
      },
      "secondaryButton": {
        "text": "Cancel",
        "onClick": {
          "action": {
            "function": "reset"
          }
        }
      }
    }
    . . .
    

正しいカードの JSON スニペットを表示する

修正済み: primaryButton オブジェクトに、スペルが正しい `parameters` 配列を含む onClick フィールドがあるため、ダイアログが想定どおりに機能します。

    . . .
    "fixedFooter": {
      "primaryButton": {
        "text": "Submit",
        "color": {
          "red": 0,
          "blue": 1,
          "green": 0
        },
        "onClick": {
          "action": {
            "function": "setLanguageType",
            "parameters": [
              {
                "key": "languageType",
                "value": "C++"
              }
            ]
          }
        }
      },
      "secondaryButton": {
        "text": "Cancel",
        "onClick": {
          "action": {
            "function": "reset"
          }
        }
      }
    }
    . . .
    

原因: TextInputname がない

name フィールドを除外する TextInput ウィジェットを含むダイアログは、想定どおりに動作しません。閉じたり、開いても読み込みに失敗したり、開かなかったりすることがあります。

このエラーを修正するには、各 TextInput ウィジェットに適切な name フィールドが含まれていることを確認してください。カード内の各 name フィールドが一意であることを確認します。

エラーのあるカードの JSON スニペットを表示する

エラー: textInput オブジェクトに name フィールドが指定されていないため、ダイアログが閉じたり、読み込みに失敗したり、開けなかったりします。

    . . .
    {
      "textInput": {
        "label": "Name",
        "type": "SINGLE_LINE",

      }
    }
    . . .
    

正しいカードの JSON スニペットを表示する

修正: textInputname フィールドが指定されるようになったため、ダイアログが想定どおりに動作するようになりました。

    . . .
    {
      "textInput": {
        "label": "Name",
        "type": "SINGLE_LINE",
        "name": "contactName"
      }
    }
    . . .
    

非同期アプリ アーキテクチャでダイアログのオープン、送信、キャンセル アクションが失敗する

ダイアログの操作中に Chat 用アプリがエラー メッセージ Could not load dialog. Invalid response returned by bot. を返す場合は、アプリが Cloud Pub/SubCreate Message API メソッドなどの非同期アーキテクチャを使用していることが原因である可能性があります。

ダイアログを開く、送信する、キャンセルするには、DialogEventType を使用して Chat 用アプリから同期レスポンスが必要です。そのため、非同期のアーキテクチャで構築されたアプリではダイアログはサポートされていません。

回避策として、ダイアログの代わりにカード メッセージを使用することを検討してください。

カードとダイアログに関するその他のエラー

このページで説明されている修正で、アプリで発生しているカード関連のエラーが解決しない場合は、アプリのエラーログをクエリします。ログをクエリすると、カードの JSON やアプリコードのエラーを見つけることができます。ログには、エラーの修正に役立つ説明的なエラー メッセージが含まれています。

Google Chat アプリのエラーの修正については、Google Chat アプリのトラブルシューティングと修正Chat 用アプリのデバッグをご覧ください。