গুগল চ্যাট, ভার্টেক্স এআই এবং গুগল অ্যাপস স্ক্রিপ্টের মাধ্যমে ঘটনার প্রতিক্রিয়া জানান

এই টিউটোরিয়ালটি আপনাকে দেখাবে কীভাবে একটি গুগল চ্যাট অ্যাপ তৈরি করতে হয় যা রিয়েল টাইমে কোনো ঘটনার প্রতিক্রিয়া জানায়। কোনো ঘটনার প্রতিক্রিয়া জানানোর সময়, অ্যাপটি একটি চ্যাট স্পেস তৈরি করে এবং তাতে তথ্য যোগ করে, মেসেজ, স্ল্যাশ কমান্ড এবং ডায়ালগের মাধ্যমে ঘটনার সমাধানে সহায়তা করে, এবং এআই ব্যবহার করে একটি গুগল ডক্স ডকুমেন্টে ঘটনার প্রতিক্রিয়ার সারসংক্ষেপ তৈরি করে।

এই টিউটোরিয়ালে এমন অথরাইজেশন স্কোপ ব্যবহার করা হয়েছে যা https://www.googleapis.com/auth/chat.app.* দিয়ে শুরু হয়। চ্যাট অ্যাপে এই স্কোপগুলো ব্যবহার করার জন্য, আপনাকে অবশ্যই এককালীন অ্যাডমিনিস্ট্রেটর অনুমোদন নিতে হবে।

ঘটনা হলো এমন একটি বিষয় যা সমাধানের জন্য একদল লোকের তাৎক্ষণিক মনোযোগের প্রয়োজন হয়। ঘটনার উদাহরণগুলো হলো:

  • কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট (সিআরএম) প্ল্যাটফর্মে একটি জরুরি কেস তৈরি করা হয়, যার সমাধানের জন্য একটি সার্ভিস টিমের সম্মিলিত প্রচেষ্টা প্রয়োজন।
  • একটি সিস্টেম অফলাইন হয়ে গেলে, তা একদল সাইট রিলায়াবিলিটি ইঞ্জিনিয়ারকে (SRE) সতর্ক করে দেয়, যাতে তারা সম্মিলিতভাবে সেটিকে পুনরায় অনলাইন করার জন্য কাজ করতে পারে।
  • একটি উচ্চ মাত্রার ভূমিকম্প হয়, এবং জরুরি কর্মীদের তাদের প্রতিক্রিয়া সমন্বয় করতে হয়।

এই টিউটোরিয়ালের উদ্দেশ্যে, যখন কেউ একটি ওয়েব পেজ থেকে বোতামে ক্লিক করে কোনো ঘটনা রিপোর্ট করে, তখন ঘটনার সতর্কতা শুরু হয়। ওয়েব পেজটি ব্যবহারকারীদের কাছে ঘটনার প্রাথমিক তথ্য—যেমন শিরোনাম, বিবরণ এবং সাড়াদানকারীদের ইমেল ঠিকানা—প্রবেশ করতে বলে একটি ঘটনার অনুকরণ করে।

ইনসিডেন্ট ম্যানেজমেন্ট চ্যাট অ্যাপটি বাস্তবে দেখুন:

  • যে ওয়েবসাইটটি একটি ঘটনার সূত্রপাত করে।
    চিত্র ১. যে ওয়েবসাইটে কেউ কোনো ঘটনার প্রতিবেদন করতে পারেন।
  • ইনসিডেন্ট চ্যাট স্পেস তৈরি হওয়ার বিজ্ঞপ্তি।
    চিত্র ২. ঘটনা চ্যাট স্পেস তৈরি হওয়ার বিজ্ঞপ্তি।
  • ঘটনা প্রতিক্রিয়া চ্যাট স্পেস।
    চিত্র ৩. ঘটনা প্রতিক্রিয়া চ্যাট স্পেস।
  • স্ল্যাশ কমান্ডের মাধ্যমে ঘটনাটির সমাধান করা হচ্ছে।
    চিত্র ৪. স্ল্যাশ কমান্ডের মাধ্যমে ঘটনাটির সমাধান।
  • ঘটনা সমাধান ডায়ালগ।
    চিত্র ৫. ঘটনা সমাধান ডায়ালগ।
  • ঘটনা সমাধানের গুগল ডক্স ডকুমেন্টটি স্পেসে শেয়ার করা হয়েছে।
    চিত্র ৬। স্পেসে শেয়ার করা ঘটনা সমাধান সংক্রান্ত গুগল ডক্স ডকুমেন্ট।
  • এআই সারাংশ ঘটনা সমাধান গুগল ডক।
    চিত্র ৭. এআই দ্বারা সংঘটিত ঘটনার সারসংক্ষেপ সমাধান সংক্রান্ত গুগল ডক্স ডকুমেন্ট।

পূর্বশর্ত

আপনার প্রতিষ্ঠানের জন্য যদি এই পূর্বশর্তগুলোর কোনোটি চালু করার প্রয়োজন হয়, তাহলে আপনার Google Workspace অ্যাডমিনিস্ট্রেটরকে সেগুলো চালু করতে বলুন:

  • গুগল চ্যাট ব্যবহারের সুবিধাসহ একটি ব্যবসায়িক বা এন্টারপ্রাইজ গুগল ওয়ার্কস্পেস অ্যাকাউন্ট।
  • Google Workspace-এর জন্য ডিরেক্টরি (যোগাযোগ শেয়ারিং) চালু করতে হবে। ইনসিডেন্ট অ্যাপটি ইনসিডেন্ট রেসপন্ডারদের যোগাযোগের তথ্য, যেমন নাম এবং ইমেল ঠিকানা, খুঁজে বের করার জন্য ডিরেক্টরিটি ব্যবহার করে। ইনসিডেন্ট রেসপন্ডারদের অবশ্যই আপনার Google Workspace অর্গানাইজেশনে একটি চ্যাট অ্যাকাউন্ট আছে এমন ব্যবহারকারী হতে হবে।

উদ্দেশ্য

  • এমন একটি চ্যাট অ্যাপ তৈরি করুন যা বিভিন্ন ঘটনার প্রতিক্রিয়া জানায়।
  • নিম্নলিখিত কাজগুলো করার মাধ্যমে ব্যবহারকারীদের বিভিন্ন ঘটনার প্রতিক্রিয়া জানাতে সাহায্য করুন:
    • ঘটনা মোকাবেলার জন্য স্থান তৈরি করা।
    • ঘটনা ও তার প্রতিক্রিয়ার সারসংক্ষেপ করে বার্তা পোস্ট করা।
    • ইন্টারেক্টিভ চ্যাট অ্যাপ ফিচারের মাধ্যমে সহযোগিতাকে সমর্থন করা।
  • ভার্টেক্স এআই-এর সাহায্যে কথোপকথন এবং সিদ্ধান্তের সারসংক্ষেপ তৈরি করুন।

স্থাপত্য

নিম্নোক্ত ডায়াগ্রামটিতে ইনসিডেন্ট রেসপন্স চ্যাট অ্যাপ দ্বারা ব্যবহৃত গুগল ওয়ার্কস্পেস এবং গুগল ক্লাউড রিসোর্সসমূহের আর্কিটেকচার দেখানো হয়েছে।

ঘটনা প্রতিক্রিয়া চ্যাট অ্যাপের স্থাপত্য

এই আর্কিটেকচারটি দেখায় যে ইনসিডেন্ট রেসপন্স চ্যাট অ্যাপটি কীভাবে একটি ইনসিডেন্ট প্রসেস করে এবং তার সমাধান করে।

  1. একজন ব্যবহারকারী অ্যাপস স্ক্রিপ্টে হোস্ট করা একটি বাহ্যিক ওয়েবসাইট থেকে একটি ঘটনা শুরু করেন।

  2. ওয়েবসাইটটি অ্যাপস স্ক্রিপ্টে হোস্ট করা চ্যাট অ্যাপে একটি অ্যাসিঙ্ক্রোনাস HTTP অনুরোধ পাঠায়।

  3. ইনসিডেন্ট রেসপন্স চ্যাট অ্যাপটি অনুরোধটি প্রসেস করে:

    1. অ্যাপস স্ক্রিপ্ট অ্যাডমিন এসডিকে সার্ভিসটি টিমের সদস্যদের তথ্য, যেমন ইউজার আইডি এবং ইমেল অ্যাড্রেস সংগ্রহ করে।

    2. অ্যাপস স্ক্রিপ্ট অ্যাডভান্সড চ্যাট সার্ভিস ব্যবহার করে চ্যাট এপিআই-তে একগুচ্ছ HTTP অনুরোধের মাধ্যমে, ইনসিডেন্ট রেসপন্স চ্যাট অ্যাপটি একটি ইনসিডেন্ট চ্যাট স্পেস তৈরি করে, সেটিকে টিমের সদস্যদের দিয়ে পূর্ণ করে এবং সেই স্পেসে একটি বার্তা পাঠায়।

  4. দলের সদস্যরা চ্যাট স্পেসে ঘটনাটি নিয়ে আলোচনা করেন।

  5. দলের একজন সদস্য ঘটনাটির সমাধান বোঝাতে একটি স্ল্যাশ কমান্ড ব্যবহার করেন।

    1. অ্যাপস স্ক্রিপ্ট অ্যাডভান্সড চ্যাট সার্ভিস ব্যবহার করে চ্যাট এপিআই-তে একটি HTTP কল করলে চ্যাট স্পেসের সমস্ত মেসেজ তালিকাভুক্ত হয়।

    2. ভার্টেক্স এআই তালিকাভুক্ত বার্তাগুলো গ্রহণ করে একটি সারাংশ তৈরি করে।

    3. অ্যাপস স্ক্রিপ্ট DocumentApp সার্ভিসটি একটি ডকস ডকুমেন্ট তৈরি করে এবং সেই ডকুমেন্টে ভার্টেক্স এআই-এর সারাংশ যোগ করে।

    4. ইনসিডেন্ট রেসপন্স চ্যাট অ্যাপটি সামারি ডক্স ডকুমেন্টের একটি লিঙ্ক শেয়ার করে মেসেজ পাঠানোর জন্য চ্যাট এপিআই-কে কল করে।

পরিবেশ প্রস্তুত করুন

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

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন

গুগল এপিআই কনসোল

  1. Google API কনসোলে, > IAM ও অ্যাডমিন > একটি প্রজেক্ট তৈরি করুন- এ যান।

    প্রজেক্ট তৈরি করতে যান

  2. 'প্রজেক্ট নেম' ফিল্ডে আপনার প্রজেক্টের জন্য একটি বর্ণনামূলক নাম লিখুন।

    ঐচ্ছিক: প্রজেক্ট আইডি সম্পাদনা করতে, 'সম্পাদনা' (Edit) বোতামে ক্লিক করুন। প্রজেক্ট তৈরি হয়ে গেলে তা আর পরিবর্তন করা যায় না, তাই এমন একটি আইডি বেছে নিন যা প্রজেক্টটির পুরো জীবনকাল জুড়ে আপনার প্রয়োজন মেটাবে।

  3. লোকেশন ফিল্ডে, আপনার প্রোজেক্টের জন্য সম্ভাব্য লোকেশনগুলো দেখতে ব্রাউজ-এ ক্লিক করুন। এরপর, সিলেক্ট-এ ক্লিক করুন।
  4. Create-এ ক্লিক করুন। Google API Console আপনাকে ড্যাশবোর্ড পৃষ্ঠায় নিয়ে যাবে এবং কয়েক মিনিটের মধ্যেই আপনার প্রজেক্টটি তৈরি হয়ে যাবে।

gcloud CLI

নিম্নলিখিত ডেভেলপমেন্ট এনভায়রনমেন্টগুলির মধ্যে যেকোনো একটিতে Google Cloud CLI ( gcloud ) অ্যাক্সেস করুন:

  • ক্লাউড শেল : আগে থেকে সেট আপ করা gcloud CLI সহ একটি অনলাইন টার্মিনাল ব্যবহার করতে, ক্লাউড শেল সক্রিয় করুন।
    ক্লাউড শেল সক্রিয় করুন
  • লোকাল শেল : স্থানীয় উন্নয়ন পরিবেশ ব্যবহার করতে, gcloud CLI ইনস্টলচালু করুন
    ক্লাউড প্রজেক্ট তৈরি করতে, gcloud projects create কমান্ডটি ব্যবহার করুন:
    gcloud projects create PROJECT_ID
    আপনি যে প্রজেক্টটি তৈরি করতে চান, তার আইডি দিয়ে PROJECT_ID প্রতিস্থাপন করুন।

ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করুন

গুগল এপিআই কনসোল

  1. Google API কনসোলে, বিলিং- এ যান। মেনু > বিলিং > আমার প্রজেক্টস- ক্লিক করুন।

    আমার প্রোজেক্টগুলোর বিলিং-এ যান

  2. 'একটি সংস্থা নির্বাচন করুন' -এ, আপনার গুগল ক্লাউড প্রকল্পের সাথে যুক্ত সংস্থাটি বেছে নিন।
  3. প্রজেক্ট রো-তে, অ্যাকশনস মেনু ( ) খুলুন, চেঞ্জ বিলিং-এ ক্লিক করুন এবং ক্লাউড বিলিং অ্যাকাউন্টটি বেছে নিন।
  4. অ্যাকাউন্ট সেট করুন -এ ক্লিক করুন।

gcloud CLI

  1. উপলব্ধ বিলিং অ্যাকাউন্টগুলির তালিকা পেতে, চালান:
    gcloud billing accounts list
  2. একটি গুগল ক্লাউড প্রজেক্টের সাথে একটি বিলিং অ্যাকাউন্ট লিঙ্ক করুন:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

    • PROJECT_ID হলো সেই ক্লাউড প্রজেক্টের প্রজেক্ট আইডি , যার জন্য আপনি বিলিং চালু করতে চান।
    • BILLING_ACCOUNT_ID হলো গুগল ক্লাউড প্রজেক্টের সাথে লিঙ্ক করার জন্য বিলিং অ্যাকাউন্ট আইডি

এপিআইগুলি সক্রিয় করুন

গুগল এপিআই কনসোল

  1. Google API কনসোলে, Google Chat API, Google Docs API, Admin SDK API, Google Workspace Marketplace SDK, এবং Vertex AI API সক্রিয় করুন।

    এপিআইগুলি সক্রিয় করুন

  2. আপনি সঠিক ক্লাউড প্রজেক্টে এপিআইগুলো সক্রিয় করছেন কিনা তা নিশ্চিত করুন, তারপর 'Next' বাটনে ক্লিক করুন।

  3. আপনি সঠিক API-গুলো সক্রিয় করছেন কিনা তা নিশ্চিত করুন, তারপর 'Enable'-এ ক্লিক করুন।

gcloud CLI

  1. প্রয়োজনে, gcloud config set project কমান্ড ব্যবহার করে আপনার তৈরি করা প্রজেক্টটিকে বর্তমান ক্লাউড প্রজেক্ট হিসেবে সেট করুন:

    gcloud config set project PROJECT_ID

    PROJECT_ID জায়গায় আপনার তৈরি করা ক্লাউড প্রজেক্টের প্রজেক্ট আইডিটি বসান।

  2. gcloud services enable কমান্ড ব্যবহার করে Google Chat API, Google Docs API, Admin SDK API, Google Workspace Marketplace SDK, এবং Vertex AI API সক্রিয় করুন:

    gcloud services enable chat.googleapis.com docs.googleapis.com admin.googleapis.com aiplatform.googleapis.com appsmarket-component.googleapis.com

প্রমাণীকরণ এবং অনুমোদন সেট আপ করুন

চ্যাট অ্যাপটি তার নিজস্ব ক্রেডেনশিয়াল ব্যবহার করে গুগল চ্যাট এপিআই অ্যাক্সেস করে। অ্যাপটি ব্যবহারকারীর ক্রেডেনশিয়াল দিয়ে অ্যাডমিন এসডিকে এপিআই এবং গুগল ডক্স এপিআই অ্যাক্সেস করে।

ব্যবহারকারীর প্রমাণীকরণ এবং অনুমোদন সেট আপ করুন

প্রমাণীকরণ এবং অনুমোদন চ্যাট অ্যাপটিকে কোনো ঘটনার প্রতিক্রিয়া প্রক্রিয়া করার জন্য গুগল ওয়ার্কস্পেস এবং গুগল ক্লাউডের রিসোর্স অ্যাক্সেস করতে দেয়। বিশেষত, ডকস এপিআই (Docs API) এবং অ্যাডমিন এসডিকে এপিআই (Admin SDK API) কল করার জন্য ব্যবহারকারী প্রমাণীকরণ ব্যবহৃত হয়।

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

  1. Google API কনসোলে, > Google Auth প্ল্যাটফর্ম > ব্র্যান্ডিং- এ যান।

    ব্র্যান্ডিং-এ যান

  2. আপনি যদি ইতিমধ্যেই Google Auth প্ল্যাটফর্মটি কনফিগার করে থাকেন, তাহলে আপনি Branding , Audience , এবং Data Access- এ নিম্নলিখিত OAuth Consent Screen সেটিংস কনফিগার করতে পারেন। যদি আপনি এমন কোনো বার্তা দেখতে পান যেখানে লেখা আছে ‘Google Auth প্ল্যাটফর্ম এখনও কনফিগার করা হয়নি’ , তাহলে Get Started-এ ক্লিক করুন:

    1. অ্যাপ ইনফরমেশন-এর অধীনে, অ্যাপ নেম-এর জায়গায় Incident Management টাইপ করুন।
    2. ব্যবহারকারী সহায়তা ইমেল- এ, আপনার ইমেল ঠিকানা অথবা একটি উপযুক্ত গুগল গ্রুপ নির্বাচন করুন।
    3. পরবর্তী ধাপে যান।
    4. Audience-এর অধীনে, Internal নির্বাচন করুন। যদি আপনি Internal নির্বাচন করতে না পারেন, তাহলে External নির্বাচন করুন।
    5. পরবর্তী ধাপে যান।
    6. যোগাযোগের তথ্যের অধীনে, একটি ইমেল ঠিকানা লিখুন যেখানে আপনার প্রকল্পের যেকোনো পরিবর্তন সম্পর্কে আপনাকে জানানো যাবে।
    7. পরবর্তী ধাপে যান।
    8. Finish-এর অধীনে, Google API Services ব্যবহারকারীর ডেটা নীতি পর্যালোচনা করুন এবং যদি আপনি সম্মত হন, তাহলে I agree to the Google API Services: User Data Policy নির্বাচন করুন।
    9. চালিয়ে যান-এ ক্লিক করুন।
    10. তৈরি করুন- এ ক্লিক করুন।
    11. যদি আপনি ব্যবহারকারীর ধরন হিসেবে 'এক্সটার্নাল' নির্বাচন করে থাকেন, তাহলে পরীক্ষামূলক ব্যবহারকারী যোগ করুন:
      1. দর্শকবৃন্দে ক্লিক করুন।
      2. টেস্ট ইউজার্স-এর অধীনে, অ্যাড ইউজার্স-এ ক্লিক করুন।
      3. আপনার ইমেল ঠিকানা এবং অন্য কোনো অনুমোদিত পরীক্ষামূলক ব্যবহারকারীর তথ্য প্রবেশ করান, তারপর সেভ-এ ক্লিক করুন।
  3. ডেটা অ্যাক্সেস > স্কোপ যোগ বা অপসারণ-এ ক্লিক করুন। একটি প্যানেল প্রদর্শিত হবে, যেখানে আপনার গুগল ক্লাউড প্রজেক্টে সক্রিয় করা প্রতিটি এপিআই-এর স্কোপের একটি তালিকা থাকবে।

    1. ‘Manually add scopes’- এর অধীনে, নিম্নলিখিত স্কোপগুলি পেস্ট করুন:

      • https://www.googleapis.com/auth/documents
      • https://www.googleapis.com/auth/admin.directory.user.readonly
      • https://www.googleapis.com/auth/script.external_request
      • https://www.googleapis.com/auth/userinfo.email
      • https://www.googleapis.com/auth/cloud-platform
    2. টেবিলে যোগ করুন-এ ক্লিক করুন।

    3. আপডেট-এ ক্লিক করুন।

    4. আপনার অ্যাপের জন্য প্রয়োজনীয় পরিধিগুলো নির্বাচন করার পর, ডেটা অ্যাক্সেস পৃষ্ঠায়, সেভ-এ ক্লিক করুন।

অ্যাপের প্রমাণীকরণ এবং অনুমোদন সেট আপ করুন

চ্যাট এপিআই কল করার জন্য অ্যাপ অথেন্টিকেশন ব্যবহার করা হয়।

গুগল ক্লাউড কনসোলে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

একটি পরিষেবা অ্যাকাউন্ট তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:

গুগল এপিআই কনসোল

  1. Google API কনসোলে, > IAM ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস- এ যান।

    পরিষেবা অ্যাকাউন্টগুলিতে যান

  2. সার্ভিস অ্যাকাউন্ট তৈরি করুন -এ ক্লিক করুন।
  3. সার্ভিস অ্যাকাউন্টের বিবরণ পূরণ করুন, তারপর 'তৈরি করুন এবং চালিয়ে যান' -এ ক্লিক করুন।
  4. ঐচ্ছিক: আপনার গুগল ক্লাউড প্রোজেক্টের রিসোর্সগুলিতে অ্যাক্সেস দেওয়ার জন্য আপনার সার্ভিস অ্যাকাউন্টে রোল নির্ধারণ করুন। আরও বিস্তারিত জানতে, “রিসোর্সগুলিতে অ্যাক্সেস প্রদান, পরিবর্তন এবং প্রত্যাহার” দেখুন।
  5. চালিয়ে যান-এ ক্লিক করুন।
  6. ঐচ্ছিক: সেইসব ব্যবহারকারী বা গোষ্ঠীর নাম লিখুন যারা এই পরিষেবা অ্যাকাউন্টটি দিয়ে পরিচালনা ও কার্যকলাপ সম্পাদন করতে পারবে। আরও বিস্তারিত জানতে, ‘পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ব্যবস্থাপনা’ দেখুন।
  7. Done-এ ক্লিক করুন। সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানাটি লিখে রাখুন।

gcloud CLI

  1. পরিষেবা অ্যাকাউন্ট তৈরি করুন:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. ঐচ্ছিক: আপনার গুগল ক্লাউড প্রোজেক্টের রিসোর্সগুলিতে অ্যাক্সেস দেওয়ার জন্য আপনার সার্ভিস অ্যাকাউন্টে রোল নির্ধারণ করুন। আরও বিস্তারিত জানতে, “রিসোর্সগুলিতে অ্যাক্সেস প্রদান, পরিবর্তন এবং প্রত্যাহার” দেখুন।

সার্ভিস অ্যাকাউন্টটি সার্ভিস অ্যাকাউন্ট পেজে দেখা যায়। এরপর, সার্ভিস অ্যাকাউন্টটির জন্য একটি প্রাইভেট কী তৈরি করুন।

একটি ব্যক্তিগত কী তৈরি করুন

সার্ভিস অ্যাকাউন্টের জন্য একটি প্রাইভেট কী তৈরি ও ডাউনলোড করতে, এই ধাপগুলো অনুসরণ করুন:

  1. গুগল ক্লাউড কনসোলে, > আইএএম ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস- এ যান।

    পরিষেবা অ্যাকাউন্টগুলিতে যান

  2. আপনার পরিষেবা অ্যাকাউন্ট নির্বাচন করুন।
  3. Keys > Add key > Create new key-তে ক্লিক করুন।
  4. JSON নির্বাচন করুন, তারপর Create-এ ক্লিক করুন।

    আপনার নতুন পাবলিক/প্রাইভেট কী পেয়ারটি তৈরি হয়ে আপনার মেশিনে একটি নতুন ফাইল হিসেবে ডাউনলোড হবে। ডাউনলোড করা JSON ফাইলটি আপনার ওয়ার্কিং ডিরেক্টরিতে credentials.json নামে সেভ করুন। এই ফাইলটিই এই কী-টির একমাত্র কপি। আপনার কী নিরাপদে সংরক্ষণ করার পদ্ধতি সম্পর্কে জানতে, “সার্ভিস অ্যাকাউন্ট কী ব্যবস্থাপনা” দেখুন।

  5. বন্ধ করুন-এ ক্লিক করুন।

সার্ভিস অ্যাকাউন্ট সম্পর্কে আরও তথ্যের জন্য, গুগল ক্লাউড আইএএম ডকুমেন্টেশনে সার্ভিস অ্যাকাউন্টস অংশটি দেখুন।

একটি গুগল ওয়ার্কস্পেস মার্কেটপ্লেস-উপযোগী OAuth ক্লায়েন্ট তৈরি করুন

Google Workspace Marketplace-এর সাথে সামঞ্জস্যপূর্ণ একটি OAuth ক্লায়েন্ট তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:

  1. Google API কনসোলে, > IAM ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস- এ যান।

    পরিষেবা অ্যাকাউন্টগুলিতে যান

  2. আপনার চ্যাট অ্যাপের জন্য তৈরি করা সার্ভিস অ্যাকাউন্টটিতে ক্লিক করুন।

  3. উন্নত সেটিংস-এ ক্লিক করুন।

  4. Google Workspace Marketplace-সামঞ্জস্যপূর্ণ OAuth ক্লায়েন্ট তৈরি করতে ক্লিক করুন।

  5. চালিয়ে যান-এ ক্লিক করুন।

একটি নিশ্চিতকরণ বার্তা প্রদর্শিত হয়, যেখানে বলা থাকে যে একটি গুগল ওয়ার্কস্পেস মার্কেটপ্লেস-উপযোগী OAuth ক্লায়েন্ট তৈরি করা হয়েছে।

চ্যাট অ্যাপ তৈরি এবং স্থাপন করুন

পরবর্তী অংশে, আপনি একটি সম্পূর্ণ অ্যাপস স্ক্রিপ্ট প্রজেক্ট কপি ও আপডেট করবেন, যেটিতে আপনার চ্যাট অ্যাপের জন্য প্রয়োজনীয় সমস্ত অ্যাপ্লিকেশন কোড রয়েছে, তাই প্রতিটি ফাইল কপি ও পেস্ট করার প্রয়োজন নেই।

কিছু ফাংশনের নামের শেষে আন্ডারস্কোর থাকে, যেমন ChatApp.gs এর processSlashCommand_() । ব্রাউজারে খোলা হলে, এই আন্ডারস্কোরটি ইনসিডেন্ট ইনিশিয়ালাইজেশন ওয়েব পেজ থেকে ফাংশনটিকে আড়াল করে রাখে। আরও তথ্যের জন্য, প্রাইভেট ফাংশন দেখুন।

অ্যাপস স্ক্রিপ্ট দুই ধরনের ফাইল সমর্থন করে, .gs স্ক্রিপ্ট এবং .html ফাইল। এই সমর্থনটি মেনে চলার জন্য, একটি HTML ফাইলের মধ্যে অ্যাপের ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্ট <script /> ট্যাগের ভেতরে এবং এর CSS <style /> ট্যাগের ভেতরে অন্তর্ভুক্ত করা হয়।

চাইলে, আপনি গিটহাবে সম্পূর্ণ প্রজেক্টটি দেখতে পারেন।

গিটহাবে দেখুন

এখানে প্রতিটি ফাইলের একটি সংক্ষিপ্ত বিবরণ দেওয়া হলো:

Consts.gs

অন্যান্য কোড ফাইল দ্বারা ব্যবহৃত ধ্রুবকসমূহ সংজ্ঞায়িত করে, যার মধ্যে রয়েছে আপনার ক্লাউড প্রজেক্ট আইডি, ভার্টেক্স এআই লোকেশন আইডি, সার্ভিস অ্যাকাউন্টের জন্য অ্যাপ ক্রেডেনশিয়াল এবং কোনো ইনসিডেন্ট বন্ধ করার জন্য স্ল্যাশ কমান্ড আইডি।

Consts.gs কোড দেখুন

apps-script/incident-response-app-auth/Consts.gs
const PROJECT_ID = 'replace-with-your-project-id';
const CLOSE_INCIDENT_COMMAND_ID = 1;
const APP_CREDENTIALS = 'replace-with-your-app-credentials';
const APP_CREDENTIALS_SCOPES = 'https://www.googleapis.com/auth/chat.bot https://www.googleapis.com/auth/chat.app.memberships https://www.googleapis.com/auth/chat.app.spaces.create';
const VERTEX_AI_LOCATION_ID = 'us-central1';
const MODEL_ID = 'gemini-1.5-flash-002';
ChatApp.gs

মেসেজ, কার্ড ক্লিক, স্ল্যাশ কমান্ড এবং ডায়ালগ সহ চ্যাট ইন্টারঅ্যাকশন ইভেন্টগুলি পরিচালনা করে। ইনসিডেন্ট সমাধানের বিবরণ সংগ্রহ করার জন্য /closeIncident স্ল্যাশ কমান্ডের জবাবে একটি ডায়ালগ খোলে। চ্যাট এপিআই-তে spaces.messages.list মেথড কল করে স্পেসের মেসেজগুলি পড়ে। অ্যাপস স্ক্রিপ্টে অ্যাডমিন এসডিকে ডিরেক্টরি সার্ভিস ব্যবহার করে ইউজার আইডি সংগ্রহ করে।

ChatApp.gs কোড দেখুন

apps-script/incident-response-app-auth/ChatApp.gs
/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * This app only responds to a slash command with the ID 1 ("/closeIncident").
 * It will respond to any other message with a simple "Hello" text message.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  if (event.message.slashCommand) {
    return processSlashCommand_(event);
  }
  return { "text": "Hello from Incident Response app!" };
}

/**
 * Responds to a CARD_CLICKED event in Google Chat.
 *
 * This app only responds to one kind of dialog (Close Incident).
 *
 * @param {Object} event the event object from Google Chat
 */
function onCardClick(event) {
  if (event.isDialogEvent) {
    if (event.dialogEventType == 'SUBMIT_DIALOG') {
      return processSubmitDialog_(event);
    }
    return {
      actionResponse: {
        type: "DIALOG",
        dialogAction: {
          actionStatus: "OK"
        }
      }
    };
  }
}

/**
 * Responds to a MESSAGE event with a Slash command in Google Chat.
 *
 * This app only responds to a slash command with the ID 1 ("/closeIncident")
 * by returning a Dialog.
 *
 * @param {Object} event the event object from Google Chat
 */
function processSlashCommand_(event) {
  if (event.message.slashCommand.commandId != CLOSE_INCIDENT_COMMAND_ID) {
    return {
      "text": "Command not recognized. Use the command `/closeIncident` to close the incident managed by this space."
    };
  }
  const sections = [
    {
      header: "Close Incident",
      widgets: [
        {
          textInput: {
            label: "Please describe the incident resolution",
            type: "MULTIPLE_LINE",
            name: "description"
          }
        },
        {
          buttonList: {
            buttons: [
              {
                text: "Close Incident",
                onClick: {
                  action: {
                    function: "closeIncident"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ];
  return {
    actionResponse: {
      type: "DIALOG",
      dialogAction: {
        dialog: {
          body: {
            sections,
          }
        }
      }
    }
  };
}

/**
 * Responds to a CARD_CLICKED event with a Dialog submission in Google Chat.
 *
 * This app only responds to one kind of dialog (Close Incident).
 * It creates a Doc with a summary of the incident information and posts a message
 * to the space with a link to the Doc.
 *
 * @param {Object} event the event object from Google Chat
 */
function processSubmitDialog_(event) {
  const resolution = event.common.formInputs.description[""].stringInputs.value[0];
  const chatHistory = concatenateAllSpaceMessages_(event.space.name);
  const chatSummary = summarizeChatHistory_(chatHistory);
  const docUrl = createDoc_(event.space.displayName, resolution, chatHistory, chatSummary);
  return {
    actionResponse: {
      type: "NEW_MESSAGE",
    },
    text: `Incident closed with the following resolution: ${resolution}\n\nHere is the automatically generated post-mortem:\n${docUrl}`
  };
}

/**
 * Lists all the messages in the Chat space, then concatenate all of them into
 * a single text containing the full Chat history.
 *
 * For simplicity for this demo, it only fetches the first 100 messages.
 *
 * Messages with slash commands are filtered out, so the returned history will
 * contain only the conversations between users and not app command invocations.
 *
 * @return {string} a text containing all the messages in the space in the format:
 *          Sender's name: Message
 */
function concatenateAllSpaceMessages_(spaceName) {
  // Call Chat API method spaces.messages.list
  const response = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 });
  const messages = response.messages;
  // Fetch the display names of the message senders and returns a text
  // concatenating all the messages.
  let userMap = new Map();
  return messages
    .filter(message => message.slashCommand === undefined)
    .map(message => `${getUserDisplayName_(userMap, message.sender.name)}: ${message.text}`)
    .join('\n');
}

/**
 * Obtains the display name of a user by using the Admin Directory API.
 *
 * The fetched display name is cached in the provided map, so we only call the API
 * once per user.
 *
 * If the user does not have a display name, then the full name is used.
 *
 * @param {Map} userMap a map containing the display names previously fetched
 * @param {string} userName the resource name of the user
 * @return {string} the user's display name
 */
function getUserDisplayName_(userMap, userName) {
  if (userMap.has(userName)) {
    return userMap.get(userName);
  }
  let displayName = 'Unknown User';
  try {
    const user = AdminDirectory.Users.get(
      userName.replace("users/", ""),
      { projection: 'BASIC', viewType: 'domain_public' });
    displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
  } catch (e) {
    // Ignore error if the API call fails (for example, because it's an
    // out-of-domain user or Chat app)) and just use 'Unknown User'.
  }
  userMap.set(userName, displayName);
  return displayName;
}
ChatSpaceCreator.gs

ব্যবহারকারীরা ঘটনা সূচনা ওয়েব পেজে যে ফর্ম ডেটা প্রবেশ করান, তা গ্রহণ করে এবং সেই ডেটা ব্যবহার করে একটি চ্যাট স্পেস তৈরি ও পূরণ করার মাধ্যমে ঘটনাটি সম্পর্কে একটি বার্তা পোস্ট করে।

ChatSpaceCreator.gs কোড দেখুন

apps-script/incident-response-app-auth/ChatSpaceCreator.gs
/**
 * Handles an incident by creating a chat space, adding members, and posting a message.
 * All the actions are done using application credentials.
 *
 * @param {Object} formData - The data submitted by the user. It should contain the fields:
 *                           - title: The display name of the chat space.
 *                           - description: The description of the incident.
 *                           - users: A comma-separated string of user emails to be added to the space.
 * @return {string} The resource name of the new space.
 */
function handleIncident(formData) {
  const users = formData.users.trim().length > 0 ? formData.users.split(',') : [];
  const service = getService_();
  if (!service.hasAccess()) {
    console.error(service.getLastError());
    return;
   }
  const spaceName = createChatSpace_(formData.title, service);
  createHumanMembership_(spaceName, getUserEmail(), service);
  for (const user of users ){
    createHumanMembership_(spaceName, user, service);
  }
  createMessage_(spaceName, formData.description, service);
  return spaceName;
}
/**
 * Creates a chat space with application credentials.
 *
 * @param {string} displayName - The name of the chat space.
 * @param {object} service - The credentials of the service account.
 * @returns {string} The resource name of the new space.
*/
function createChatSpace_(displayName, service) {
  try {
    // For private apps, the alias can be used
    const my_customer_alias = "customers/my_customer";
    // Specify the space to create.
    const space = {
        displayName: displayName,
        spaceType: 'SPACE',                
        customer: my_customer_alias
    };
    // Call Chat API with a service account to create a message.
    const createdSpace = Chat.Spaces.create(
        space,
        {},
        // Authenticate with the service account token.
        {'Authorization': 'Bearer ' + service.getAccessToken()});
    return createdSpace.name;
  } catch (err) {
    // TODO (developer) - Handle exception.
    console.log('Failed to create space with error %s', err.message);
  }
}
/*
 * Creates a chat message with application credentials.
 *
 * @param {string} spaceName - The resource name of the space.
 * @param {string} message - The text to be posted.
 * @param {object} service - The credentials of the service account.
 * @return {string} the resource name of the new space.
 */
function createMessage_(spaceName, message, service) {
  try {
    // Call Chat API with a service account to create a message.
    const result = Chat.Spaces.Messages.create(
        {'text': message},
        spaceName,
        {},
        // Authenticate with the service account token.
        {'Authorization': 'Bearer ' + service.getAccessToken()});

  } catch (err) {
    // TODO (developer) - Handle exception.
    console.log('Failed to create message with error %s', err.message);
  }
}
/**
 * Creates a human membership in a chat space with application credentials.
 *
 * @param {string} spaceName - The resource name of the space.
 * @param {string} email - The email of the user to be added.
 * @param {object} service - The credentials of the service account.
 */
function createHumanMembership_(spaceName, email, service){
  try{
    const membership = {
      member: {
        name: 'users/'+email,
        // User type for the membership
        type: 'HUMAN'
      }
    };
    const result = Chat.Spaces.Members.create(
      membership,
      spaceName,
      {},
      {'Authorization': 'Bearer ' + service.getAccessToken()}
    );
  } catch (err){
    console.log('Failed to create membership with error %s', err.message)
  }

}

 /*
 * Creates a service for the service account.
 * @return {object}  - The credentials of the service account.
 */
function getService_() {
  return OAuth2.createService(APP_CREDENTIALS.client_email)
      .setTokenUrl('https://oauth2.googleapis.com/token')
      .setPrivateKey(APP_CREDENTIALS.private_key)
      .setIssuer(APP_CREDENTIALS.client_email)
      .setSubject(APP_CREDENTIALS.client_email)
      .setScope(APP_CREDENTIALS_SCOPES)
      .setPropertyStore(PropertiesService.getScriptProperties());
}
DocsApi.gs

ব্যবহারকারীর গুগল ড্রাইভে একটি ডক্স ডকুমেন্ট তৈরি করার জন্য ডক্স এপিআই-কে কল করে এবং VertexAiApi.gs এ তৈরি করা ঘটনার তথ্যের একটি সারসংক্ষেপ সেই ডকুমেন্টে লিখে দেয়।

DocsApi.gs কোড দেখুন

apps-script/incident-response-app-auth/DocsApi.gs
/**
 * Creates a Doc in the user's Google Drive and writes a summary of the incident information to it.
 *
 * @param {string} title The title of the incident
 * @param {string} resolution Incident resolution described by the user
 * @param {string} chatHistory The whole Chat history be included in the document
 * @param {string} chatSummary A summary of the Chat conversation to be included in the document
 * @return {string} the URL of the created Doc
 */
function createDoc_(title, resolution, chatHistory, chatSummary) {
  let doc = DocumentApp.create(title);
  let body = doc.getBody();
  body.appendParagraph(`Post-Mortem: ${title}`).setHeading(DocumentApp.ParagraphHeading.TITLE);
  body.appendParagraph("Resolution").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(resolution);
  body.appendParagraph("Summary of the conversation").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(chatSummary);
  body.appendParagraph("Full Chat history").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(chatHistory);
  return doc.getUrl();
}
VertexAiApi.gs

ভার্টেক্স এআই এপিআই ব্যবহার করে চ্যাট স্পেসের কথোপকথনের সারসংক্ষেপ তৈরি করা হয়। এই সারসংক্ষেপটি DocsAPI.gs এ বিশেষভাবে তৈরি একটি ডকুমেন্টে পোস্ট করা হয়।

VertexAiApi.gs কোড দেখুন

apps-script/incident-response-app-auth/VertexAiApi.gs
/**
 * Summarizes a Chat conversation using the Vertex AI text prediction API.
 *
 * @param {string} chatHistory The Chat history that will be summarized.
 * @return {string} The content from the text prediction response.
 */


function summarizeChatHistory_(chatHistory) {

  const API_ENDPOINT = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}/publishers/google/models/${MODEL_ID}:generateContent`;
  const prompt = "Summarize the following conversation between Engineers resolving an incident"
      + " in a few sentences. Use only the information from the conversation.\n\n" + chatHistory;
  // Get the access token.
  const accessToken = ScriptApp.getOAuthToken();

  const headers = {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json',
  };
  const payload = {
    'contents': {
      'role': 'user',
      'parts' : [
        {
          'text': prompt
        }
      ]
    }
  }
  const options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(payload),
    'muteHttpExceptions': true,
  };
  try {
    const response = UrlFetchApp.fetch(API_ENDPOINT, options);
    const responseCode = response.getResponseCode();
    const responseText = response.getContentText();

    if (responseCode === 200) {
      const jsonResponse = JSON.parse(responseText);
      console.log(jsonResponse)
      if (jsonResponse.candidates && jsonResponse.candidates.length > 0) {
        return jsonResponse.candidates[0].content.parts[0].text; // Access the summarized text
      } else {
        return "No summary found in response.";
      }

    } else {
      console.error("Vertex AI API Error:", responseCode, responseText);
      return `Error: ${responseCode} - ${responseText}`;
    }
  } catch (e) {
    console.error("UrlFetchApp Error:", e);
    return "Error: " + e.toString();
  }
}
WebController.gs

ঘটনা প্রারম্ভিককরণ ওয়েবসাইটটি পরিবেশন করে।

WebController.gs কোড দেখুন

apps-script/incident-response-app-auth/WebController.gs
/**
 * Serves the web page from Index.html.
 */
function doGet() {
  return HtmlService
    .createTemplateFromFile('Index')
    .evaluate();
}

/**
 * Serves the web content from the specified filename.
 */
function include(filename) {
  return HtmlService
    .createHtmlOutputFromFile(filename)
    .getContent();
}

/**
 * Returns the email address of the user running the script.
 */
function getUserEmail() {
  return Session.getActiveUser().getEmail();
}
Index.html

ইনসিডেন্ট ইনিশিয়ালাইজেশন ওয়েবসাইটটি যে HTML কোড দিয়ে গঠিত।

Index.html কোড দেখুন

apps-script/incident-response-app-auth/Index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>
    <?!= include('Stylesheet'); ?>
  </head>
  <body>
    <div class="container">
      <div class="content">
        <h1>Incident Manager</h1>
        <form id="incident-form" onsubmit="handleFormSubmit(this)">
          <div id="form">
            <p>
              <label for="title">Incident title</label><br/>
              <input type="text" name="title" id="title" />
            </p>
            <p>
              <label for="users">Incident responders</label><br/>
              <small>
                Please enter a comma-separated list of email addresses of the users
                that should be added to the space.
                Do not include <?= getUserEmail() ?> as it will be added automatically.
              </small><br/>
              <input type="text" name="users" id="users" />
            </p>
            <p>
              <label for="description">Initial message</label></br>
              <small>This message will be posted after the space is created.</small><br/>
              <textarea name="description" id="description"></textarea>
            </p>
            <p class="text-center">
              <input type="submit" value="CREATE CHAT SPACE" />
            </p>
          </div>
          <div id="output" class="hidden"></div>
          <div id="clear" class="hidden">
            <input type="reset" value="CREATE ANOTHER INCIDENT" onclick="onReset()" />
          </div>
        </form>
      </div>
    </div>
    <?!= include('JavaScript'); ?>
  </body>
</html>
JavaScript.html

ইনসিডেন্ট ইনিশিয়ালাইজেশন ওয়েবসাইটের জন্য ফর্মের সাবমিট, ত্রুটি এবং ক্লিয়ার সহ বিভিন্ন আচরণ পরিচালনা করে। WebController.gs এর কাস্টম ইনক্লুড ফাংশনের মাধ্যমে এটিকে Index.html এ অন্তর্ভুক্ত include হয়েছে।

JavaScript.html কোড দেখুন

অ্যাপস-স্ক্রিপ্ট/ইনসিডেন্ট-রেসপন্স-অ্যাপ-অথ/জাভাস্ক্রিপ্ট.html
<script>
  var formDiv = document.getElementById('form');
  var outputDiv = document.getElementById('output');
  var clearDiv = document.getElementById('clear');

  function handleFormSubmit(formObject) {
    event.preventDefault();
    outputDiv.innerHTML = 'Please wait while we create the space...';
    hide(formDiv);
    show(outputDiv);
    google.script.run
      .withSuccessHandler(updateOutput)
      .withFailureHandler(onFailure)
      .handleIncident(formObject);
  }

  function updateOutput(response) {
    var spaceId = response.replace('spaces/', '');
    outputDiv.innerHTML =
      '<p>Space created!</p><p><a href="https://mail.google.com/chat/#chat/space/'
        + spaceId
        + '" target="_blank">Open space</a></p>';
    show(outputDiv);
    show(clearDiv);
  }

  function onFailure(error) {
    outputDiv.innerHTML = 'ERROR: ' + error.message;
    outputDiv.classList.add('error');
    show(outputDiv);
    show(clearDiv);
  }

  function onReset() {
    outputDiv.innerHTML = '';
    outputDiv.classList.remove('error');
    show(formDiv);
    hide(outputDiv);
    hide(clearDiv);
  }

  function hide(element) {
    element.classList.add('hidden');
  }

  function show(element) {
    element.classList.remove('hidden');
  }
</script>
Stylesheet.html

ইনসিডেন্ট ইনিশিয়ালাইজেশন ওয়েবসাইটের CSS। এটি WebController.gs এর কাস্টম include ফাংশনের মাধ্যমে Index.html এ অন্তর্ভুক্ত করা হয়েছে।

Stylesheet.html কোড দেখুন

apps-script/incident-response-app-auth/Stylesheet.html
<style>
  * {
    box-sizing: border-box;
  }
  body {
    font-family: Roboto, Arial, Helvetica, sans-serif;
  }
  div.container {
    display: flex;
    justify-content: center;
    align-items: center;
    position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;
  }
  div.content {
    width: 80%;
    max-width: 1000px;
    padding: 1rem;
    border: 1px solid #999;
    border-radius: 0.25rem;
    box-shadow: 0 2px 2px 0 rgba(66, 66, 66, 0.08), 0 2px 4px 2px rgba(66, 66, 66, 0.16);
  }
  h1 {
    text-align: center;
    padding-bottom: 1rem;
    margin: 0 -1rem 1rem -1rem;
    border-bottom: 1px solid #999;
  }
 #output {
    text-align: center;
    min-height: 250px;
  }
  div#clear {
    text-align: center;
    padding-top: 1rem;
    margin: 1rem -1rem 0 -1rem;
    border-top: 1px solid #999;
  }
  input[type=text], textarea {
    width: 100%;
    padding: 1rem 0.5rem;
    margin: 0.5rem 0;
    border: 0;
    border-bottom: 1px solid #999;
    background-color: #f0f0f0;
  }
  textarea {
    height: 5rem;
  }
  small {
    color: #999;
  }
  input[type=submit], input[type=reset] {
    padding: 1rem;
    border: none;
    background-color: #6200ee;
    color: #fff;
    border-radius: 0.25rem;
    width: 25%;
  }
  .hidden {
    display: none;
  }
  .text-center {
    text-align: center;
  }
  .error {
    color: red;
  }
</style>

আপনার ক্লাউড প্রজেক্ট নম্বর এবং আইডি খুঁজুন

  1. গুগল এপিআই কনসোলে আপনার ক্লাউড প্রজেক্টে যান।

    গুগল এপিআই কনসোলে যান

  2. সেটিংস এবং > প্রজেক্ট সেটিংস-এ ক্লিক করুন।

  3. প্রজেক্ট নম্বর এবং প্রজেক্ট আইডি ফিল্ডের মানগুলো লিখে রাখুন। পরবর্তী বিভাগগুলোতে আপনি এগুলো ব্যবহার করবেন।

অ্যাপস স্ক্রিপ্ট প্রজেক্টটি তৈরি করুন

একটি অ্যাপস স্ক্রিপ্ট প্রজেক্ট তৈরি করতে এবং এটিকে আপনার ক্লাউড প্রজেক্টের সাথে সংযুক্ত করতে:

  1. "Respond to incidents with Google Chat Apps Script" প্রজেক্টটি খুলতে নিচের বাটনটিতে ক্লিক করুন।
    প্রকল্পটি খুলুন
  2. Overview-তে ক্লিক করুন।
  3. ওভারভিউ পৃষ্ঠায়, ক্লিক করুন অনুলিপি তৈরির আইকন একটি অনুলিপি তৈরি করুন
  4. আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টের কপিটির নামকরণ করুন:

    1. Google Chat-এর মাধ্যমে ঘটনাগুলোর প্রতিক্রিয়া জানাতে কপি করতে ক্লিক করুন।

    2. প্রজেক্টের শিরোনামে Incident Management Chat app টাইপ করুন।

    3. রিনেম-এ ক্লিক করুন।

  5. আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টের কপিতে, Consts.gs ফাইলটিতে যান এবং YOUR_PROJECT_ID জায়গায় আপনার ক্লাউড প্রজেক্টের আইডিটি বসান।

অ্যাপস স্ক্রিপ্ট প্রজেক্টের ক্লাউড প্রজেক্ট সেট করুন

  1. আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে ক্লিক করুন প্রজেক্ট সেটিংসের জন্য আইকন প্রকল্প সেটিংস
  2. Google Cloud Platform (GCP) Project- এর অধীনে, Change project-এ ক্লিক করুন।
  3. GCP প্রজেক্ট নম্বরের ক্ষেত্রে, আপনার ক্লাউড প্রজেক্টের নম্বরটি পেস্ট করুন।
  4. 'সেট প্রজেক্ট'-এ ক্লিক করুন। ক্লাউড প্রজেক্ট এবং অ্যাপস স্ক্রিপ্ট প্রজেক্ট এখন সংযুক্ত হয়েছে।

একটি অ্যাপস স্ক্রিপ্ট ডিপ্লয়মেন্ট তৈরি করুন

এখন যেহেতু সমস্ত কোড ঠিকঠাকভাবে বসানো হয়ে গেছে, অ্যাপস স্ক্রিপ্ট প্রজেক্টটি ডিপ্লয় করুন। গুগল ক্লাউডে চ্যাট অ্যাপটি কনফিগার করার সময় আপনি ডিপ্লয়মেন্ট আইডিটি ব্যবহার করবেন।

  1. অ্যাপস স্ক্রিপ্টে, ইনসিডেন্ট রেসপন্স অ্যাপের প্রজেক্টটি খুলুন।

    অ্যাপস স্ক্রিপ্টে যান

  2. Deploy > New deployment-এ ক্লিক করুন।

  3. যদি অ্যাড-অন এবং ওয়েব অ্যাপ আগে থেকে নির্বাচিত না থাকে, তাহলে 'Select type'- এর পাশে 'deployment types'-এ ক্লিক করুন। প্রজেক্ট সেটিংসের জন্য আইকন এবং অ্যাড-অনওয়েব অ্যাপ নির্বাচন করুন।

  4. Description অংশে এই ভার্সনটির জন্য একটি বিবরণ লিখুন, যেমন – Complete version of incident management app

  5. 'Execute as'- এ, ওয়েব অ্যাপ অ্যাক্সেসকারী ব্যবহারকারীকে নির্বাচন করুন।

  6. ‘কার অ্যাক্সেস আছে’ (Who has access) অংশে, আপনার ওয়ার্কস্পেস অর্গানাইজেশনের মধ্যে থাকা যে কাউকে (Anyone within your Workspace organization) নির্বাচন করুন, যেখানে ‘আপনার ওয়ার্কস্পেস অর্গানাইজেশন’ হলো আপনার গুগল ওয়ার্কস্পেস অর্গানাইজেশনের নাম।

  7. ডিপ্লয়-এ ক্লিক করুন। অ্যাপস স্ক্রিপ্ট সফল ডিপ্লয়মেন্ট রিপোর্ট করে এবং একটি ডিপ্লয়মেন্ট আইডি ও ইনসিডেন্ট ইনিশিয়ালাইজেশন ওয়েব পেজের জন্য একটি ইউআরএল প্রদান করে।

  8. পরবর্তীতে কোনো ইনসিডেন্ট শুরু করার সময় ব্যবহারের জন্য ওয়েব অ্যাপের URL-টি লিখে রাখুন। Deployment ID- টি কপি করুন। Google API Console-এ চ্যাট অ্যাপ কনফিগার করার সময় আপনি এই ID-টি ব্যবহার করবেন।

  9. সম্পন্ন ক্লিক করুন।

গুগল এপিআই কনসোলে চ্যাট অ্যাপটি কনফিগার করুন।

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

  1. Google API কনসোলে, মেনু এপিআই ও পরিষেবা > সক্রিয় এপিআই ও পরিষেবা > গুগল চ্যাট এপিআই > কনফিগারেশন- এ ক্লিক করুন

    চ্যাট এপিআই কনফিগারেশনে যান

  2. 'এই চ্যাট অ্যাপটিকে একটি গুগল ওয়ার্কস্পেস অ্যাড-অন হিসাবে তৈরি করুন ' বিকল্পটি থেকে টিক চিহ্ন তুলে দিন। নিশ্চিত করার জন্য একটি ডায়ালগ বক্স খুলবে। ডায়ালগ বক্সে, 'অক্ষম করুন' (Disable) বোতামে ক্লিক করুন।

  3. অ্যাপের নামে , Incident Management টাইপ করুন।

  4. Avatar URL-https://developers.google.com/chat/images/quickstart-app-avatar.png টাইপ করুন।

  5. বিবরণে লিখুন, Responds to incidents.

  6. ইন্টারেক্টিভ ফিচার সক্ষম করুন টগলটি অন অবস্থানে ক্লিক করুন।

  7. Functionality-এর অধীনে, Join spaces and group conversations নির্বাচন করুন।

  8. সংযোগ সেটিংস-এর অধীনে, অ্যাপস স্ক্রিপ্ট নির্বাচন করুন।

  9. Deployment ID- এর জায়গায়, অ্যাপস স্ক্রিপ্ট প্রজেক্ট ডিপ্লয়মেন্ট থেকে আগে কপি করা অ্যাপস স্ক্রিপ্ট ডিপ্লয়মেন্ট আইডি-টি পেস্ট করুন।

  10. একটি স্ল্যাশ কমান্ড নিবন্ধন করুন যা সম্পূর্ণরূপে বাস্তবায়িত চ্যাট অ্যাপটি ব্যবহার করে:

    1. Commands-এর অধীনে, Add a command-এ ক্লিক করুন।

    2. কমান্ড আইডিতে 1 টাইপ করুন।

    3. বিবরণে , Closes the incident being discussed in the space.

    4. কমান্ড টাইপ-এর অধীনে, স্ল্যাশ কমান্ড নির্বাচন করুন।

    5. স্ল্যাশ কমান্ডের নামে , /closeIncident টাইপ করুন।

    6. নির্বাচন করলে একটি ডায়ালগ বক্স খোলে

    7. Done-এ ক্লিক করুন। স্ল্যাশ কমান্ডটি নিবন্ধিত এবং তালিকাভুক্ত হয়ে যাবে।

  11. ‘Visibility’-এর অধীনে, ‘Make this Chat app available to specific people and groups in Your Workspace Domain’ নির্বাচন করুন এবং আপনার ইমেল ঠিকানা লিখুন।

  12. লগস-এর অধীনে, ত্রুটি লগ করার বিকল্পটি লগিং-এ নির্বাচন করুন।

  13. সেভ-এ ক্লিক করুন। একটি কনফিগারেশন সেভ হওয়ার মেসেজ দেখা যাবে, যার মানে অ্যাপটি পরীক্ষার জন্য প্রস্তুত।

প্রশাসকের অনুমোদন গ্রহণ করুন

প্রশাসকের অনুমোদন পেতে হলে, আপনাকে অবশ্যই গুগল ওয়ার্কস্পেস মার্কেটপ্লেস এসডিকে-তে চ্যাট অ্যাপটি কনফিগার করতে হবে।

Google Workspace Marketplace SDK-তে চ্যাট অ্যাপটি কনফিগার করুন।

Google Workspace Marketplace SDK-তে চ্যাট অ্যাপটি কনফিগার করতে, এই ধাপগুলো অনুসরণ করুন:

  1. Google API Console-এ, Menu APIs & Services > Enabled APIs & services > Google Workspace Marketplace SDK > App Configuration- এ যান

    অ্যাপ কনফিগারেশনে যান

  2. অ্যাপ কনফিগারেশন পৃষ্ঠাটি সম্পূর্ণ করুন। আপনি আপনার চ্যাট অ্যাপটি কীভাবে কনফিগার করবেন তা নির্ভর করে আপনার উদ্দিষ্ট দর্শক কারা এবং অন্যান্য বিষয়ের উপর। অ্যাপ কনফিগারেশন পৃষ্ঠাটি সম্পূর্ণ করার জন্য সাহায্যের প্রয়োজন হলে, SDK-তে আপনার অ্যাপ কনফিগার করুন দেখুন। এই নির্দেশিকার জন্য, নিম্নলিখিত তথ্যগুলি প্রবেশ করান:

    1. অ্যাপ দৃশ্যমানতার অধীনে, ব্যক্তিগত নির্বাচন করুন।
    2. ইনস্টলেশন সেটিংস-এর অধীনে, অ্যাডমিন ইনস্টল নির্বাচন করুন।
    3. অ্যাপ ইন্টিগ্রেশন-এর অধীনে, চ্যাট অ্যাপ নির্বাচন করুন।
    4. OAuth স্কোপের অধীনে, নিম্নলিখিত স্কোপগুলি লিখুন:
      • https://www.googleapis.com/auth/chat.app.spaces
      • https://www.googleapis.com/auth/chat.app.memberships
    5. ডেভেলপার তথ্যের অধীনে, আপনার ডেভেলপার নাম , ডেভেলপার ওয়েবসাইট ইউআরএল এবং ডেভেলপার ইমেল লিখুন।
    6. খসড়া সংরক্ষণ করুন- এ ক্লিক করুন।

অ্যাপটি কনফিগার করার পর, স্টোর লিস্টিংটি আপডেট করুন:

  1. Google Cloud কনসোলে, মেনু > এপিআই ও পরিষেবা > সক্রিয় এপিআই ও পরিষেবা > Google Workspace Marketplace SDK > স্টোর তালিকা-তে যান।
  2. অ্যাপের বিবরণে , বিভাগ হিসেবে ওয়েব ডেভেলপমেন্ট নির্বাচন করুন।
  3. গ্রাফিক অ্যাসেটস -এ, অনুরোধ করা ফরম্যাটে অ্যাপ্লিকেশন আইকনগুলো আপলোড করুন।
  4. স্ক্রিনশট অংশে অ্যাপ্লিকেশনটির একটি স্ক্রিনশট আপলোড করুন।
  5. সাপোর্ট লিঙ্কস- এ একটি টার্মস অফ সার্ভিস ইউআরএল, প্রাইভেসি ইউআরএল এবং সাপোর্ট ইউআরএল পূরণ করুন।
  6. ডিস্ট্রিবিউশন- এ, সেই অঞ্চলগুলি নির্বাচন করুন যেখানে এই অ্যাপ্লিকেশনটি উপলব্ধ হবে।
  7. প্রকাশ করুন-এ ক্লিক করুন।

প্রশাসকের অনুমোদন নিন।

এখন যেহেতু আপনার পরিষেবা অ্যাকাউন্টটি অ্যাডমিনিস্ট্রেটর অনুমোদন পাওয়ার জন্য কনফিগার করা হয়েছে, তাই ‘চ্যাট অ্যাপের জন্য অনুমোদন সেট আপ করুন’ -এ দেওয়া ধাপগুলো অনুসরণ করে একজন Google Workspace অ্যাডমিনিস্ট্রেটরের কাছ থেকে অনুমোদনটি নিন।

চ্যাট অ্যাপটি পরীক্ষা করুন

ইনসিডেন্ট ম্যানেজমেন্ট চ্যাট অ্যাপটি পরীক্ষা করার জন্য, ওয়েব পেজ থেকে একটি ইনসিডেন্ট শুরু করুন এবং যাচাই করুন যে চ্যাট অ্যাপটি প্রত্যাশিতভাবে কাজ করছে:

  1. অ্যাপস স্ক্রিপ্ট ডিপ্লয়মেন্ট ওয়েব অ্যাপের ইউআরএল-এ যান।

  2. যখন অ্যাপস স্ক্রিপ্ট আপনার ডেটা অ্যাক্সেস করার অনুমতি চাইবে, তখন ‘Review permissions’- এ ক্লিক করুন, আপনার Google Workspace ডোমেইনে একটি উপযুক্ত Google অ্যাকাউন্ট দিয়ে সাইন ইন করুন এবং ‘Allow’-এ ক্লিক করুন।

  3. ইনসিডেন্ট ইনিশিয়ালাইজেশন ওয়েব পেজটি খোলে। পরীক্ষার তথ্য প্রবেশ করান:

    1. ঘটনার শিরোনামে , The First Incident টাইপ করুন।
    2. ঐচ্ছিকভাবে, 'ইনসিডেন্ট রেসপন্ডার' অংশে আপনার সহকর্মী ইনসিডেন্ট রেসপন্ডারদের ইমেল ঠিকানা লিখুন। তাদের অবশ্যই আপনার গুগল ওয়ার্কস্পেস অর্গানাইজেশনের গুগল চ্যাট অ্যাকাউন্টধারী ব্যবহারকারী হতে হবে, অন্যথায় স্পেস তৈরি করা যাবে না। আপনার নিজের ইমেল ঠিকানা লিখবেন না, কারণ এটি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়ে যায়।
    3. প্রাথমিক বার্তায় , Testing the incident management Chat app.
  4. চ্যাট স্পেস তৈরি করুন- এ ক্লিক করুন। একটি creating space বার্তা প্রদর্শিত হবে।

  5. স্পেসটি তৈরি হয়ে গেলে, ‘ Space created! ’ বার্তাটি দেখা যায়। ‘ওপেন স্পেস’- এ ক্লিক করলে, চ্যাটের মধ্যে স্পেসটি একটি নতুন ট্যাবে খুলে যাবে।

  6. ঐচ্ছিকভাবে, আপনি এবং অন্যান্য ঘটনা মোকাবিলাকারীরা এই পরিসরে বার্তা পাঠাতে পারেন। অ্যাপটি ভার্টেক্স এআই ব্যবহার করে এই বার্তাগুলোর সারসংক্ষেপ করে এবং একটি পূর্ববর্তী নথি শেয়ার করে।

  7. ইনসিডেন্ট রেসপন্স শেষ করতে এবং রেজোলিউশন প্রক্রিয়া শুরু করতে, চ্যাট স্পেসে /closeIncident টাইপ করুন। একটি ইনসিডেন্ট ম্যানেজমেন্ট ডায়ালগ বক্স খুলবে।

  8. ‘Close incident’- এ, ঘটনাটির সমাধানের জন্য একটি বিবরণ লিখুন, যেমন Test complete ’।

  9. ইনসিডেন্ট বন্ধ করতে ক্লিক করুন।

ইনসিডেন্ট ম্যানেজমেন্ট অ্যাপটি স্পেসের মেসেজগুলো তালিকাভুক্ত করে, ভার্টেক্স এআই (Vertex AI) দিয়ে সেগুলোর সারসংক্ষেপ তৈরি করে, সেই সারসংক্ষেপটি একটি গুগল ডক্স (Google Docs) ডকুমেন্টে পেস্ট করে এবং ডকুমেন্টটি স্পেসে শেয়ার করে।

পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে কোনো চার্জ হওয়া এড়াতে, আমরা আপনাকে ক্লাউড প্রজেক্টটি ডিলিট করে দেওয়ার পরামর্শ দিচ্ছি।

  1. Google API Console-এ, Manage resources পেজে যান। Menu > IAM & Admin > Manage Resources-এ করুন।

    রিসোর্স ম্যানেজারে যান

  2. প্রজেক্ট তালিকা থেকে আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর 'মুছে ফেলুন বোতামে ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।
  • ইনসিডেন্ট রেসপন্স অ্যাপটি এপিআই (API) কল করতে এবং চ্যাট এপিআই (Chat API) ও ভার্টেক্স এআই এপিআই (Vertex AI API)-এর মতো গুগল ক্লাউড পরিষেবাগুলো চালু করতে ব্যবহারকারীর ক্রেডেনশিয়াল দিয়ে প্রমাণীকরণ করে। এর মানে হলো, যে ব্যবহারকারী একটি ইনসিডেন্ট শুরু করছেন, তার অবশ্যই এই পরিষেবাগুলোতে অ্যাক্সেস থাকতে হবে। অ্যাপটিকে আরও শক্তিশালী করতে, /closeIncident স্ল্যাশ কমান্ডটি ব্যবহারকারী ব্যবহারকারীর ক্রেডেনশিয়ালের পরিবর্তে একটি সার্ভিস অ্যাকাউন্ট দিয়ে ভার্টেক্স এআই এপিআই কল করার কথা বিবেচনা করুন। ভার্টেক্স এআই এপিআই-এর জন্য একটি সার্ভিস অ্যাকাউন্ট কনফিগার করার বিষয়ে সাহায্যের জন্য, "একটি কাস্টম সার্ভিস অ্যাকাউন্ট ব্যবহার করুন" দেখুন।