কার্ড এবং ডায়ালগ সমস্যা সমাধান এবং ঠিক করুন

এই নির্দেশিকায় কার্ড -সম্পর্কিত সাধারণ ত্রুটিগুলো, যা আপনি সম্মুখীন হতে পারেন, এবং সেগুলো কীভাবে সমাধান করা যায়, তা বর্ণনা করা হয়েছে।


চ্যাট অ্যাপের জন্য মেসেজিং ও ইউজার ইন্টারফেস ডিজাইন এবং প্রিভিউ করতে কার্ড বিল্ডার ব্যবহার করুন:

কার্ড বিল্ডারটি খুলুন

কার্ডের ত্রুটিগুলো কীভাবে দেখা দেয়

কার্ডের ত্রুটি বিভিন্নভাবে প্রকাশ পায়:

  • কার্ডের কোনো অংশ, যেমন উইজেট বা কম্পোনেন্ট, প্রদর্শিত হয় না অথবা অপ্রত্যাশিতভাবে রেন্ডার হয়।
  • সম্পূর্ণ কার্ডটি দেখা যাচ্ছে না।
  • একটি ডায়ালগ বক্স বন্ধ হয়ে যায়, খোলে না বা লোড হয় না।

আপনি যদি এই ধরনের আচরণ দেখতে পান, তার মানে আপনার অ্যাপের কার্ডে কোনো ত্রুটি আছে।

তথ্যসূত্র: একটি কার্যকর, ত্রুটিমুক্ত কার্ড বার্তা এবং ডায়ালগ

ত্রুটিপূর্ণ কার্ডের উদাহরণগুলো পরীক্ষা করার আগে, প্রথমে এই কার্যকর কার্ডের বার্তা এবং সংলাপটি বিবেচনা করুন। প্রতিটি উদাহরণ ত্রুটি এবং তার সমাধান ব্যাখ্যা করার জন্য, এই কার্ডের JSON-এ ত্রুটি যোগ করে পরিবর্তন করা হয়েছে।

একটি ত্রুটিমুক্ত কার্ড বার্তা

এখানে যোগাযোগের তথ্য সম্বলিত একটি কার্যকর ও ত্রুটিমুক্ত কার্ড বার্তা দেওয়া হলো, যেটিতে একটি হেডার, বিভিন্ন সেকশন এবং সজ্জিত টেক্সট ও বাটনের মতো উইজেট রয়েছে:

একটি ত্রুটিমুক্ত সংলাপ

এখানে একটি কার্যকর, ত্রুটিমুক্ত ডায়ালগ বক্স দেওয়া হলো, যা ব্যবহারকারীদের কাছ থেকে তথ্য সংগ্রহ করে একটি কন্টাক্ট তৈরি করে। এতে একটি ফুটার এবং টেক্সট ইনপুট, সুইচ ও বাটনের মতো সম্পাদনাযোগ্য উইজেট রয়েছে।

ত্রুটি: কার্ডের একটি অংশ দেখা যাচ্ছে না।

মাঝে মাঝে কার্ডগুলো লোড হয়, কিন্তু কার্ডের যে অংশটি আপনি দেখতে আশা করেছিলেন তা দেখা যায় না; এর সম্ভাব্য কারণগুলো হলো:

  • একটি প্রয়োজনীয় JSON ফিল্ড অনুপস্থিত।
  • JSON ফিল্ডে বানান ভুল অথবা বড় হাতের অক্ষর ভুলভাবে ব্যবহার করা হয়েছে।

কারণ: একটি প্রয়োজনীয় JSON ফিল্ড অনুপস্থিত

এই উদাহরণ ত্রুটিতে, title একটি আবশ্যক JSON ফিল্ড অনুপস্থিত। ফলে, কার্ডটি রেন্ডার হলেও, কার্ডের যে অংশগুলো প্রদর্শিত হওয়ার কথা, সেগুলো হয় না। আবশ্যক ফিল্ড বাদ দেওয়া হলে কার্ডগুলো কীভাবে রেন্ডার হবে তা অনুমান করা কঠিন হতে পারে।

এই ত্রুটিটি সমাধান করতে, প্রয়োজনীয় JSON ফিল্ডটি যোগ করুন; এই উদাহরণে, title

কোনো JSON ফিল্ড আবশ্যক কিনা তা জানতে, Cards v2 রেফারেন্স ডকুমেন্টেশন দেখুন। এই উদাহরণে, CardHeader এর title ফিল্ডের বিবরণটি দেখুন।

এখানে দুটি উদাহরণ দেওয়া হলো:

উদাহরণ ১: subtitle উল্লেখ করে প্রয়োজনীয় title বাদ দিলে পুরো হেডারটি খালি দেখায়:

এই কার্ডটির হেডার প্রদর্শিত হচ্ছে না, কারণ একটি আবশ্যকীয় ফিল্ড, টাইটেল, অনুপস্থিত।
চিত্র ১ : এই কার্ডটির হেডার প্রদর্শিত হচ্ছে না, কারণ ' title ' নামক একটি আবশ্যকীয় ফিল্ড অনুপস্থিত।

ত্রুটিপূর্ণ কার্ড JSON স্নিপেট দেখুন

ত্রুটি: header ' title ' নামক একটি আবশ্যিক ফিল্ড অনুপস্থিত।

    . . .
    "header": {

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

সঠিক কার্ড JSON স্নিপেট দেখুন

সংশোধন: আবশ্যিক ফিল্ড ' title ' header স্পেসিফিকেশনের একটি অংশ।

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

উদাহরণ ২: subtitle , imageUrl , imageType , এবং imageAltText উল্লেখ করার পরেও প্রয়োজনীয় title বাদ দিলে ছবিটি প্রত্যাশিতভাবে রেন্ডার হয়, কিন্তু সাবটাইটেলটি হয় না:

এই কার্ডটির হেডার প্রদর্শিত হচ্ছে না, কারণ একটি আবশ্যকীয় ফিল্ড, টাইটেল, অনুপস্থিত।
চিত্র ২ : এই কার্ডটির হেডারে সাবটাইটেলটি দেখা যাচ্ছে না, কারণ ' title ' নামক একটি আবশ্যক ফিল্ড অনুপস্থিত; কিন্তু ছবিটি প্রত্যাশিতভাবেই প্রদর্শিত হচ্ছে।

ত্রুটিপূর্ণ কার্ড JSON স্নিপেট দেখুন

ত্রুটি: header ' title ' নামক একটি আবশ্যিক ফিল্ড অনুপস্থিত।

    . . .
    "header": {

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

সঠিক কার্ড JSON স্নিপেট দেখুন

সংশোধন: আবশ্যিক ফিল্ড ' title ' header স্পেসিফিকেশনের একটি অংশ।

    . . .
    "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-এ সমস্ত প্রয়োজনীয় ফিল্ড অন্তর্ভুক্ত থাকলেও, imageUrl ফিল্ডটির প্রথম অক্ষর imageURL (বড় হাতের R ও বড় হাতের L ) হিসেবে ভুলভাবে লেখা হয়েছে, যার ফলে একটি ত্রুটি দেখা দেয়: এটি যে ছবির দিকে নির্দেশ করে, সেটি রেন্ডার হয় না।

এই ত্রুটি এবং এর মতো অন্যান্য ত্রুটি সমাধান করতে, সঠিক JSON ফরম্যাটিং ব্যবহার করুন। এক্ষেত্রে, imageUrl সঠিক আছে। সন্দেহ হলে, কার্ড রেফারেন্স ডকুমেন্টের সাথে কার্ড JSON মিলিয়ে দেখুন।

এই কার্ডটির হেডার প্রদর্শিত হচ্ছে না, কারণ একটি আবশ্যকীয় ফিল্ড, টাইটেল, অনুপস্থিত।
চিত্র ৩ : এই কার্ডটির হেডারে সাবটাইটেলটি দেখা যাচ্ছে না, কারণ ' 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",
                  }
                ],
              }
            }
          },
        ],
      },
    }
    . . .
    

ত্রুটি: একটি ডায়ালগ বন্ধ হয়ে যায়, আটকে যায়, বা খোলে না।

যদি কোনো ডায়ালগ অপ্রত্যাশিতভাবে বন্ধ হয়ে যায়, লোড হতে ব্যর্থ হয়, বা খুলতে না পারে, তাহলে এর সম্ভাব্য কারণ হলো এর কার্ড ইন্টারফেসে কোনো সমস্যা।

এগুলোই সবচেয়ে সাধারণ কারণ:

কারণ: CardFixedFooter কোনো primaryButton নেই

CardFixedFooter উইজেটযুক্ত ডায়ালগ বক্সে , টেক্সট এবং রঙ উভয়সহ একটি primaryButton নির্দিষ্ট করা আবশ্যক। primaryButton বাদ দিলে বা ভুলভাবে সেট করলে সম্পূর্ণ ডায়ালগ বক্সটি প্রদর্শিত হয় না।

এই ত্রুটিটি সমাধান করতে, নিশ্চিত করুন যে CardFixedFooter উইজেটটিতে একটি সঠিকভাবে নির্দিষ্ট করা primaryButton অন্তর্ভুক্ত রয়েছে।

ত্রুটিপূর্ণ কার্ড JSON স্নিপেট দেখুন

ত্রুটি: fixedFooter অবজেক্টটিতে কোনো primaryButton ফিল্ড নির্দিষ্ট করা নেই, যার ফলে ডায়ালগটি লোড বা খুলতে পারছে না।

    . . .
    "fixedFooter": {

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

সঠিক কার্ড JSON স্নিপেট দেখুন

সংশোধন: fixedFooter এ এখন একটি primaryButton ফিল্ড নির্দিষ্ট করা আছে, ফলে ডায়ালগটি প্রত্যাশিতভাবে কাজ করে।

    . . .
    "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 অবজেক্টটির onClick ফিল্ডে `parameters` অ্যারের বানান সঠিকভাবে লেখা আছে, ফলে ডায়ালগটি প্রত্যাশিতভাবে কাজ করে।

    . . .
    "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"
          }
        }
      }
    }
    . . .
    

কারণ: TextInput কোনো name নেই

যদি কোনো ডায়ালগে এমন একটি TextInput উইজেট থাকে যেখানে name ফিল্ডটি নেই, তাহলে ডায়ালগটি প্রত্যাশিতভাবে কাজ করে না। এটি বন্ধ হয়ে যেতে পারে, খুলতে গিয়ে লোড হতে ব্যর্থ হতে পারে, অথবা একেবারেই নাও খুলতে পারে।

এই ত্রুটিটি সমাধান করতে, নিশ্চিত করুন যে প্রতিটি TextInput উইজেটে একটি উপযুক্ত name ফিল্ড অন্তর্ভুক্ত আছে। কার্ডের প্রতিটি name ফিল্ড যেন অনন্য হয়, সেটাও নিশ্চিত করুন।

ত্রুটিপূর্ণ কার্ড JSON স্নিপেট দেখুন

ত্রুটি: textInput অবজেক্টে কোনো name ফিল্ড নির্দিষ্ট করা নেই, যার ফলে ডায়ালগটি বন্ধ হয়ে যাচ্ছে, লোড হচ্ছে না বা খুলছে না।

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

      }
    }
    . . .
    

সঠিক কার্ড JSON স্নিপেট দেখুন

সংশোধন: textInput এ এখন একটি name ফিল্ড নির্দিষ্ট করা আছে, ফলে ডায়ালগটি প্রত্যাশিতভাবে কাজ করে।

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

অ্যাসিঙ্ক্রোনাস অ্যাপ আর্কিটেকচারের কারণে ডায়ালগ খোলা, জমা দেওয়া বা বাতিল করার অ্যাকশনগুলো ব্যর্থ হয়।

যদি আপনার চ্যাট অ্যাপ ডায়ালগ নিয়ে কাজ করার সময় Could not load dialog. Invalid response returned by bot. , তাহলে এর কারণ হতে পারে যে আপনার অ্যাপটি ক্লাউড পাব/সাব (Cloud Pub/Sub) বা ক্রিয়েট মেসেজ এপিআই (Create Message API) মেথডের মতো কোনো অ্যাসিঙ্ক্রোনাস আর্কিটেকচার ব্যবহার করে।

একটি ডায়ালগ খোলা, জমা দেওয়া বা বাতিল করার জন্য চ্যাট অ্যাপ থেকে DialogEventType সহ একটি সিনক্রোনাস প্রতিক্রিয়ার প্রয়োজন হয়। সেই অনুযায়ী, অ্যাসিঙ্ক্রোনাস আর্কিটেকচারে তৈরি অ্যাপগুলো ডায়ালগ সমর্থন করে না।

একটি বিকল্প সমাধান হিসেবে, ডায়ালগের পরিবর্তে কার্ড মেসেজ ব্যবহার করার কথা বিবেচনা করতে পারেন।

অন্যান্য কার্ড এবং ডায়ালগ ত্রুটি

এই পৃষ্ঠায় বর্ণিত সমাধানগুলো যদি আপনার অ্যাপের কার্ড-সম্পর্কিত ত্রুটি দূর করতে না পারে, তবে অ্যাপের এরর লগগুলো কোয়েরি করুন । লগ কোয়েরি করলে কার্ড JSON বা অ্যাপ কোডের ত্রুটি খুঁজে পেতে সাহায্য হতে পারে, এবং লগগুলোতে বর্ণনামূলক এরর মেসেজ থাকে যা আপনাকে সেগুলো সমাধান করতে সাহায্য করবে।

Google Chat অ্যাপের ত্রুটি সমাধানে সাহায্যের জন্য, Google Chat অ্যাপের সমস্যা সমাধান ও সমাধান এবং Chat অ্যাপ ডিবাগ করুন দেখুন।