1. खास जानकारी
इस कोडलैब में, आपको Botkit टूलकिट का इस्तेमाल करके, Slack बॉट बनाने का तरीका पता चलेगा. साथ ही, आपको इसे Google Cloud पर चलाने का तरीका भी पता चलेगा. बॉट के साथ इंटरैक्ट करने के लिए, आपको लाइव Slack चैनल बनाना होगा.
आपको क्या सीखने को मिलेगा
- Slack में बॉट को पसंद के मुताबिक इंटिग्रेट करने का तरीका
- Secret Manager की मदद से अपने Slack सीक्रेट कैसे सुरक्षित करें
- Cloud Run पर Slack बॉट डिप्लॉय करने का तरीका. यह पूरी तरह से मैनेज किया गया कंप्यूट प्लैटफ़ॉर्म है, जो आपके स्टेटलेस कंटेनर को अपने-आप स्केल करता है
आपको किन चीज़ों की ज़रूरत होगी
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Google Cloud के साथ अपने अनुभव को आप कितनी रेटिंग देंगे?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको अपना प्रोजेक्ट आईडी बताना होगा. आम तौर पर, इसकी पहचान
PROJECT_ID
के रूप में की जाती है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. दूसरा तरीका यह है कि आप खुद भी आज़माकर देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. साथ ही, यह प्रोजेक्ट के खत्म होने तक बना रहता है. - आपकी जानकारी के लिए, प्रोजेक्ट नंबर नाम की एक तीसरी वैल्यू दी गई है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से, कहीं से भी इस्तेमाल किया जा सकता है. हालांकि, इस ट्यूटोरियल में आपको Cloud Shell का इस्तेमाल करने के बारे में बताया जाएगा. यह एक ऐसा कमांड लाइन है जो Cloud में काम करता है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री ऑफ़र करता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और ऑथेंटिकेशन को बेहतर बनाता है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम ब्राउज़र से किया जा सकता है.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.
- यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list
कमांड आउटपुट
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project
कमांड आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:
gcloud config set project <PROJECT_ID>
कमांड आउटपुट
Updated property [core/project].
3. एपीआई चालू करें
Cloud Shell से, Artifact Registry, Cloud Build, Cloud Run, और Secret Manager के एपीआई चालू करें:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
इस मैसेज से, इस टेक्स्ट से मिलता-जुलता एक मैसेज मिलता है:
Operation "operations/..." finished successfully.
अब, आप अपना ऐप्लिकेशन तैयार करने और उसे डिप्लॉय करने के लिए तैयार हैं...
4. Slack का फ़ाइल फ़ोल्डर बनाना
आपको एक ऐसे Slack फ़ाइल फ़ोल्डर की ज़रूरत होगी जहां आपको कस्टम इंटिग्रेशन बनाने की अनुमति हो. अगर आपके पास पहले से कोई वर्कस्पेस नहीं है, जिसका इस्तेमाल आपको इस ट्यूटोरियल के लिए करना है, तो बिना किसी शुल्क के एक वर्कस्पेस बनाया जा सकता है.
5. Slack बॉट का उपयोगकर्ता बनाएं
बॉट का इस्तेमाल करने वाला व्यक्ति Slack पर मैसेज सुन सकता है, मैसेज पोस्ट कर सकता है, और फ़ाइलें अपलोड कर सकता है. इस कोडलैब में, आपको एक बॉट बनाकर, आसान ग्रीटिंग मैसेज पोस्ट करना होगा.
नया Slack ऐप्लिकेशन बनाना
- Slack ऐप्लिकेशन मैनेज करने वाले पेज पर जाएं.
- सबसे ऊपर दाएं कोने में मौजूद, नया ऐप्लिकेशन बनाएं बटन पर क्लिक करें.
- ऐप्लिकेशन को एक नाम दें, जैसे कि "kittenbot".
- Slack टीम को चुनें, जहां आपको इसे इंस्टॉल करना है.
बॉट का इस्तेमाल करने वाला खाता बनाना
- बाईं ओर मौजूद पैनल में, सुविधाएं में जाकर ऐप्लिकेशन के होम पेज पर जाएं
- स्कोप की समीक्षा करें पर क्लिक करके, अपने बॉट टोकन के लिए स्कोप असाइन करें
- नीचे की ओर स्क्रोल करके, बॉट टोकन का दायरा पर जाएं और OAuth का दायरा जोड़ें पर क्लिक करें. "kittenbot के तौर पर मैसेज भेजें" के लिए
chat:write
को चुनें
- ऊपर की ओर स्क्रोल करें और Workspace पर ऐप्लिकेशन इंस्टॉल करें बटन पर क्लिक करें.
- इससे आपकी टीम के लिए ऐप्लिकेशन इंस्टॉल हो जाएगा. साथ ही, आपने अभी जिस बॉट उपयोगकर्ता को बनाया है उसे जोड़ दिया जाएगा और बॉट टोकन जनरेट किया जाएगा.
- जब कहा जाए, तब "अनुमति दें" पर क्लिक करें ताकि बॉट को अपने फ़ाइल फ़ोल्डर में चैट करने की अनुमति दी जा सके.
मैसेज और निर्देश पाने की सुविधा चालू करना
- नीचे की ओर स्क्रोल करके टैब दिखाएं पर जाएं और पक्का करें कि दोनों विकल्प चालू हों:
क्लाइंट के साइनिंग सीक्रेट पाना
- सेटिंग में, बुनियादी जानकारी पर जाएं.
- नीचे साइनिंग सीक्रेट तक स्क्रोल करें और दिखाएं पर क्लिक करें. इसके बाद, सीक्रेट टोकन को क्लिपबोर्ड पर कॉपी करें:
- सीक्रेट को एनवायरमेंट वैरिएबल में सेव करें:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
बॉट टोकन पाएं
- OAuth &पर जाएं अनुमतियां में जाकर, सुविधाएं पर जाएं.
- बॉट उपयोगकर्ता OAuth ऐक्सेस टोकन टेक्स्ट को अपने क्लिपबोर्ड पर कॉपी करने के लिए, कॉपी करें बटन पर क्लिक करें.
- बॉट टोकन को एनवायरमेंट वैरिएबल में सेव करें:
BOT_TOKEN=PASTE_THE_BOT_TOKEN
चिंता न करें. अगर आपको ये टोकन फिर से चाहिए, तो ऐप्लिकेशन मैनेजमेंट पेज से वापस आकर इस कॉन्फ़िगरेशन पेज पर जाएं.
6. अपने राज़ को सुरक्षित रखें
हम यह पक्का करना चाहते हैं कि आपका बॉट टोकन और क्लाइंट के साइनिंग सीक्रेट सुरक्षित रूप से सेव किए गए हों. इन्हें सोर्स कोड में हार्ड-कोड करने से, सीक्रेट वर्शन को वर्शन कंट्रोल में पब्लिश करने या डॉकर इमेज में एम्बेड करने की सुविधा मिलती है. इससे, सीक्रेट टोकन गलती से सार्वजनिक हो जाते हैं.
सीक्रेट मैनेजर की मदद से, एपीआई पासकोड, पासवर्ड, सर्टिफ़िकेट, और अन्य संवेदनशील जानकारी को सुरक्षित और आसान तरीके से सेव किया जा सकता है. सीक्रेट मैनेजर, Google Cloud में सभी चीज़ों को मैनेज करने, ऐक्सेस करने, और उनका ऑडिट करने के लिए एक ही जगह पर अहम जानकारी उपलब्ध कराता है.
अपने सीक्रेट बनाएं
नीचे दिए गए निर्देशों का इस्तेमाल करके, अपने क्लाइंट के साइनिंग सीक्रेट और बॉट टोकन सेव करें:
- क्लाइंट साइनिंग सीक्रेट
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)
Google Cloud Console में जाकर भी, अपने सीक्रेट देखने और मैनेज किए जा सकते हैं.
7. सैंपल कोड पाएं
कमांड-लाइन पर Cloud Shell में, GitHub रिपॉज़िटरी का क्लोन बनाने के लिए यह कमांड चलाएं:
git clone https://github.com/googlecodelabs/cloud-slack-bot.git
डायरेक्ट्री को cloud-slack-bot/start
में बदलें.
cd cloud-slack-bot/start
कोड को समझना
kittenbot.js
फ़ाइल को अपने पसंदीदा कमांड लाइन एडिटर (nano, vim, emacs...) या मौजूदा फ़ोल्डर को सीधे Cloud Shell Editor में खोलने के लिए इस निर्देश के साथ खोलें:
cloudshell workspace .
kittenbot कोड के दो मुख्य फ़ंक्शन हैं. एक तरीका है, सीक्रेट एजेंट को वापस लाना और दूसरा, बॉट को.
सबसे पहले, हम डिपेंडेंसी इंपोर्ट करते हैं:
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 से मैसेज का अनुवाद आसानी से कर पाता है. सीक्रेट मैनेजर क्लाइंट की मदद से, वे सीक्रेट ऐक्सेस किए जा सकते हैं जिन्हें आपने पिछले चरण में सेव किया था.
इसके बाद, सीक्रेट पाने का तरीका हमारे पास है:
/**
* 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 को सीक्रेट के साथ कॉन्फ़िगर करता है. इसके बाद, मैसेज पाने के लिए एंडपॉइंट तय करता है. कंट्रोलर चालू होने के बाद, बॉट "हैलो", "नमस्ते" या "नमस्ते" वाले किसी भी मैसेज का जवाब देगा "म्याऊँ. EVENT".
ऐप्लिकेशन मेनिफ़ेस्ट में ये खास हिस्से देखें:
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Cloud Run की मदद से, सीधे सोर्स से Node.js ऐप्लिकेशन को डिप्लॉय किया जा सकता है. ये कार्रवाइयां, हुड के तहत होंगी:
- Cloud Run, कंटेनर इमेज बनाने के लिए Cloud Build को कॉल करता है (सोर्स कोड से डिप्लॉय करना देखें).
- अगर सोर्स कोड डायरेक्ट्री में
Dockerfile
मौजूद है, तो Cloud Build इसका इस्तेमाल कंटेनर इमेज बनाने के लिए करता है. - ऐसा नहीं है, इसलिए Cloud Build सोर्स का विश्लेषण करने और प्रोडक्शन के लिए तैयार इमेज अपने-आप जनरेट करने के लिए, Buildpacks को कॉल करता है.
- Buildpack,
package.json
मेनिफ़ेस्ट का पता लगाता है और Node.js के लिए इमेज बनाता है. scripts.start
फ़ील्ड से तय होता है कि ऐप्लिकेशन कैसे शुरू होगा.engines.node
फ़ील्ड, कंटेनर बेस इमेज का Node.js वर्शन तय करता है.- डिप्लॉयमेंट के समय, सुरक्षा से जुड़े ऐसे समाधान अपने-आप लागू हो जाते हैं जिनके बारे में पहले से जानकारी है.
आप ऐप्लिकेशन को डिप्लॉय करने के लिए तैयार हैं!
8. ऐप्लिकेशन को डिप्लॉय करें
Slack Events API, इवेंट के बारे में आउटगोइंग मैसेज भेजने के लिए वेबहुक का इस्तेमाल करता है. Slack ऐप्लिकेशन को कॉन्फ़िगर करते समय, आपको ऐसा यूआरएल देना होगा जिसे Slack API से पिंग किया जा सके. इसे कोई भी ऐक्सेस कर सकता है.
Cloud Run, वेबहुक टारगेट होस्ट करने का एक अच्छा समाधान है. यह आपको अपनी पसंद की किसी भी भाषा या रनटाइम का इस्तेमाल करने की सुविधा देता है और इससे एक ही जगह पर कई विकल्प मिलते हैं. इसका मतलब है कि आपका ऐप्लिकेशन ज़्यादा वॉल्यूम मैनेज कर पाएगा.
अपना प्रोजेक्ट आईडी वापस पाना
PROJECT_ID एनवायरमेंट वैरिएबल तय करें:
PROJECT_ID=$(gcloud config get-value core/project)
Cloud Run के लिए अपना क्षेत्र तय करना
Cloud Run, एक इलाके के हिसाब से काम करता है. इसका मतलब है कि Cloud Run सेवा को चलाने वाला इन्फ़्रास्ट्रक्चर, किसी खास इलाके में मौजूद होता है और Google उसे मैनेज करता है. इससे वह इन्फ़्रास्ट्रक्चर, उस इलाके के सभी ज़ोन में ज़रूरत के हिसाब से उपलब्ध रहता है. वह क्षेत्र तय करें जिसका इस्तेमाल आपको डिप्लॉयमेंट के लिए करना है. उदाहरण के लिए:
REGION="us-central1"
अनुमतियां अपडेट करना
Secret Manager से सीक्रेट ऐक्सेस करने के लिए, Cloud Run सेवा खाते को 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
ऐप्लिकेशन को डिप्लॉय करना
Cloud Run सेवा, एक यूनीक एंडपॉइंट दिखाती है. साथ ही, आने वाले अनुरोधों को मैनेज करने के लिए, इन्फ़्रास्ट्रक्चर को अपने-आप स्केल करती है.
ऐप्लिकेशन को Cloud Run पर डिप्लॉय करें:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
- इससे
kittenbot
नाम की एक सेवा बन जाती है. --source
विकल्प, Cloud Build की मदद से ऐप्लिकेशन बनाने के लिए, मौजूदा फ़ोल्डर का इस्तेमाल करता है. Cloud Build अपने-आपpackage.json
फ़ाइल की मौजूदगी का पता लगा लेता है.- इसके बजाय, इस निर्देश की मदद से डिफ़ॉल्ट क्षेत्र तय किया जा सकता है:
gcloud config set run/region $REGION
- आपके पास इस निर्देश की मदद से, Cloud Run को डिफ़ॉल्ट रूप से मैनेज करने की सुविधा देने का विकल्प भी है:
gcloud config set run/platform managed
--set-env-vars
विकल्प, सर्विस एनवायरमेंट वैरिएबल सेट करता है.--allow-unauthenticated
विकल्प की मदद से, यह सेवा सार्वजनिक तौर पर उपलब्ध होती है.
पहली बार, आपको Artifact Registry का डेटा स्टोर करने की जगह बनाने का अनुरोध मिलेगा. पुष्टि करने के लिए Enter पर टैप करें:
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)?
इससे आपके सोर्स कोड को Artifact Registry के डेटा स्टोर करने की जगह में अपलोड हो जाएगा और आपकी कंटेनर इमेज तैयार हो जाएगी:
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 ...
इसके बाद, बिल्ड और डिप्लॉयमेंट पूरा होने तक इंतज़ार करें. सफल होने पर, कमांड लाइन सेवा का यूआरएल दिखाती है:
... 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
इस निर्देश की मदद से, आपको सेवा का यूआरएल मिल सकता है:
SERVICE_URL=$( \ gcloud run services describe kittenbot \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
यूआरएल का फ़ॉर्मैट ऐसा होता है:
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
इस यूआरएल का इस्तेमाल, Slack Events API को चालू करने के लिए किया जाएगा. अगले चरण में इस्तेमाल करने के लिए, इसे अपने क्लिपबोर्ड पर कॉपी करें.
आपकी सेवा अब लाइव और सार्वजनिक रूप से उपलब्ध है! ज़्यादा जानकारी के लिए, Cloud Run कंसोल पर जाएं.
इसकी मदद से, यह देखा जा सकता है कि पिछली बार बदलाव कब किया गया था और उसे कितना ट्रैफ़िक मिल रहा है. इसके अलावा, लॉग भी देखे जा सकते हैं. लॉग पर क्लिक करने पर, हमें पता चलेगा कि Botkit कंट्रोलर चालू है और मैसेज पाने के लिए तैयार है.
अब अपने Slack चैनल से मैसेज भेजना शुरू करते हैं!
9. Slack इवेंट चालू करें
जैसा कि हमने पहले देखा था, हमारा kittenbot कोड हमारे वेबहुक टारगेट के लिए एक मिलता-जुलता एंडपॉइंट तय करता है.
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
इसका मतलब है कि हमारा पूरा यूआरएल, Cloud Run सेवा का बेस हिस्सा होगा. इसमें /api/messages
भी शामिल होगा.
इवेंट चालू करना
ऐप्लिकेशन मैनेजमेंट पेज में, साइडबार पर इवेंट सदस्यताएं सेक्शन पर जाएं और इवेंट चालू करें को टॉगल करके चालू करें. अपनी सेवा का यूआरएल डालें:
PASTE_THE_SERVICE_URL/api/messages
आप यूआरएल को कितनी तेज़ी से टाइप करते हैं, इसके आधार पर आपके काम को पूरा करने से पहले पुष्टि करने की कोशिश की जा सकती है. अगर यह काम नहीं करता, तो "फिर से कोशिश करें" पर क्लिक करें.
सदस्यता लें
मैसेज बॉट के सभी इवेंट की सदस्यता लें.
पेज में सबसे नीचे, बदलाव सेव करें पर क्लिक करें. आपको अपना ऐप्लिकेशन फिर से इंस्टॉल करने के लिए कहा जाएगा. निर्देशों को देखें और अनुमति दें पर क्लिक करें.
इस समय, आपका बॉट पूरी तरह से इंटिग्रेट हो गया है! फ़ाइल फ़ोल्डर में मौजूद मैसेज, Slack को ट्रिगर करेंगे, ताकि Cloud Run सेवा पर मैसेज भेजे जा सकें. इसके बाद, मैसेज के जवाब में आपको शुभकामनाओं के साथ मैसेज भेजा जाएगा.
10. अपने बॉट की जांच करें
Kittenbot को डायरेक्ट मैसेज भेजें:
अपने चैनल पर "@kittenbot" डालकर kittenbot जोड़ें और फिर "उन्हें न्योता दें" पर क्लिक करें.:
अब आपके चैनल के सभी लोग Kittenbot से इंटरैक्ट कर सकते हैं!
Slack का हर मैसेज एक इवेंट ट्रिगर करता है और हमारी Cloud Run सेवा को एक एचटीटीपी पीओएसटी मैसेज भेजता है. अगर आप Cloud Run सेवा लॉग पर नज़र डालें, तो आपको दिखेगा कि हर मैसेज, लॉग में पीओएसटी एंट्री से जुड़ा हुआ है.
kittenbot हर मैसेज का जवाब इस तरह देता है: "म्याऊं. EVENT".
11. बोनस - अपना बॉट अपडेट करें
इस वैकल्पिक सेक्शन में कुछ मिनट लगने चाहिए. सीधे क्लीनअप पर जाएं.
बातचीत के थ्रेड
हम चाहते हैं कि बॉट सिर्फ़ "म्याउ" बोलने के अलावा और भी काम करे. लेकिन आप Cloud Run पर चल रही किसी चीज़ के नए वर्शन को कैसे डिप्लॉय करते हैं?
डायरेक्ट्री को cloud-slack-bot/extra-credit
में बदलें:
cd ../extra-credit/
मौजूदा फ़ोल्डर को Cloud Shell Editor में खोलें:
cloudshell workspace .
Botkit की मदद से, बातचीत को मैनेज किया जा सकता है. इससे बॉट ज़्यादा जानकारी पाने का अनुरोध कर सकता है. साथ ही, सिर्फ़ एक शब्द का जवाब देने के बजाय, मैसेज पर प्रतिक्रिया दे सकता है.
डायलॉग तय करें
सबसे पहले, देखें कि फ़ाइल के आखिर में बातचीत वाले फ़ंक्शन कैसे परिभाषित किए गए हैं:
// ...
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(() => {
// ...
});
}
डायलॉग को ट्रिगर करना
अब वह डायलॉग, कंट्रोलर के इस्तेमाल के लिए उपलब्ध है. देखें कि जब चैटबॉट "kitten", "kittens", "cat" या "cats" सुनता है, तो बातचीत कैसे शुरू होती है:
// ...
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
// ...
});
// ...
ऐप्लिकेशन अपडेट करना
ऐप्लिकेशन को Cloud Run पर फिर से डिप्लॉय करें:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
इसे आज़माएं
बधाई हो! आपने अभी-अभी Cloud Run पर चल रहे Slack बॉट को नए वर्शन में अपडेट किया है.
स्लैश कमांड
अगर आपको उपयोगकर्ता से बातचीत नहीं करनी है, तो क्या होगा? अगर आपको एक आसान निर्देश से कोई कार्रवाई ट्रिगर करनी हो, तो क्या होगा?
Slack, स्लैश कमांड का इस्तेमाल करके यह सुविधा देता है. इससे उपयोगकर्ता, मैसेज बॉक्स में कमांड डालकर आपके ऐप्लिकेशन को शुरू कर सकते हैं.
स्लैक स्लैश कमांड चालू करें
- अपने ऐप्लिकेशन प्रबंधन पेज पर सुविधाएं के अंतर्गत स्लैश कमांड सेक्शन पर जाएं.
- नया निर्देश बनाएं पर क्लिक करें.
- अपनी kittenbot सेवा के यूआरएल के साथ
/cats
कमांड को कॉन्फ़िगर करें. याद रखें कि उसी एंडपॉइंट का इस्तेमाल करना है जिसका इस्तेमाल आपने इवेंट एपीआई को चालू करने के लिए किया था! यह आपका यूआरएल और'/api/messages'
है.
- अपने ऐप्लिकेशन और अनुमतियों को अपडेट करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.
अपने कंट्रोलर में स्लैश कमांड जोड़ना
देखें कि कंट्रोलर.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
बॉट आठ बिल्लियों के साथ जवाब देगा. यह सिर्फ़ आपको दिखेगा:
12. साफ़-सफ़ाई सेवा
बधाई हो, अब आपके पास Cloud Run पर Slack बॉट चलाने का विकल्प है. इस्तेमाल किए जा रहे संसाधनों को साफ़ करने का समय आ गया है (लागत पर बचत करने और एक अच्छा क्लाउड नागरिक बनने के लिए).
प्रोजेक्ट मिटाना
सीधे Cloud Shell से, पूरा प्रोजेक्ट मिटाया जा सकता है:
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].
स्टोरेज बकेट मिटाना
बकेट पाथ पाने के लिए, सबसे पहले Google Cloud Storage बकेट की सूची बनाएं:
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/...
आखिर में, Cloudbuild बकेट को मिटाएं:
gsutil rm -r gs://${PROJECT_ID}_cloudbuild/
कमांड आउटपुट
Removing gs://<PROJECT_ID>_cloudbuild/...
13. बधाई हो!
अब आपको Cloud Run पर Slack बॉट चलाने का तरीका पता है!
हमने इस तकनीक की शुरुआत ही की है. हम चाहते हैं कि आप Cloud Run डिप्लॉयमेंट की मदद से, इस टेक्नोलॉजी को और बेहतर बनाएं.
इसमें हमने इन विषयों के बारे में बताया
- Slack में बॉट को पसंद के मुताबिक इंटिग्रेट करने की सुविधा बनाना
- सीक्रेट मैनेजर की मदद से, अपने Slack के राज़ को सुरक्षित करना
- Cloud Run पर आपके Slack बॉट को डिप्लॉय करना
अगले चरण
- Cloud Run के और ट्यूटोरियल पूरे करें
ज़्यादा जानें
- GitHub पर Google Cloud के Slack इंटिग्रेशन के उदाहरण देखें.
- Google Cloud की अन्य सुविधाएं खुद आज़माएं. हमारे ट्यूटोरियल देखें.