1. Genel Bakış
Bu codelab'de, Botkit araç setini kullanarak bir Slack botu oluşturmayı ve bu botu Google Cloud'da çalıştırmayı öğreneceksiniz. Bot ile canlı bir Slack kanalında etkileşim kurabilirsiniz.
Neler öğreneceksiniz?
- Slack'te bot özel entegrasyonu oluşturma
- Secret Manager ile Slack gizli anahtarlarınızın güvenliğini sağlama
- Durum bilgisiz container'larınızı otomatik olarak ölçeklendiren, tümüyle yönetilen bir bilgi işlem platformu olan Cloud Run'da Slack botu dağıtma
İhtiyacınız olanlar
Bu eğiticiden nasıl yararlanacaksınız?
Google Cloud deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle
PROJECT_ID
olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i başlatma
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu eğitimde, Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara bir ekran görüntülendiyse Devam'ı tıklayın.
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Gereken tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. API'leri etkinleştirme
Cloud Shell'den Artifact Registry, Cloud Build, Cloud Run ve Secret Manager API'lerini etkinleştirin:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
Bu işlem, şuna benzer bir başarı mesajı verir:
Operation "operations/..." finished successfully.
Artık uygulamanızı hazırlayıp dağıtmaya hazırsınız...
4. Slack çalışma alanı oluşturma
Özel entegrasyonlar oluşturmanıza izin verilen bir Slack çalışma alanına ihtiyacınız vardır. Bu eğitim için kullanmak istediğiniz çalışma alanı yoksa ücretsiz olarak bir çalışma alanı oluşturabilirsiniz.
5. Slack bot kullanıcısı oluşturma
Bot kullanıcısı Slack'teki mesajları dinleyebilir, mesaj yayınlayabilir ve dosya yükleyebilir. Bu codelab'de, basit bir karşılama mesajı yayınlamak için bir bot oluşturacaksınız.
Yeni Slack uygulaması oluşturma
- Slack uygulama yönetimi sayfasına gidin.
- Sağ üst köşedeki Yeni uygulama oluştur düğmesini tıklayın.
- Uygulamaya "Kittenbot" gibi bir ad verin.
- Uygulamanın yüklenmesini istediğiniz Slack ekibini seçin.
Bot kullanıcısı oluşturma
- Sol taraftaki panelde Özellikler'in altındaki Uygulama Ana Sayfası'na gidin
- Eklenecek Kapsamları İncele'yi tıklayarak bot jetonunuza kapsam atayın.
- Bot Jeton Kapsamları bölümüne gidip OAuth Kapsamı Ekle'yi tıklayın. "Mesajları Kittenbot olarak gönder"i
chat:write
seçin
- Yukarı kaydırın ve Uygulamayı Çalışma Alanınıza Yükle düğmesini tıklayın.
- Bu işlem, uygulamayı ekibinize yükler, az önce oluşturduğunuz bot kullanıcısını ekler ve bir bot jetonu oluşturur.
- İstendiğinde "İzin ver"i tıklayın. tıklayın.
Mesajları ve komutları etkinleştirme
- Sekmeleri Göster'e gidin ve her iki seçeneğin de etkinleştirildiğinden emin olun:
İstemci imzalama gizli anahtarını alma
- Ayarlar bölümündeki Temel Bilgiler'e gidin.
- Signing Secret (İmzalama Gizli Anahtarı) bölümüne gidin, Show (Göster) seçeneğini tıklayın ve gizli anahtarı panonuza kopyalayın:
- Gizli anahtarı bir ortam değişkenine kaydedin:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
Bot jetonunu alma
- OAuth & Özellikler bölümündeki İzinler'i tıklayın.
- Bot Kullanıcısı OAuth Erişim Jetonu metnini panonuza kopyalamak için Copy (Kopyala) düğmesini tıklayın.
- Bot jetonunu bir ortam değişkenine kaydedin:
BOT_TOKEN=PASTE_THE_BOT_TOKEN
Endişelenmeyin. Bu jetonları tekrar almanız gerekiyorsa uygulama yönetimi sayfasından bu yapılandırma sayfasına geri dönebilirsiniz.
6. Sırlarınızın güvende olmasını sağlayın
Bot jetonunuzun ve istemci imzalama gizli anahtarınızın güvenli bir şekilde saklandığından emin olmak istiyoruz. Bunların kaynak koduna sabit olarak kodlanması, bu gizli anahtarların sürüm kontrolünde yayınlanması veya bir Docker görüntüsüne yerleştirilmesi yoluyla yanlışlıkla açığa çıkmasına yol açabilir.
Secret Manager; API anahtarları, şifreler, sertifikalar ve diğer hassas verileri depolamak için güvenli ve kullanışlı bir yöntem sunar. Secret Manager, gizli anahtarları Google Cloud genelinde yönetmek, denetlemek ve bunlara erişmek için merkezi bir konum ve tek bir bilgi kaynağı sağlar.
Gizli anahtarlarınızı oluşturma
Aşağıdaki komutları kullanarak istemci imzalama gizli anahtarınızı ve bot jetonunuzu kaydedin:
- İstemci imzalama gizli anahtarı
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \ --replication-policy automatic \ --data-file -
- Bot jetonu
echo -n $BOT_TOKEN | gcloud secrets create bot-token \ --replication-policy automatic \ --data-file -
Gizli Anahtarlarınıza erişme
Gizli anahtarlarınızın doğru şekilde oluşturulduğunu ve izinlerinizin çalıştığını onaylayalım. Aşağıdaki komutları kullanarak gizli anahtarlarınıza erişin:
echo $(gcloud secrets versions access 1 --secret client-signing-secret) echo $(gcloud secrets versions access 1 --secret bot-token)
Gizli anahtarlarınızı Google Cloud Console'da da görüntüleyip yönetebilirsiniz.
7. Örnek kodu alın
GitHub deposunu klonlamak için Cloud Shell'de komut satırında aşağıdaki komutu çalıştırın:
git clone https://github.com/googlecodelabs/cloud-slack-bot.git
Dizini cloud-slack-bot/start
olarak değiştirin.
cd cloud-slack-bot/start
Kodu Anlama
kittenbot.js
dosyasını tercih ettiğiniz komut satırı düzenleyicisiyle (nano, vim, emacs...) veya aşağıdaki komutla açarak geçerli klasörü doğrudan Cloud Shell Düzenleyici'de açın:
cloudshell workspace .
yavru kedi kodunun iki ana işlevi vardır. Biri sırları almak, diğeri ise bot'u çalıştırmaktır.
İlk olarak bağımlılıkları içe aktarırız:
kittenbot.js
const { Botkit } = require('botkit');
const {
SlackAdapter,
SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
SlackAdapter ve SlackEventMiddleware, Botkit'i genişleten ve bot'un Slack API'ye gelen ve Slack API'den gelen mesajları kolayca çevirmesine olanak tanıyan paketlerdir. Secret Manager istemcisi, önceki adımda kaydettiğiniz gizli anahtarlara erişmenizi sağlar.
Şimdi de gizli anahtarları alma fonksiyonumuz var:
/**
* 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;
}
Bu işlev, bot'un kimliğini doğrulamak için gereken gizli anahtarların dize değerlerini döndürür.
Sonraki işlev, bot'u başlatır:
/**
* 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:');
}
);
});
}
İşlevin ilk bölümü, SlackAdapter'ı gizli anahtarlarla yapılandırır ve ardından mesaj almak için bir uç nokta belirtir. Kumanda etkinleştirildikten sonra bot, "merhaba", "merhaba" veya "merhaba" içeren tüm mesajlara yanıt verir. "Miyav. 😺".
Uygulama manifest dosyasındaki şu özel bölümlere göz atın:
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Node.js uygulamasını Cloud Run ile doğrudan kaynaktan dağıtabilirsiniz. Arka planda aşağıdaki işlemler gerçekleşir:
- Cloud Run, container görüntüsü derlemek için Cloud Build'i çağırır (Kaynak kodundan dağıtma bölümüne bakın).
- Kaynak kodu dizininde
Dockerfile
varsa Cloud Build bunu kullanarak bir container görüntüsü oluşturur. - Aksi halde Cloud Build, kaynağı analiz etmek ve üretime hazır bir görüntüyü otomatik olarak oluşturmak için Buildpacks'i çağırır.
- Buildpacks,
package.json
manifestini algılar ve bir Node.js görüntüsü oluşturur. scripts.start
alanı, uygulamanın nasıl başlatıldığını belirler.engines.node
alanı, kapsayıcı temel görüntüsünün Node.js sürümünü belirler.- Dağıtım sırasında bilinen güvenlik düzeltmeleri otomatik olarak uygulanır.
Uygulamayı dağıtmaya hazırsınız.
8. Uygulamayı dağıtın
Slack Events API, etkinliklerle ilgili giden mesajları göndermek için webhook'ları kullanır. Slack Uygulaması'nı yapılandırırken Slack API'nin ping atması için herkesin erişebileceği bir URL sağlamanız gerekir.
Cloud Run, webhook hedefleri barındırmak için iyi bir çözümdür. İstediğiniz dili veya çalışma zamanını kullanmanıza olanak tanır ve eşzamanlılık sağlar. Bu da uygulamanızın çok daha fazla iş yükünü kaldırabileceği anlamına gelir.
Proje kimliğinizi alma
PROJECT_ID ortam değişkenini tanımlayın:
PROJECT_ID=$(gcloud config get-value core/project)
Cloud Run bölgenizi tanımlayın
Cloud Run bölgeseldir. Yani Cloud Run hizmetinizi çalıştıran altyapı belirli bir bölgede bulunur ve Google tarafından yönetilir. Bu sayede, söz konusu bölgedeki tüm alt bölgelerde yedek olarak kullanılabilir. Dağıtımınız için kullanacağınız bölgeyi tanımlayın. Örneğin:
REGION="us-central1"
İzinleri güncelleme
Secret Manager'daki gizli anahtarlara erişebilmek için Cloud Run hizmet hesabına roles/secretmanager.secretAccessor
rolü verilmelidir.
Öncelikle, varsayılan hizmet hesabını bir ortam değişkenine kaydedin:
SERVICE_ACCOUNT=$(gcloud iam service-accounts list \ --format "value(email)" \ --filter "displayName:Compute Engine default service account")
Şu e-posta adresini kaydettiğinizi onaylayın:
echo $SERVICE_ACCOUNT
Hizmet hesabı şu biçimdedir: PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
E-posta adresini aldıktan sonra hizmet hesabı için rolü etkinleştirin:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/secretmanager.secretAccessor
Uygulamayı dağıtma
Cloud Run hizmeti, gelen istekleri karşılamak için benzersiz bir uç nokta sunar ve temel altyapıyı otomatik olarak ölçeklendirir.
Uygulamayı Cloud Run'a dağıtın:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
- Bu işlem,
kittenbot
adlı bir hizmet oluşturur. --source
seçeneği, uygulamayı Cloud Build ile derlemek için geçerli klasörü kullanır. Cloud Build,package.json
dosyasının varlığını otomatik olarak algılar.- Alternatif olarak şu komutla da varsayılan bir bölge tanımlayabilirsiniz:
gcloud config set run/region $REGION
- Ayrıca, şu komutla Cloud Run'ın varsayılan olarak yönetilmesini de sağlayabilirsiniz:
gcloud config set run/platform managed
--set-env-vars
seçeneği, hizmet ortamı değişkenlerini ayarlar.--allow-unauthenticated
seçeneği, hizmeti herkese açık hale getirir.
İlk kez Artifact Registry deposu oluşturma istemi alırsınız. Doğrulamak için Enter'a dokunun:
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)?
Bu işlem, kaynak kodunuzun Artifact Registry deposuna yüklenmesini ve container görüntünüzün derlemesini başlatır:
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 ...
Ardından, derleme ve dağıtım tamamlanana kadar biraz bekleyin. İşlem başarılı olursa komut satırında hizmet URL'si gösterilir:
... 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
Hizmet URL'sini şu komutla alabilirsiniz:
SERVICE_URL=$( \ gcloud run services describe kittenbot \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
URL'nin biçimi aşağıdaki gibidir:
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
Bu URL, Slack Events API'yi etkinleştirmek için kullanılan temel olacak. Sonraki adımda kullanmak üzere panonuza kopyalayın.
Hizmetiniz artık yayında ve herkesin kullanımına açık. Daha fazla bilgi için Cloud Run konsoluna gidin.
En son düzeltmenin ne zaman oluşturulduğunu ve ne kadar trafik aldığını görebilir ve günlüklere bakabilirsiniz. Günlükleri incelediğimizde Botkit denetleyicisinin açık ve mesajları almaya hazır olduğunu görebiliriz.
Şimdi Slack kanalımızdan mesaj göndermeye başlayalım.
9. Slack etkinliklerini etkinleştirme
Daha önce gördüğümüz gibi kittenbot kodumuz webhook hedefimiz için göreli bir uç nokta belirtir.
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
Bu, tam URL'mizin Cloud Run hizmetinin temel parçasına ek olarak /api/messages
olacağı anlamına gelir.
Etkinlikleri etkinleştirme
Uygulama yönetimi sayfasında, kenar çubuğundaki Etkinlik Abonelikleri bölümüne gidin ve Etkinlikleri Etkinleştir'i açın. Hizmet URL'nizi girin:
PASTE_THE_SERVICE_URL/api/messages
URL'yi ne kadar hızlı yazdığınıza bağlı olarak, işleminiz tamamlanmadan önce URL'yi doğrulamaya çalışabilir. Başarısız olursa, "Yeniden dene"yi tıklayın.
Abone ol
Tüm mesaj botu etkinliklerine abone olun.
Sayfanın alt kısmında bulunan Değişiklikleri Kaydet'i tıklayın. Uygulamanızı Yeniden Yüklemeniz istenir. İstemleri gözden geçirin ve İzin ver'i tıklayın.
Bot'unuz bu noktada tamamen entegre edilmiştir. Çalışma alanındaki mesajlar, Cloud Run hizmetinize mesaj göndermesi için Slack'i tetikler ve bu da basit bir selamlamayla yanıt verir.
10. Bot'unuzu test edin
Kittenbot'a doğrudan mesaj gönderme:
"@kittenbot" yazarak kanalınıza kittenbot ekleyin ve ardından "Onları Davet Et"i tıklayarak:
Artık kanalınızdaki herkes Kittenbot ile etkileşime geçebilir.
Slack'teki her mesaj bir etkinliği tetikler ve Cloud Run hizmetimize bir HTTP POST mesajı gönderir. Cloud Run hizmet günlüklerine bakarsanız her mesajın günlükteki bir POST girişine karşılık geldiğini görürsünüz.
Yavru kedi, her mesaja "Miyav. 😺".
11. Bonus - Bot'unuzu güncelleyin
İsteğe bağlı bu bölüm birkaç dakika sürecektir. Doğrudan Temizlik bölümüne geçebilirsiniz.
Sohbet İleti Dizileri
Bot'un yalnızca "miyav" demekten daha fazlasını yapmasını istiyoruz. Peki, Cloud Run'da çalışan bir öğenin yeni sürümünü nasıl dağıtabilirsiniz?
Dizini şu şekilde değiştirin: cloud-slack-bot/extra-credit
:
cd ../extra-credit/
Mevcut klasörü Cloud Shell Düzenleyici'de açın:
cloudshell workspace .
Botkit, sohbetleri yönetme olanağı sunar. Bunlar sayesinde bot, daha fazla bilgi isteyebilir ve mesajlara tek kelimelik bir yanıtın ötesinde tepki verebilir.
İletişim kutusunu tanımlama
Öncelikle, dosyanın sonunda konuşma işlevlerinin nasıl tanımlandığına bakın:
// ...
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;
}
Bu yeni ileti dizisi, verilen yanıtlara göre ileti dizisini yönlendirir. Örneğin, kullanıcı "hayır" yanıtı verirse ardından, "no_kittens" etiketli mesaja geçer ve bu ileti dizisinde son bulur.
İletişim kutusunu kumandaya ekleme
Görüşme tanımlandığına göre, şimdi bunu denetleyiciye nasıl ekleyeceğinizi öğrenin:
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(() => {
// ...
});
}
İletişim kutusunu tetikleme
Artık kumandanın kullanabileceği iletişim kutusu olduğuna göre chatbot "kedi yavrusu", "kedi", "kedi" veya "kedi" ifadesini duyduğunda konuşmanın nasıl başladığına bakabilirsiniz:
// ...
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
// ...
});
// ...
Uygulamayı güncelleme
Uygulamayı Cloud Run'a yeniden dağıtın:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
Deneyin
Tebrikler! Cloud Run'da çalışan bir Slack bot'unu yeni bir sürüme güncellediniz.
Eğik çizgi komutları
Kullanıcıyla görüşme yapmak istemiyorsanız ne olur? Bir işlemi basit bir komutla tetiklemeyi tercih ederseniz ne olur?
Slack bu işlevi, kullanıcıların komutu mesaj kutusuna girerek uygulamanızı çağırmasına olanak tanıyan Eğik çizgi komutları aracılığıyla sunar.
Slack Slash Komutlarını Etkinleştir
- Uygulama Yönetimi Sayfanızda Özellikler'in altındaki Eğik Çizgi Komutları bölümüne gidin.
- Create New Command'ı (Yeni Komut Oluştur) tıklayın.
- Kittenbot hizmet URL'nizle bir
/cats
komutu yapılandırın. Events API'yi etkinleştirmek için kullandığınız uç noktayı kullanmayı unutmayın. Bu URL'nizle birlikte'/api/messages'
.
- Uygulamanızı ve izinlerinizi güncellemek için istemi takip edin.
Denetleyicinize Eğik Çizgi Komutları Ekleme
Eğik çizgi komutları için bir işleyicinin,control.sold işlevine nasıl eklendiğini öğrenin:
// ...
// 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
});
// ...
Deneyin
Eğik çizgi komutunu göndermek için /cats ve bir sayı girin. Örnek: /cats 8
Bot, yalnızca sizin görebileceğiniz 8 kediyle yanıt verir:
12. Temizleme
Tebrikler, artık Cloud Run'da çalışan bir Slack bot'unuz var. Kullanılan kaynakları biraz temizlemenin zamanı geldi (maliyet tasarrufu yapmak ve iyi bir bulut vatandaşı olmak için).
Projeyi silme
Projenin tamamını doğrudan Cloud Shell'den silebilirsiniz:
gcloud projects delete $PROJECT_ID
Alternatif olarak, farklı kaynakları tek tek silmeyi tercih ederseniz sonraki bölüme geçin.
Dağıtımı silme
gcloud run services delete kittenbot --region $REGION
Komut çıkışı
Service [kittenbot] will be deleted. Do you want to continue (Y/n)? y Deleted service [kittenbot].
İstemci imzalama gizli anahtarınızı silme
gcloud secrets delete client-signing-secret
Komut çıkışı
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].
Bot jetonu gizli anahtarınızı silme
gcloud secrets delete bot-token
Komut çıkışı
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].
Depolama alanı paketlerini silme
Öncelikle paket yolunu almak için Google Cloud Storage paketlerini listeleyin:
gsutil ls
Komut çıkışı
gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/ gs://<PROJECT_ID>_cloudbuild/
Şimdi, yapılar paketini silin:
gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/
Komut çıkışı
Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...
Son olarak, Cloudbuild paketini silin:
gsutil rm -r gs://${PROJECT_ID}_cloudbuild/
Komut çıkışı
Removing gs://<PROJECT_ID>_cloudbuild/...
13. Tebrikler!
Artık Cloud Run'da Slack botu çalıştırmayı biliyorsunuz.
Bu teknolojinin henüz yolun başındayız. Kendi Cloud Run dağıtımlarınızı kullanarak daha fazlasını keşfetmenizi öneririz.
İşlediklerimiz
- Slack'te özel bot entegrasyonu oluşturma
- Secret Manager ile Slack gizli anahtarlarınızın güvenliğini sağlama
- Slack botunuzu Cloud Run'da dağıtma
Sonraki Adımlar
- Daha fazla Cloud Run eğiticisini tamamlayın
Daha Fazla Bilgi
- GitHub'da diğer Google Cloud Slack entegrasyonu örneklerine göz atın.
- Diğer Google Cloud özelliklerini kendiniz deneyin. Eğiticilerimize göz atın.