ক্লাউড রানে Node.js দিয়ে একটি স্ল্যাক বট তৈরি করুন

1. সংক্ষিপ্ত বিবরণ

5f529fb87abc11c9.png সম্পর্কে

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

তুমি কি শিখবে

  • স্ল্যাকে কীভাবে একটি বট কাস্টম ইন্টিগ্রেশন তৈরি করবেন
  • সিক্রেট ম্যানেজারের সাহায্যে আপনার স্ল্যাক গোপনীয়তা কীভাবে সুরক্ষিত করবেন
  • ক্লাউড রানে কীভাবে একটি স্ল্যাক বট স্থাপন করবেন, এটি একটি সম্পূর্ণরূপে পরিচালিত কম্পিউট প্ল্যাটফর্ম যা স্বয়ংক্রিয়ভাবে আপনার স্টেটলেস কন্টেইনারগুলিকে স্কেল করে

তোমার যা লাগবে

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন।

গুগল ক্লাউডের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

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

98e4187c97cf2e0e.png সম্পর্কে

37d264871000675d.png সম্পর্কে

c20a9642aaa18d11.png

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটি কী তা নিয়ে চিন্তা করেন না। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি (সাধারণত PROJECT_ID হিসাবে চিহ্নিত) উল্লেখ করতে হবে। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন, এবং এটি উপলব্ধ কিনা তা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে রিসোর্স বন্ধ করতে, আপনি আপনার তৈরি রিসোর্সগুলি মুছে ফেলতে পারেন অথবা প্রকল্পটি মুছে ফেলতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

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

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন d1264ca30785e435.png সম্পর্কে .

84688aa223b1c3a2.png সম্পর্কে

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে Continue এ ক্লিক করুন।

d95252b003979716.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

7833d5e1c5d18f54.png সম্পর্কে

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

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

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. API গুলি সক্রিয় করুন

ক্লাউড শেল থেকে, আর্টিফ্যাক্ট রেজিস্ট্রি, ক্লাউড বিল্ড, ক্লাউড রান এবং সিক্রেট ম্যানেজার API গুলি সক্ষম করুন:

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com \
  secretmanager.googleapis.com

এটি এর মতো একটি সাফল্যের বার্তা আউটপুট করে:

Operation "operations/..." finished successfully.

এখন, আপনি আপনার অ্যাপ্লিকেশন প্রস্তুত এবং স্থাপন করতে প্রস্তুত...

৪. একটি স্ল্যাক ওয়ার্কস্পেস তৈরি করুন

আপনার একটি স্ল্যাক ওয়ার্কস্পেসের প্রয়োজন হবে যেখানে আপনি কাস্টম ইন্টিগ্রেশন তৈরি করতে পারবেন। যদি আপনার কাছে ইতিমধ্যে এমন কোনও ওয়ার্কস্পেস না থাকে যা আপনি এই টিউটোরিয়ালের জন্য ব্যবহার করতে চান তবে আপনি বিনামূল্যে একটি ওয়ার্কস্পেস তৈরি করতে পারেন।

aa1f0fda82263bf8.png সম্পর্কে

৫. একজন স্ল্যাক বট ব্যবহারকারী তৈরি করুন

একজন বট ব্যবহারকারী স্ল্যাকে বার্তা শুনতে, বার্তা পোস্ট করতে এবং ফাইল আপলোড করতে পারবেন। এই কোডল্যাবে, আপনি একটি সাধারণ শুভেচ্ছা বার্তা পোস্ট করার জন্য একটি বট তৈরি করবেন।

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

  • স্ল্যাক অ্যাপস ম্যানেজমেন্ট পৃষ্ঠায় যান।
  • উপরের ডানদিকে কোণায় নতুন অ্যাপ তৈরি করুন বোতামে ক্লিক করুন।
  • অ্যাপটির একটি নাম দিন, যেমন "কিটেনবট"।
  • আপনি যেখানে স্ল্যাক টিম ইনস্টল করতে চান সেটি বেছে নিন।

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

  • বাম দিকের প্যানেলে "বৈশিষ্ট্য" এর অধীনে "অ্যাপ হোম" এ যান।

414213b184fcc992.png সম্পর্কে

  • আপনার বট টোকেনে একটি স্কোপ বরাদ্দ করুন , যোগ করার জন্য স্কোপ পর্যালোচনা করুন এ ক্লিক করুন।
  • বট টোকেন স্কোপ পর্যন্ত স্ক্রোল করুন এবং একটি OAuth স্কোপ যোগ করুন এ ক্লিক করুন। chat:write

74a6fa87c64c2b23.png সম্পর্কে

  • উপরে স্ক্রোল করুন এবং "আপনার কর্মক্ষেত্রে অ্যাপ ইনস্টল করুন" বোতামে ক্লিক করুন।
  • এটি আপনার টিমে অ্যাপটি ইনস্টল করবে, আপনার তৈরি করা বট ব্যবহারকারীকে যুক্ত করবে এবং একটি বট টোকেন তৈরি করবে।
  • অনুরোধ করা হলে, আপনার কর্মক্ষেত্রে চ্যাট করার জন্য বটকে অনুমোদন দিতে " অনুমতি দিন " এ ক্লিক করুন।

বার্তা এবং কমান্ড সক্রিয় করুন

  • Show Tabs- এ স্ক্রোল করে নিচে যান এবং নিশ্চিত করুন যে উভয় বিকল্পই সক্রিয় আছে:

5ca52f7abbdc15c.png সম্পর্কে

ক্লায়েন্টের স্বাক্ষরের গোপন তথ্য জেনে নিন

  • সেটিংস এর অধীনে মৌলিক তথ্যে যান।
  • Signing Secret -এ স্ক্রোল করে Show-এ ক্লিক করুন, এবং তারপর গোপনীয়তাটি আপনার ক্লিপবোর্ডে কপি করুন:

74cfd6616fa71dc4.png সম্পর্কে

  • একটি পরিবেশ ভেরিয়েবলে গোপন তথ্য সংরক্ষণ করুন:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET

বট টোকেনটি পান

  • Features এর অধীনে OAuth & Permissions- এ যান।
  • আপনার ক্লিপবোর্ডে বট ব্যবহারকারী OAuth অ্যাক্সেস টোকেন টেক্সট কপি করতে কপি বোতামে ক্লিক করুন।

6f5a18069471101.png সম্পর্কে

  • একটি পরিবেশ ভেরিয়েবলে বট টোকেনটি সংরক্ষণ করুন:
BOT_TOKEN=PASTE_THE_BOT_TOKEN

চিন্তা করবেন না। যদি আপনার আবার এই টোকেনগুলি পেতে হয় তবে আপনি অ্যাপস পরিচালনা পৃষ্ঠা থেকে এই কনফিগারেশন পৃষ্ঠায় ফিরে আসতে পারেন

৬. তোমার গোপন কথাগুলো সুরক্ষিত রাখো

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

সিক্রেট ম্যানেজার API কী, পাসওয়ার্ড, সার্টিফিকেট এবং অন্যান্য সংবেদনশীল ডেটা সংরক্ষণের জন্য একটি নিরাপদ এবং সুবিধাজনক পদ্ধতি প্রদান করে। সিক্রেট ম্যানেজার গুগল ক্লাউড জুড়ে গোপন তথ্য পরিচালনা, অ্যাক্সেস এবং নিরীক্ষণের জন্য একটি কেন্দ্রীয় স্থান এবং সত্যের একক উৎস প্রদান করে।

তোমার গোপন কথা তৈরি করো।

নিম্নলিখিত কমান্ড ব্যবহার করে আপনার ক্লায়েন্ট স্বাক্ষর গোপন এবং বট টোকেন সংরক্ষণ করুন:

  • ক্লায়েন্ট স্বাক্ষর গোপনীয়তা
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \
  --replication-policy automatic \
  --data-file -
  • বট টোকেন
echo -n $BOT_TOKEN | gcloud secrets create bot-token \
  --replication-policy automatic \
  --data-file -

আপনার গোপন তথ্য অ্যাক্সেস করুন

আপনার গোপন তথ্য সঠিকভাবে তৈরি করা হয়েছে এবং আপনার অনুমতিগুলি কাজ করছে কিনা তা নিশ্চিত করা যাক। নিম্নলিখিত কমান্ডগুলি ব্যবহার করে আপনার গোপন তথ্য অ্যাক্সেস করুন:

echo $(gcloud secrets versions access 1 --secret client-signing-secret)
echo $(gcloud secrets versions access 1 --secret bot-token)

আপনি গুগল ক্লাউড কনসোলে আপনার গোপনীয়তাগুলি দেখতে এবং পরিচালনা করতে পারেন।

৭. নমুনা কোডটি পান

কমান্ড-লাইনে ক্লাউড শেলে, GitHub রিপোজিটরি ক্লোন করতে নিম্নলিখিত কমান্ডটি চালান:

git clone https://github.com/googlecodelabs/cloud-slack-bot.git

ডিরেক্টরিটি cloud-slack-bot/start এ পরিবর্তন করুন।

cd cloud-slack-bot/start

কোড বোঝা

আপনার পছন্দের কমান্ড লাইন এডিটর (ন্যানো, ভিম, ইম্যাকস...) দিয়ে অথবা ক্লাউড শেল এডিটরে সরাসরি বর্তমান ফোল্ডারটি খুলতে নিম্নলিখিত কমান্ড ব্যবহার করে kittenbot.js ফাইলটি খুলুন:

cloudshell workspace .

কিটনবট কোডের দুটি প্রধান কাজ রয়েছে। একটি হল গোপন তথ্য উদ্ধার করা, এবং অন্যটি হল বট চালানো।

প্রথমে, আমরা নির্ভরতাগুলি আমদানি করি:

kittenbot.js সম্পর্কে

const { Botkit } = require('botkit');
const {
  SlackAdapter,
  SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');

SlackAdapter এবং SlackEventMiddleware হল এমন প্যাকেজ যা Botkit কে প্রসারিত করে এবং বটকে Slack API তে এবং থেকে বার্তাগুলি সহজেই অনুবাদ করতে দেয়। Secret Manager ক্লায়েন্ট আপনাকে পূর্ববর্তী ধাপে সংরক্ষিত গোপনীয়তাগুলি অ্যাক্সেস করার অনুমতি দেবে।

এরপর আমাদের গোপন তথ্য উদ্ধারের ফাংশন আছে:

/**
 * Returns the secret string from Google Cloud Secret Manager
 * @param {string} name The name of the secret.
 * @return {Promise<string>} The string value of the secret.
 */
async function accessSecretVersion(name) {
  const client = new SecretManagerServiceClient();
  const projectId = process.env.PROJECT_ID;
  const [version] = await client.accessSecretVersion({
    name: `projects/${projectId}/secrets/${name}/versions/1`,
  });

  // Extract the payload as a string.
  const payload = version.payload.data.toString('utf8');

  return payload;
}

এই ফাংশনটি বটকে প্রমাণীকরণের জন্য প্রয়োজনীয় গোপন তথ্যের স্ট্রিং মান প্রদান করে।

পরবর্তী ফাংশনটি বটটি আরম্ভ করে:

/**
 * Function to initialize kittenbot.
 */
async function kittenbotInit() {
  const adapter = new SlackAdapter({
    clientSigningSecret: await accessSecretVersion('client-signing-secret'),
    botToken: await accessSecretVersion('bot-token'),
  });

  adapter.use(new SlackEventMiddleware());

  const controller = new Botkit({
    webhook_uri: '/api/messages',
    adapter: adapter,
  });

  controller.ready(() => {
    controller.hears(
      ['hello', 'hi', 'hey'],
      ['message', 'direct_message'],
      async (bot, message) => {
        await bot.reply(message, 'Meow. :smile_cat:');
      }
    );
  });
}

ফাংশনের প্রথম অংশটি SlackAdapter কে গোপন তথ্য দিয়ে কনফিগার করে, এবং তারপর বার্তা গ্রহণের জন্য একটি এন্ডপয়েন্ট নির্দিষ্ট করে। তারপর, একবার কন্ট্রোলার চালু হয়ে গেলে, বট "হ্যালো", "হাই", অথবা "হে" সম্বলিত যেকোনো বার্তার উত্তর "মিউ" দিয়ে দেবে। 😺"।

অ্যাপ ম্যানিফেস্টে এই নির্দিষ্ট অংশগুলি দেখুন:

প্যাকেজ.জেসন

{
  // ...
  "scripts": {
    "start": "node kittenbot.js",
    // ...
  },
  "engines": {
    "node": "16"
  },
  // ...
}

আপনি Cloud Run ব্যবহার করে সরাসরি উৎস থেকে একটি Node.js অ্যাপ স্থাপন করতে পারেন। এর পরে নিম্নলিখিতগুলি ঘটবে:

  • ক্লাউড রান ক্লাউড বিল্ডকে একটি কন্টেইনার ইমেজ তৈরি করতে বলে ( সোর্স কোড থেকে স্থাপন দেখুন)।
  • যদি সোর্স কোড ডিরেক্টরিতে একটি Dockerfile উপস্থিত থাকে, তাহলে ক্লাউড বিল্ড একটি কন্টেইনার ইমেজ তৈরি করতে এটি ব্যবহার করে।
  • যেহেতু এটি তা নয়, তাই ক্লাউড বিল্ড উৎস বিশ্লেষণ করতে এবং একটি উৎপাদন-প্রস্তুত চিত্র স্বয়ংক্রিয়ভাবে তৈরি করতে বিল্ডপ্যাকসকে কল করে।
  • Buildpacks package.json ম্যানিফেস্ট সনাক্ত করে এবং একটি Node.js ইমেজ তৈরি করে।
  • scripts.start ফিল্ড নির্ধারণ করে কিভাবে অ্যাপটি শুরু করা হবে।
  • engines.node ফিল্ডটি কন্টেইনার বেস ইমেজের Node.js সংস্করণ নির্ধারণ করে।
  • স্থাপনার সময়, পরিচিত নিরাপত্তা সংশোধনগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়।

আপনি অ্যাপটি স্থাপনের জন্য প্রস্তুত!

৮. অ্যাপটি স্থাপন করুন

স্ল্যাক ইভেন্টস এপিআই ইভেন্ট সম্পর্কে বহির্গামী বার্তা পাঠানোর জন্য ওয়েবহুক ব্যবহার করে। যখন আপনি স্ল্যাক অ্যাপ কনফিগার করেন, তখন আপনাকে স্ল্যাক এপিআই পিং করার জন্য একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য URL প্রদান করতে হবে।

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

আপনার প্রকল্প আইডি পুনরুদ্ধার করুন

PROJECT_ID পরিবেশ ভেরিয়েবল সংজ্ঞায়িত করুন:

PROJECT_ID=$(gcloud config get-value core/project)

আপনার ক্লাউড রান অঞ্চল নির্ধারণ করুন

ক্লাউড রান হল আঞ্চলিক, যার অর্থ হল আপনার ক্লাউড রান পরিষেবা পরিচালিত পরিকাঠামো একটি নির্দিষ্ট অঞ্চলে অবস্থিত এবং Google দ্বারা পরিচালিত হয় যাতে সেই অঞ্চলের সমস্ত জোনে অতিরিক্তভাবে উপলব্ধ থাকে। আপনার স্থাপনার জন্য আপনি কোন অঞ্চলটি ব্যবহার করবেন তা নির্ধারণ করুন, উদাহরণস্বরূপ:

REGION="us-central1"

অনুমতিগুলি আপডেট করুন

সিক্রেট ম্যানেজার থেকে গোপন তথ্য অ্যাক্সেস করতে, ক্লাউড রান পরিষেবা অ্যাকাউন্টে roles/secretmanager.secretAccessor ভূমিকা প্রদান করতে হবে।

প্রথমে, ডিফল্ট পরিষেবা অ্যাকাউন্টটি একটি পরিবেশ ভেরিয়েবলে সংরক্ষণ করুন:

SERVICE_ACCOUNT=$(gcloud iam service-accounts list \
  --format "value(email)" \
  --filter "displayName:Compute Engine default service account")

আপনার ইমেল ঠিকানাটি সংরক্ষিত আছে কিনা তা নিশ্চিত করুন:

echo $SERVICE_ACCOUNT

পরিষেবা অ্যাকাউন্টটির ফর্ম্যাটটি নিম্নরূপ: PROJECT_NUMBER-compute@developer.gserviceaccount.com

একবার আপনার ইমেল ঠিকানা হয়ে গেলে, পরিষেবা অ্যাকাউন্টের জন্য ভূমিকাটি সক্ষম করুন:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT \
  --role roles/secretmanager.secretAccessor

অ্যাপটি স্থাপন করুন

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

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

gcloud run deploy kittenbot \
  --source . \
  --platform managed \
  --region $REGION \
  --set-env-vars PROJECT_ID=$PROJECT_ID \
  --allow-unauthenticated
  • এটি kittenbot নামে একটি পরিষেবা তৈরি করে।
  • --source বিকল্পটি ক্লাউড বিল্ড দিয়ে অ্যাপ্লিকেশন তৈরি করতে বর্তমান ফোল্ডারটি ব্যবহার করে। ক্লাউড বিল্ড স্বয়ংক্রিয়ভাবে package.json ফাইলের উপস্থিতি সনাক্ত করে।
  • আপনি এই কমান্ডের সাহায্যে একটি ডিফল্ট অঞ্চল নির্ধারণ করতে পারেন: gcloud config set run/region $REGION
  • আপনি এই কমান্ডটি ব্যবহার করে ডিফল্টভাবে ক্লাউড রান পরিচালনা করতে পারেন: gcloud config set run/platform managed
  • --set-env-vars বিকল্পটি পরিষেবা পরিবেশের ভেরিয়েবল সেট করে।
  • --allow-unauthenticated বিকল্পটি পরিষেবাটি সর্বজনীনভাবে উপলব্ধ করে।

প্রথমবার, আপনি একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করার জন্য একটি প্রম্পট পাবেন। যাচাই করতে এন্টার টিপুন:

Deploying from source requires an Artifact Registry Docker repository to store
built containers. A repository named [cloud-run-source-deploy] in region [REGION]
will be created.

Do you want to continue (Y/n)?

এটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরিতে আপনার সোর্স কোড আপলোড এবং আপনার কন্টেইনার ইমেজ তৈরি শুরু করে:

Building using Dockerfile and deploying container ...
* Building and deploying new service... Building Container.
  OK Creating Container Repository...
  OK Uploading sources...
  * Building Container... Logs are available at ...

তারপর, বিল্ড এবং ডিপ্লয়মেন্ট সম্পূর্ণ না হওয়া পর্যন্ত কিছুক্ষণ অপেক্ষা করুন। সফল হলে, কমান্ড লাইনটি পরিষেবা URL প্রদর্শন করবে:

...
OK Building and deploying new service... Done.
  OK Creating Container Repository...
  OK Uploading sources...
  OK Building Container... Logs are available at ...
  OK Creating Revision... Creating Service.
  OK Routing traffic...
  OK Setting IAM Policy...
Done.
Service [SERVICE]... has been deployed and is serving 100 percent of traffic.
Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app

আপনি এই কমান্ড দিয়ে পরিষেবা URL পেতে পারেন:

SERVICE_URL=$( \
  gcloud run services describe kittenbot \
  --platform managed \
  --region $REGION \
  --format "value(status.url)" \
)
echo $SERVICE_URL

URL টির ফর্ম্যাটটি নিম্নরূপ:

https://kittenbot-PROJECTHASH-REGIONID.a.run.app

এই URL টি Slack Events API সক্রিয় করার জন্য ব্যবহৃত হবে। পরবর্তী ধাপে ব্যবহার করার জন্য এটি আপনার ক্লিপবোর্ডে কপি করুন।

আপনার পরিষেবা এখন লাইভ এবং সর্বজনীনভাবে উপলব্ধ! আরও তথ্যের জন্য ক্লাউড রান কনসোলে যান। fee46ea7c8483d56.png সম্পর্কে

আপনি শেষ সংস্করণটি কখন তৈরি করা হয়েছিল, এটি কত ট্র্যাফিক পাচ্ছে তা দেখতে পারবেন এবং লগগুলি দেখতে পাবেন। যদি আমরা লগগুলিতে ক্লিক করি, আমরা দেখতে পাব যে বটকিট কন্ট্রোলারটি চালু আছে এবং বার্তা গ্রহণের জন্য প্রস্তুত।

এবার আমাদের স্ল্যাক চ্যানেল থেকে বার্তা পাঠানো শুরু করা যাক!

৯. স্ল্যাক ইভেন্ট সক্রিয় করুন

যেমনটি আমরা আগে দেখেছি, আমাদের kittenbot কোড আমাদের ওয়েবহুক টার্গেটের জন্য একটি আপেক্ষিক শেষবিন্দু নির্দিষ্ট করে।

kittenbot.js সম্পর্কে

 const controller = new Botkit({
    webhook_uri: '/api/messages',
    adapter: adapter,
  });

এর মানে হল, আমাদের সম্পূর্ণ URL হবে ক্লাউড রান পরিষেবার মূল অংশ, এবং /api/messages

ইভেন্টগুলি সক্ষম করুন

অ্যাপস ম্যানেজমেন্ট পৃষ্ঠায় , সাইডবারে ইভেন্টস সাবস্ক্রিপশন বিভাগে যান এবং ইভেন্টস সক্ষম করুন টগল করুন। আপনার পরিষেবা URL ইনপুট করুন:

PASTE_THE_SERVICE_URL/api/messages

5179a99339839999.png সম্পর্কে

আপনি কত দ্রুত URL টাইপ করবেন তার উপর নির্ভর করে, আপনার কাজ শেষ হওয়ার আগেই এটি যাচাই করার চেষ্টা করতে পারে। যদি এটি ব্যর্থ হয়, তাহলে "পুনরায় চেষ্টা করুন" এ ক্লিক করুন।

সাবস্ক্রাইব

সকল মেসেজ বট ইভেন্টে সাবস্ক্রাইব করুন।

1e8f200390908a9b.png সম্পর্কে

পৃষ্ঠার নীচের অংশে Save Changes-এ ক্লিক করুন। আপনাকে আপনার অ্যাপ পুনরায় ইনস্টল করতে বলা হবে। প্রম্পটগুলি দেখুন এবং Allow-এ ক্লিক করুন।

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

১০. আপনার বট পরীক্ষা করুন

Kittenbot-কে সরাসরি বার্তা পাঠান:

1f442dd7fd7b5773.png সম্পর্কে

"@kittenbot" লিখে "তাদের আমন্ত্রণ জানান" এ ক্লিক করে আপনার চ্যানেলে kittenbot যোগ করুন:

9788d2167ce47167.png সম্পর্কে

এখন আপনার চ্যানেলের সবাই কিটেনবটের সাথে যোগাযোগ করতে পারবে!

9c0d1d7907a51767.png সম্পর্কে

স্ল্যাকের প্রতিটি বার্তা একটি ইভেন্ট ট্রিগার করে এবং আমাদের ক্লাউড রান পরিষেবায় একটি HTTP POST বার্তা পাঠায়। আপনি যদি ক্লাউড রান পরিষেবা লগগুলি দেখেন, তাহলে আপনি দেখতে পাবেন যে প্রতিটি বার্তা লগে একটি POST এন্ট্রির সাথে সম্পর্কিত।

1ff0c2347bf464e8.png সম্পর্কে

বিড়ালছানাটি প্রতিটি বার্তার উত্তরে "মিউ" বলে। 😺

১১. বোনাস - আপনার বট আপডেট করুন

এই ঐচ্ছিক অংশটি কয়েক মিনিট সময় নেবে। সরাসরি ক্লিনআপে চলে যেতে দ্বিধা করবেন না।

কথোপকথনের থ্রেড

আমরা চাই বটটি কেবল "মিয়াও" বলার চেয়ে বেশি কিছু করুক। কিন্তু ক্লাউড রানে চলমান কোনও কিছুর নতুন সংস্করণ কীভাবে স্থাপন করবেন?

ডিরেক্টরিটি cloud-slack-bot/extra-credit এ পরিবর্তন করুন:

cd ../extra-credit/

ক্লাউড শেল এডিটরে বর্তমান ফোল্ডারটি খুলুন:

cloudshell workspace .

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

সংলাপটি সংজ্ঞায়িত করুন

প্রথমে, ফাইলের শেষে কথোপকথনমূলক ফাংশনগুলি কীভাবে সংজ্ঞায়িত করা হয়েছে তা দেখুন:

// ...
const maxCats = 20;
const catEmojis = [
  ':smile_cat:',
  ':smiley_cat:',
  ':joy_cat:',
  ':heart_eyes_cat:',
  ':smirk_cat:',
  ':kissing_cat:',
  ':scream_cat:',
  ':crying_cat_face:',
  ':pouting_cat:',
  ':cat:',
  ':cat2:',
  ':leopard:',
  ':lion_face:',
  ':tiger:',
  ':tiger2:',
];

/**
 * Function to concatenate cat emojis
 * @param {number} numCats Number of cat emojis.
 * @return {string} The string message of cat emojis.
 */
function makeCatMessage(numCats) {
  let catMessage = '';
  for (let i = 0; i < numCats; i++) {
    // Append a random cat from the list
    catMessage += catEmojis[Math.floor(Math.random() * catEmojis.length)];
  }
  return catMessage;
}

/**
 * Function to create the kitten conversation
 * @param {Object} controller The botkit controller.
 * @return {Object} The BotkitConversation object.
 */
function createKittenDialog(controller) {
  const convo = new BotkitConversation('kitten-delivery', controller);

  convo.ask('Does someone need a kitten delivery?', [
    {
      pattern: 'yes',
      handler: async (response, convo, bot) => {
        await convo.gotoThread('yes_kittens');
      },
    },
    {
      pattern: 'no',
      handler: async (response, convo, bot) => {
        await convo.gotoThread('no_kittens');
      },
    },
    {
      default: true,
      handler: async (response, convo, bot) => {
        await convo.gotoThread('default');
      },
    },
  ]);

  convo.addQuestion(
    'How many would you like?',
    [
      {
        pattern: '^[0-9]+?',
        handler: async (response, convo, bot, message) => {
          const numCats = parseInt(response);
          if (numCats > maxCats) {
            await convo.gotoThread('too_many');
          } else {
            convo.setVar('full_cat_message', makeCatMessage(numCats));
            await convo.gotoThread('cat_message');
          }
        },
      },
      {
        default: true,
        handler: async (response, convo, bot, message) => {
          if (response) {
            await convo.gotoThread('ask_again');
          } else {
            // The response '0' is interpreted as null
            await convo.gotoThread('zero_kittens');
          }
        },
      },
    ],
    'num_kittens',
    'yes_kittens'
  );

  // If numCats is too large, jump to start of the yes_kittens thread
  convo.addMessage(
    'Sorry, {{vars.num_kittens}} is too many cats. Pick a smaller number.',
    'too_many'
  );
  convo.addAction('yes_kittens', 'too_many');

  // If response is not a number, jump to start of the yes_kittens thread
  convo.addMessage("Sorry I didn't understand that", 'ask_again');
  convo.addAction('yes_kittens', 'ask_again');

  // If numCats is 0, send a dog instead
  convo.addMessage(
    {
      text:
        'Sorry to hear you want zero kittens. ' +
        'Here is a dog, instead. :dog:',
      attachments: [
        {
          fallback: 'Chihuahua Bubbles - https://youtu.be/s84dBopsIe4',
          text: '<https://youtu.be/s84dBopsIe4|' + 'Chihuahua Bubbles>!',
        },
      ],
    },
    'zero_kittens'
  );

  // Send cat message
  convo.addMessage('{{vars.full_cat_message}}', 'cat_message');

  convo.addMessage('Perhaps later.', 'no_kittens');

  return convo;
}

এই নতুন কথোপকথনটি প্রতিক্রিয়াগুলির উপর ভিত্তি করে থ্রেডটি পরিচালনা করে। উদাহরণস্বরূপ, যদি ব্যবহারকারী বিড়ালছানাটির প্রশ্নের উত্তরে "না" উত্তর দেয়, তবে এটি "no_kittens" লেবেলযুক্ত বার্তায় চলে যায়, যা সেই কথোপকথনের থ্রেডের শেষ।

কন্ট্রোলারে ডায়ালগ যোগ করা হচ্ছে

এখন যেহেতু কথোপকথনটি সংজ্ঞায়িত করা হয়েছে, দেখুন কিভাবে এটি কন্ট্রোলারে যুক্ত করবেন:

async function kittenbotInit() {
  // ...
  const controller = new Botkit({
    webhook_uri: '/api/messages',
    adapter: adapter,
  });

  // Add Kitten Dialog
  const convo = createKittenDialog(controller);
  controller.addDialog(convo);

  // Controller is ready
  controller.ready(() => {
    // ...
  });
}

ডায়ালগটি ট্রিগার করুন

এখন সেই ডায়ালগটি কন্ট্রোলারের ব্যবহারের জন্য উপলব্ধ, চ্যাটবট যখন "বিড়ালছানা", "বিড়ালছানা", "বিড়াল", অথবা "বিড়াল" শুনতে পায় তখন কীভাবে কথোপকথন শুরু হয় তা দেখুন:

  // ...

  controller.ready(() => {
    controller.hears(
      ['hello', 'hi', 'hey'],
      ['message', 'direct_message'],
      async (bot, message) => {
        await bot.reply(message, 'Meow. :smile_cat:');
        return;
      }
    );

    // START: listen for cat emoji delivery
    controller.hears(
      ['cat', 'cats', 'kitten', 'kittens'],
      ['message', 'direct_message'],
      async (bot, message) => {
        // Don't respond to self
        if (message.bot_id !== message.user) {
          await bot.startConversationInChannel(message.channel, message.user);
          await bot.beginDialog('kitten-delivery');
          return;
        }
      }
    );
    // END: listen for cat emoji delivery

    // ...
  });

  // ...

অ্যাপটি আপডেট করুন

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

gcloud run deploy kittenbot \
  --source . \
  --platform managed \
  --region $REGION \
  --set-env-vars PROJECT_ID=$PROJECT_ID \
  --allow-unauthenticated

চেষ্টা করে দেখো

eca12b3463850d52.png সম্পর্কে

অভিনন্দন! আপনি ক্লাউড রানে চলমান একটি স্ল্যাক বটকে নতুন সংস্করণে আপডেট করেছেন।

স্ল্যাশ কমান্ড

যদি আপনি ব্যবহারকারীর সাথে কথোপকথন করতে না চান? যদি আপনি কেবল একটি সাধারণ কমান্ড দিয়ে কোনও ক্রিয়া শুরু করতে চান তবে কী হবে?

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

স্ল্যাক স্ল্যাশ কমান্ড সক্ষম করুন

  • আপনার অ্যাপস ম্যানেজমেন্ট পৃষ্ঠার " বৈশিষ্ট্য" এর অধীনে "স্ল্যাশ কমান্ড" বিভাগে যান।
  • নতুন কমান্ড তৈরি করুন ক্লিক করুন।
  • আপনার kittenbot পরিষেবা URL দিয়ে একটি /cats কমান্ড কনফিগার করুন। Events API সক্রিয় করার জন্য আপনি যে এন্ডপয়েন্টটি ব্যবহার করেছিলেন তা ব্যবহার করতে ভুলবেন না! এটি আপনার URL, এবং '/api/messages'

e34d393c14308f28.png সম্পর্কে

  • আপনার অ্যাপ এবং অনুমতি আপডেট করার জন্য প্রম্পটটি অনুসরণ করুন।

আপনার কন্ট্রোলারে স্ল্যাশ কমান্ড যোগ করুন

controller.ready ফাংশনের ভেতরে স্ল্যাশ কমান্ডের জন্য একটি হ্যান্ডলার কীভাবে যোগ করা হয়েছে তা দেখুন:

  // ...

  // Controller is ready
  controller.ready(() => {
    // ...

    // START: slash commands
    controller.on('slash_command', async (bot, message) => {
      const numCats = parseInt(message.text);
      const response = makeCatMessage(numCats);
      bot.httpBody({ text: response });
    });
    // END: slash commands
  });

  // ...

চেষ্টা করে দেখো

স্ল্যাশ কমান্ড পাঠাতে /cats যোগ করে একটি সংখ্যা লিখুন। যেমন: /cats 8

c67f6fe1ffcafec8.png সম্পর্কে

বটটি ৮টি বিড়ালের সাথে সাড়া দেবে, শুধুমাত্র আপনার কাছে দৃশ্যমান:

9c1b256987fd379a.png সম্পর্কে

১২. পরিষ্কার-পরিচ্ছন্নতা

অভিনন্দন, এখন ক্লাউড রানে আপনার একটি স্ল্যাক বট চলছে। ব্যবহৃত সম্পদগুলি পরিষ্কার করার সময় এসেছে (খরচ বাঁচাতে এবং একজন ভালো ক্লাউড নাগরিক হতে)।

প্রকল্পটি মুছুন

আপনি সরাসরি ক্লাউড শেল থেকে পুরো প্রকল্পটি মুছে ফেলতে পারেন:

gcloud projects delete $PROJECT_ID

বিকল্পভাবে, যদি আপনি একে একে বিভিন্ন রিসোর্স মুছে ফেলতে চান, তাহলে পরবর্তী বিভাগে যান।

স্থাপনাটি মুছে ফেলুন

gcloud run services delete kittenbot --region $REGION

কমান্ড আউটপুট

Service [kittenbot] will be deleted.
Do you want to continue (Y/n)?  y
Deleted service [kittenbot].

আপনার ক্লায়েন্টের স্বাক্ষর গোপনীয়তা মুছে ফেলুন

gcloud secrets delete client-signing-secret

কমান্ড আউটপুট

You are about to destroy the secret [client-signing-secret] and its
[1] version(s). This action cannot be reversed.
Do you want to continue (Y/n)?  y
Deleted secret [client-signing-secret].

আপনার বট টোকেন গোপনীয়তা মুছে ফেলুন

gcloud secrets delete bot-token

কমান্ড আউটপুট

You are about to destroy the secret [bot-token] and its [1]
version(s). This action cannot be reversed.
Do you want to continue (Y/n)?  y
Deleted secret [bot-token].

স্টোরেজ বালতিগুলি মুছে ফেলুন

প্রথমে, বাকেট পাথ পেতে গুগল ক্লাউড স্টোরেজ বাকেটগুলির তালিকা তৈরি করুন:

gsutil ls

কমান্ড আউটপুট

gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/
gs://<PROJECT_ID>_cloudbuild/

এখন, আর্টিফ্যাক্ট বাকেটটি মুছে ফেলুন:

gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/

কমান্ড আউটপুট

Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...

অবশেষে, ক্লাউডবিল্ড বাকেটটি মুছে ফেলুন:

gsutil rm -r gs://${PROJECT_ID}_cloudbuild/

কমান্ড আউটপুট

Removing gs://<PROJECT_ID>_cloudbuild/...

১৩. অভিনন্দন!

528302981979de90.png সম্পর্কে

তুমি এখন জানো কিভাবে ক্লাউড রানে স্ল্যাক বট চালাতে হয়!

আমরা এই প্রযুক্তির উপরিভাগে কেবল কিছু আবিষ্কার করেছি এবং আমরা আপনাকে আপনার নিজস্ব ক্লাউড রান স্থাপনার মাধ্যমে আরও অন্বেষণ করতে উৎসাহিত করছি।

আমরা যা কভার করেছি

  • স্ল্যাকে একটি বট কাস্টম ইন্টিগ্রেশন তৈরি করা হচ্ছে
  • সিক্রেট ম্যানেজারের সাহায্যে আপনার স্ল্যাক গোপনীয়তা সুরক্ষিত করা
  • ক্লাউড রানে আপনার স্ল্যাক বট স্থাপন করা

পরবর্তী পদক্ষেপ

আরও জানুন