Google Chat, Vertex AI, এবং Apps Script-এর মাধ্যমে ঘটনার প্রতিক্রিয়া জানান

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

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

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

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

ইভেন্ট ম্যানেজমেন্ট চ্যাট অ্যাপটি কাজ করে দেখুন:

  • ওয়েবসাইট যে একটি ঘটনা শুরু.
    চিত্র 1. ওয়েবসাইট যেখানে কেউ একটি ঘটনা রিপোর্ট করতে পারে।
  • ঘটনা চ্যাট স্পেস তৈরি করা হয় বিজ্ঞপ্তি.
    চিত্র 2. বিজ্ঞপ্তি যে ঘটনাটি চ্যাট স্পেস তৈরি করা হয়েছে।
  • ঘটনা প্রতিক্রিয়া চ্যাট স্থান.
    চিত্র 3. ঘটনার প্রতিক্রিয়া চ্যাট স্পেস।
  • একটি স্ল্যাশ কমান্ড দিয়ে ঘটনার সমাধান করা হচ্ছে।
    চিত্র 4. একটি স্ল্যাশ কমান্ড দিয়ে ঘটনার সমাধান করা।
  • ঘটনা সমাধান ডায়ালগ.
    চিত্র 5. ঘটনার রেজোলিউশন ডায়ালগ।
  • ঘটনার রেজোলিউশন Google ডক্স ডকুমেন্ট স্পেসে শেয়ার করা হয়েছে।
    চিত্র 6. ঘটনার রেজোলিউশন Google ডক্স ডকুমেন্ট মহাকাশে শেয়ার করা হয়েছে।
  • AI সারাংশ ঘটনার রেজোলিউশন গুগল ডক।
    চিত্র 7. এআই সারাংশ ঘটনার রেজোলিউশন গুগল ডক্স ডকুমেন্ট।

পূর্বশর্ত

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

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

উদ্দেশ্য

  • একটি চ্যাট অ্যাপ তৈরি করুন যা ঘটনাগুলির প্রতিক্রিয়া জানায়৷
  • নিম্নলিখিতগুলি করে ব্যবহারকারীদের ঘটনার প্রতিক্রিয়া জানাতে সহায়তা করুন:
    • ঘটনার প্রতিক্রিয়া স্পেস তৈরি করা।
    • ঘটনা এবং প্রতিক্রিয়া সংক্ষিপ্ত বার্তা পোস্ট করা.
    • ইন্টারেক্টিভ চ্যাট অ্যাপের বৈশিষ্ট্যগুলির সাথে সহযোগিতার সহায়ক।
  • Vertex AI এর সাথে কথোপকথন এবং রেজোলিউশনের সারসংক্ষেপ।

স্থাপত্য

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

ঘটনার প্রতিক্রিয়ার আর্কিটেকচার গুগল চ্যাট অ্যাপ

আর্কিটেকচারটি দেখায় কিভাবে ঘটনার প্রতিক্রিয়া Google Chat অ্যাপ একটি ঘটনা এবং রেজোলিউশন প্রক্রিয়া করে।

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

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

  3. ঘটনার প্রতিক্রিয়া Google Chat অ্যাপ অনুরোধটি প্রক্রিয়া করে:

    1. অ্যাপস স্ক্রিপ্ট অ্যাডমিন SDK পরিষেবা টিমের সদস্যদের তথ্য পায়, যেমন ব্যবহারকারী আইডি এবং ইমেল ঠিকানা।

    2. অ্যাপস স্ক্রিপ্ট অ্যাডভান্সড চ্যাট পরিষেবা ব্যবহার করে চ্যাট এপিআই-তে HTTP অনুরোধের একটি সেটের সাথে, ঘটনার প্রতিক্রিয়া Google Chat অ্যাপ একটি ঘটনা চ্যাট স্পেস তৈরি করে, দলের সদস্যদের সাথে এটিকে পপুলেট করে এবং স্পেসে একটি বার্তা পাঠায়।

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

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

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

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

    3. Apps Script DocumentApp পরিষেবা একটি ডক্স ডকুমেন্ট তৈরি করে এবং ডকুমেন্টে Vertex AI এর সারাংশ যোগ করে।

    4. ঘটনার প্রতিক্রিয়া Google Chat অ্যাপটি Chat API-কে সারসংক্ষেপ ডক্স ডকুমেন্টের লিঙ্ক শেয়ার করে একটি বার্তা পাঠাতে কল করে।

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

এই বিভাগটি দেখায় কিভাবে চ্যাট অ্যাপের জন্য একটি Google ক্লাউড প্রকল্প তৈরি এবং কনফিগার করতে হয়।

একটি Google ক্লাউড প্রকল্প তৈরি করুন

গুগল ক্লাউড কনসোল

  1. Google ক্লাউড কনসোলে, মেনু > IAM & Admin > Create a Project এ যান।

    একটি প্রকল্প তৈরি করুন এ যান

  2. প্রকল্পের নাম ক্ষেত্রে, আপনার প্রকল্পের জন্য একটি বর্ণনামূলক নাম লিখুন।

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

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

জিক্লাউড সিএলআই

নিম্নলিখিত উন্নয়ন পরিবেশগুলির মধ্যে একটিতে, Google ক্লাউড CLI (`gcloud`) অ্যাক্সেস করুন:

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

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

গুগল ক্লাউড কনসোল

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

    আমার প্রকল্পের জন্য বিলিং এ যান

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

জিক্লাউড সিএলআই

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

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

    • PROJECT_ID হল ক্লাউড প্রকল্পের জন্য প্রকল্প আইডি যার জন্য আপনি বিলিং সক্ষম করতে চান৷
    • BILLING_ACCOUNT_ID হল Google ক্লাউড প্রকল্পের সাথে লিঙ্ক করার জন্য বিলিং অ্যাকাউন্ট আইডি

APIs সক্রিয় করুন

গুগল ক্লাউড কনসোল

  1. Google ক্লাউড কনসোলে, Google Chat API, Google Docs API, Admin SDK API, এবং Vertex AI API সক্ষম করুন৷

    APIs সক্রিয় করুন

  2. নিশ্চিত করুন যে আপনি সঠিক ক্লাউড প্রকল্পে API গুলি সক্ষম করছেন, তারপর পরবর্তী ক্লিক করুন।

  3. নিশ্চিত করুন যে আপনি সঠিক API গুলি সক্ষম করছেন, তারপর সক্ষম করুন ক্লিক করুন৷

জিক্লাউড সিএলআই

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

    gcloud config set project PROJECT_ID
    

    আপনার তৈরি করা ক্লাউড প্রকল্পের প্রকল্প আইডি দিয়ে PROJECT_ID প্রতিস্থাপন করুন।

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

    gcloud services enable chat.googleapis.com docs.googleapis.com admin.googleapis.com aiplatform.googleapis.com
    

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

প্রমাণীকরণ এবং অনুমোদনের মাধ্যমে Chat অ্যাপকে Google Workspace এবং Google ক্লাউড-এর রিসোর্স অ্যাক্সেস করার অনুমতি দেওয়া হয়।

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

  1. Google ক্লাউড কনসোলে, মেনু > API এবং পরিষেবা > OAuth সম্মতি স্ক্রীনে যান।

    OAuth সম্মতি স্ক্রিনে যান

  2. ব্যবহারকারীর প্রকারের অধীনে, অভ্যন্তরীণ নির্বাচন করুন, তারপরে তৈরি করুন ক্লিক করুন।

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

  4. ব্যবহারকারী সমর্থন ইমেলে , আপনার ইমেল ঠিকানা বা একটি উপযুক্ত Google গ্রুপ নির্বাচন করুন।

  5. বিকাশকারীর যোগাযোগের তথ্যের অধীনে, আপনার ইমেল ঠিকানা লিখুন।

  6. সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।

  7. স্কোপ যোগ করুন বা সরান ক্লিক করুন। আপনি আপনার ক্লাউড প্রকল্পে সক্ষম করেছেন এমন প্রতিটি API-এর জন্য সুযোগের তালিকা সহ একটি প্যানেল উপস্থিত হয়।

  8. ম্যানুয়ালি স্কোপ যোগ করুন এর অধীনে, নিম্নলিখিত স্কোপগুলি পেস্ট করুন:

    • https://www.googleapis.com/auth/chat.spaces.create
    • https://www.googleapis.com/auth/chat.memberships
    • https://www.googleapis.com/auth/chat.memberships.app
    • https://www.googleapis.com/auth/chat.messages
    • 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
  9. টেবিলে যোগ করুন ক্লিক করুন।

  10. আপডেট ক্লিক করুন.

  11. সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।

  12. অ্যাপ নিবন্ধন সারাংশ পর্যালোচনা করুন, তারপর ড্যাশবোর্ডে ফিরে যান ক্লিক করুন।

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

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

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

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

ঐচ্ছিকভাবে, আপনি GitHub-এ পুরো প্রকল্পটি দেখতে পারেন।

GitHub এ দেখুন

এখানে প্রতিটি ফাইলের একটি ওভারভিউ আছে:

Consts.gs

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

Consts.gs কোড দেখুন

apps-script/incident-response/Consts.gs
const PROJECT_ID = 'replace-with-your-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
const CLOSE_INCIDENT_COMMAND_ID = 1;
ChatApp.gs

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

ChatApp.gs কোড দেখুন

apps-script/incident-response/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/ChatSpaceCreator.gs
/**
 * Creates a space in Google Chat with the provided title and members, and posts an
 * initial message to it.
 *
 * @param {Object} formData the data submitted by the user. It should contain the fields
 *                          title, description, and users.
 * @return {string} the resource name of the new space.
 */
function createChatSpace(formData) {
  const users = formData.users.trim().length > 0 ? formData.users.split(',') : [];
  const spaceName = setUpSpace_(formData.title, users);
  addAppToSpace_(spaceName);
  createMessage_(spaceName, formData.description);
  return spaceName;
}

/**
 * Creates a space in Google Chat with the provided display name and members.
 *
 * @return {string} the resource name of the new space.
 */
function setUpSpace_(displayName, users) {
  const memberships = users.map(email => ({
    member: {
      name: `users/${email}`,
      type: "HUMAN"
    }
  }));
  const request = {
    space: {
      displayName: displayName,
      spaceType: "SPACE",
      externalUserAllowed: true
    },
    memberships: memberships
  };
  // Call Chat API method spaces.setup
  const space = Chat.Spaces.setup(request);
  return space.name;
}

/**
 * Adds this Chat app to the space.
 *
 * @return {string} the resource name of the new membership.
 */
function addAppToSpace_(spaceName) {
  const request = {
    member: {
      name: "users/app",
      type: "BOT"
    }
  };
  // Call Chat API method spaces.members.create
  const membership = Chat.Spaces.Members.create(request, spaceName);
  return membership.name;
}

/**
 * Posts a text message to the space on behalf of the user.
 *
 * @return {string} the resource name of the new message.
 */
function createMessage_(spaceName, text) {
  const request = {
    text: text
  };
  // Call Chat API method spaces.messages.create
  const message = Chat.Spaces.Messages.create(request, spaceName);
  return message.name;
}
DocsApi.gs

ব্যবহারকারীর Google ড্রাইভে একটি Google ডক্স ডকুমেন্ট তৈরি করতে Google ডক্স API-কে কল করে এবং VertexAiApi.gs এ তৈরি ঘটনার তথ্যের একটি সারাংশ নথিতে লেখে।

DocsApi.gs কোড দেখুন

apps-script/incident-response/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

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

VertexAiApi.gs কোড দেখুন

apps-script/incident-response/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 prompt =
    "Summarize the following conversation between Engineers resolving an incident"
      + " in a few sentences. Use only the information from the conversation.\n\n"
      + chatHistory;
  const request = {
    instances: [
      { prompt: prompt }
    ],
    parameters: {
      temperature: 0.2,
      maxOutputTokens: 256,
      topK: 40,
      topP: 0.95
    }
  }
  const fetchOptions = {
    method: 'POST',
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
    contentType: 'application/json',
    payload: JSON.stringify(request)
  }
  const response = UrlFetchApp.fetch(
    `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
      + `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
      + "/publishers/google/models/text-bison:predict",
    fetchOptions);
  const payload = JSON.parse(response.getContentText());
  return payload.predictions[0].content;
}
WebController.gs

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

WebController.gs কোড দেখুন

apps-script/incident-response/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

এইচটিএমএল যার মধ্যে ঘটনা প্রারম্ভিক ওয়েবসাইট রয়েছে।

Index.html কোড দেখুন

apps-script/incident-response/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 এ কাস্টম include ফাংশন দ্বারা এটি Index.html এ অন্তর্ভুক্ত করা হয়েছে।

JavaScript.html কোড দেখুন

apps-script/incident-response/JavaScript.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)
      .createChatSpace(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/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. Google ক্লাউড কনসোলে, আপনার ক্লাউড প্রকল্পে যান।

    গুগল ক্লাউড কনসোলে যান

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

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

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

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

  1. Google চ্যাট অ্যাপস স্ক্রিপ্ট প্রকল্পের সাথে ঘটনার প্রতিক্রিয়া জানাতে নিম্নলিখিত বোতামে ক্লিক করুন।
    প্রকল্প খুলুন
  2. ওভারভিউ-এ ক্লিক করুন।
  3. ওভারভিউ পৃষ্ঠায়, ক্লিক করুন একটি অনুলিপি তৈরি করার জন্য আইকন একটি কপি করো .
  4. Apps স্ক্রিপ্ট প্রকল্পের আপনার কপির নাম দিন:

    1. Google চ্যাটের সাথে ঘটনাগুলির প্রতিক্রিয়ার অনুলিপিতে ক্লিক করুন।

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

    3. পুনঃনামকরণ ক্লিক করুন।

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

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

  1. আপনার Apps স্ক্রিপ্ট প্রকল্পে, ক্লিক করুন প্রকল্প সেটিংসের জন্য আইকন প্রকল্প সেটিংস .
  2. Google ক্লাউড প্ল্যাটফর্ম (GCP) প্রকল্পের অধীনে, প্রকল্প পরিবর্তন করুন ক্লিক করুন।
  3. GCP প্রকল্প নম্বরে , আপনার ক্লাউড প্রকল্পের প্রকল্প নম্বর পেস্ট করুন।
  4. সেট প্রকল্প ক্লিক করুন. ক্লাউড প্রকল্প এবং Apps স্ক্রিপ্ট প্রকল্প এখন সংযুক্ত আছে.

একটি Apps স্ক্রিপ্ট স্থাপনা তৈরি করুন৷

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

  1. অ্যাপস স্ক্রিপ্টে, ঘটনা প্রতিক্রিয়া অ্যাপের প্রকল্পটি খুলুন।

    Apps Script এ যান

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

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

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

  5. Execute as তে , User to access the web app নির্বাচন করুন

  6. কার কাছে অ্যাক্সেস আছে , আপনার ওয়ার্কস্পেস সংস্থার মধ্যে যে কেউ নির্বাচন করুন, যেখানে "আপনার ওয়ার্কস্পেস সংস্থা" হল আপনার Google Workspace সংস্থার নাম।

  7. ডিপ্লোয় ক্লিক করুন। অ্যাপস স্ক্রিপ্ট সফল স্থাপনার রিপোর্ট করে এবং ঘটনা প্রারম্ভিক ওয়েব পৃষ্ঠার জন্য একটি স্থাপনার আইডি এবং একটি URL প্রদান করে।

  8. আপনি একটি ঘটনা শুরু করার সময় পরে দেখার জন্য ওয়েব অ্যাপের URL টি নোট করুন৷ ডিপ্লয়মেন্ট আইডি কপি করুন। Google ক্লাউড কনসোলে চ্যাট অ্যাপ কনফিগার করার সময় আপনি এই আইডি ব্যবহার করেন।

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

Google ক্লাউড কনসোলে চ্যাট অ্যাপ কনফিগার করুন

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

  1. Google ক্লাউড কনসোলে, মেনু > আরও প্রোডাক্ট > Google Workspace > প্রোডাক্ট লাইব্রেরি > Google Chat API > Manage > Configuration- এ ক্লিক করুন।

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

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

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

  4. বর্ণনায় , টাইপ করুন Responds to incidents. .

  5. অন ​​পজিশনে টগল করে ইন্টারেক্টিভ ফিচার সক্ষম করুন ক্লিক করুন।

  6. কার্যকারিতার অধীনে, 1:1 বার্তা গ্রহণ করুন , স্পেস এবং গ্রুপ কথোপকথনে যোগ দিন নির্বাচন করুন।

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

  8. Deployment ID এ, Apps Script Deployment ID পেস্ট করুন যা আপনি Apps Script প্রজেক্ট ডিপ্লয়মেন্ট থেকে আগে কপি করেছেন।

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

    1. স্ল্যাশ কমান্ডের অধীনে, একটি স্ল্যাশ কমান্ড যোগ করুন ক্লিক করুন।

    2. নামে , /closeIncident টাইপ করুন।

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

    4. বর্ণনায় , Closes the incident being discussed in the space.

    5. একটি ডায়ালগ খোলে নির্বাচন করুন।

    6. সম্পন্ন ক্লিক করুন. স্ল্যাশ কমান্ড নিবন্ধিত এবং তালিকাভুক্ত।

  10. দৃশ্যমানতার অধীনে, আপনার ওয়ার্কস্পেস ডোমেনে নির্দিষ্ট ব্যক্তি এবং গোষ্ঠীর জন্য এই চ্যাট অ্যাপটি উপলব্ধ করুন নির্বাচন করুন এবং আপনার ইমেল ঠিকানা লিখুন।

  11. লগের অধীনে, লগিং করতে লগ ত্রুটি নির্বাচন করুন।

  12. Save এ ক্লিক করুন। একটি কনফিগারেশন সংরক্ষিত বার্তা উপস্থিত হয়, যার অর্থ অ্যাপটি পরীক্ষা করার জন্য প্রস্তুত৷

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

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

  1. অ্যাপস স্ক্রিপ্ট স্থাপনার ওয়েব অ্যাপ URL-এ যান।

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

  3. ঘটনা প্রারম্ভিক ওয়েব পৃষ্ঠা খোলে. পরীক্ষার তথ্য লিখুন:

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

  5. স্পেস তৈরি হওয়ার পর একটা Space created! বার্তা প্রদর্শিত হয়। Open Space-এ ক্লিক করুন, যা একটি নতুন ট্যাবে চ্যাটে স্পেস খোলে।

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

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

  8. ক্লোজ ইভেন্টে , ঘটনার রেজোলিউশনের জন্য একটি বিবরণ লিখুন, যেমন Test complete

  9. ঘটনা বন্ধ করুন ক্লিক করুন।

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

পরিষ্কার কর

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

  1. Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান। মেনু > আইএএম এবং অ্যাডমিন > সম্পদ পরিচালনা করুন ক্লিক করুন।

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

  2. প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
  3. ডায়ালগে, প্রকল্প আইডি টাইপ করুন এবং তারপরে প্রকল্পটি মুছে ফেলতে শাট ডাউন ক্লিক করুন।