1. Genel Bakış

Bu codelab'de, Botkit araç setini kullanarak Slack botu oluşturmayı ve Google Cloud'da çalıştırmayı öğreneceksiniz. Botla canlı bir Slack kanalında etkileşim kurabilirsiniz.
Neler öğreneceksiniz?
- Slack'te özel bot entegrasyonu oluşturma
- Secret Manager ile Slack sırlarınızı nasıl güvenceye alabilirsiniz?
- 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ğitimi nasıl kullanacaksınız?
Google Cloud ile ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve 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. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak 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 'i
tıklayın.

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.
- Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu 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 projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse şu 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, aşağıdakine 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ınız olmalıdır. Bu eğitimde kullanmak istediğiniz bir çalışma alanınız yoksa ücretsiz olarak çalışma alanı oluşturabilirsiniz.

5. Slack bot kullanıcısı oluşturma
Bot kullanıcıları, Slack'teki mesajları dinleyebilir, mesaj gönderebilir ve dosya yükleyebilir. Bu codelab'de, basit bir selamlama mesajı yayınlamak için bot oluşturacaksınız.
Yeni bir Slack uygulaması oluşturma
- Slack uygulamaları yönetim 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 bölümünde Uygulama Ana Sayfası'na gidin.

- Eklenecek Kapsamları İncele'yi tıklayarak bot jetonunuza bir kapsam atayın.
- Sayfayı aşağı kaydırarak Bot Token Scopes (Bot Jetonu Kapsamları) bölümüne gidin ve Add an OAuth Scope (OAuth Kapsamı Ekle) seçeneğini tıklayın. "Mesajları Kittenbot olarak gönder" seçeneğini belirlemek için
chat:writesimgesini seçin.

- Yukarı kaydırıp Uygulamayı çalışma alanınıza yükleyin düğmesini tıklayın.
- Bu işlem, uygulamayı ekibinize yükler, yeni oluşturduğunuz bot kullanıcısını ekler ve bir bot jetonu oluşturur.
- İstendiğinde, botun çalışma alanınızda sohbet etmesine izin vermek için "İzin ver"i 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.
- İmza Gizli Anahtarı'na gidin, Göster'i tıklayın ve gizli anahtarı panonuza kopyalayın:

- Sırrı bir ortam değişkenine kaydedin:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
Bot jetonunu alma
- Özellikler bölümünde OAuth ve İzinler'e gidin.
- Bot User OAuth Access Token (Bot Kullanıcısı OAuth Erişim Jetonu) metnini panonuza kopyalamak için Kopyala düğmesini tıklayın.

- Bot jetonunu bir ortam değişkenine kaydedin:
BOT_TOKEN=PASTE_THE_BOT_TOKEN
Endişelenmeyin. Uygulama yönetimi sayfasından bu jetonları tekrar almanız gerekirse bu yapılandırma sayfasına geri dönebilirsiniz.
6. Gizli anahtarlarınızın güvenliğini sağlama
Bot jetonunuzun ve istemci imzalama gizli anahtarınızın güvenli bir şekilde saklanmasını istiyoruz. Bunları kaynak kodda sabit kodlamak, sürüm denetiminde yayınlayarak veya bir Docker görüntüsüne yerleştirerek bu sırları yanlışlıkla açığa çıkarma olasılığını artırır.
Secret Manager, API anahtarlarını, şifreleri, sertifikaları ve diğer hassas verileri depolamak için güvenli ve kullanışlı bir yöntem sunar. Secret Manager, gizli anahtarları Google Cloud çapında yönetmek, denetlemek ve bunlara erişmek için merkezi bir konum ve tek bir bilgi kaynağı sağlar.
Sırları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 dizelerinizin düzgün şekilde oluşturulduğunu ve izinlerinizin çalıştığını doğrulayalım. Aşağıdaki komutlarla sırlarınıza erişin:
echo $(gcloud secrets versions access 1 --secret client-signing-secret) echo $(gcloud secrets versions access 1 --secret bot-token)
Sırlarınızı Google Cloud Console'da da görüntüleyip yönetebilirsiniz.
7. Örnek kodu alın
Komut satırında Cloud Shell'i kullanarak GitHub deposunu klonlamak için 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 geçerli klasörü doğrudan Cloud Shell Düzenleyici'de açmak için aşağıdaki komutla açın:
cloudshell workspace .
Kittenbot kodunun iki temel işlevi vardır. Biri gizli anahtarları almak, diğeri ise botu çalıştırmak için kullanılır.
Öncelikle 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 botun mesajları Slack API'ye ve Slack API'den kolayca çevirmesine olanak tanıyan paketlerdir. Secret Manager istemcisi, önceki bir adımda kaydettiğiniz gizli anahtarlara erişmenize olanak tanır.
Ardından, sırları almak için kullandığımız işlev geliyor:
/**
* 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, botun kimliğini doğrulamak için gereken sırların dize değerlerini döndürür.
Aşağıdaki işlev, botu 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'ı sırlarla yapılandırır ve ardından mesaj almak için bir uç nokta belirtir. Ardından, kumanda açıldığında bot, "hello", "hi" veya "hey" içeren tüm mesajlara "Miyav. 😺".
Uygulama manifestindeki şu bölümleri inceleyin:
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Cloud Run ile Node.js uygulamasını doğrudan kaynaktan dağıtabilirsiniz. Perde arkasında şunlar gerçekleşir:
- Cloud Run, bir container görüntüsü oluşturmak için Cloud Build'i çağırır (bkz. Kaynak koddan dağıtım).
- Kaynak kodu dizininde
Dockerfilevarsa Cloud Build, container görüntüsü oluşturmak için bu dosyayı kullanır. - Bu nedenle 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.
- Buildpack'ler
package.jsonmanifest'ini algılar ve bir Node.js görüntüsü oluşturur. scripts.startalanı, uygulamanın nasıl başlatılacağını belirler.engines.nodealanı, 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 göndereceği herkese açık bir URL sağlamanız gerekir.
Cloud Run, webhook hedeflerini barındırmak için iyi bir çözümdür. Bu hizmet, istediğiniz dili veya çalışma zamanını kullanmanıza olanak tanır ve eşzamanlılık sağlar. Bu sayede uygulamanız çok daha yüksek hacimleri işleyebilir.
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ımlama
Cloud Run bölgeseldir. Bu nedenle, Cloud Run hizmetinizi çalıştıran altyapı belirli bir bölgede bulunur ve Google tarafından bu bölgedeki tüm bölgelerde yedekli olarak kullanılabilir şekilde yönetilir. Dağıtımınız için kullanacağınız bölgeyi tanımlayın. Örneğin:
REGION="us-central1"
İzinleri güncelleme
Cloud Run hizmet hesabına, Secret Manager'daki gizli anahtarlara erişebilmesi için 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")
E-posta adresinin kaydedildiğini 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
Bir Cloud Run hizmeti, gelen istekleri işleyebilmek için benzersiz bir uç noktayı açığa çıkarır ve altta yatan 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,
kittenbotadlı bir hizmet oluşturur. --sourceseçeneği, uygulamayı Cloud Build ile oluşturmak için mevcut klasörü kullanır. Cloud Build,package.jsondosyasının varlığını otomatik olarak algılar.- Alternatif olarak, bu komutla varsayılan bir bölge tanımlayabilirsiniz:
gcloud config set run/region $REGION - Ayrıca, bu komutla Cloud Run'ı varsayılan olarak yönetilen hale getirebilirsiniz:
gcloud config set run/platform managed --set-env-varsseçeneği, hizmet ortamı değişkenlerini ayarlar.--allow-unauthenticatedseçeneği, hizmeti herkese açık hâle getirir.
İlk kez kullandığınızda Artifact Registry deposu oluşturmanız istenir. 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 kapsayıcı görüntünüzün oluşturulmasını 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 bekleyin. İşlem başarılı olduğunda 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 şu biçimdedir:
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
Bu URL, Slack Events API'yi etkinleştirmek için kullanılacak temel URL olacaktır. Sonraki adımda kullanmak için kodu panonuza kopyalayın.
Hizmetiniz artık yayında ve herkese açık. Daha fazla bilgi için Cloud Run konsoluna gidin. 
Son düzeltmenin ne zaman oluşturulduğunu, ne kadar trafik aldığını görebilir ve günlükleri inceleyebilirsiniz. Günlükleri tıkladığımızda Botkit denetleyicisinin açık olduğunu ve mesaj 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 belirtiyor.
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
Bu durumda, tam URL'miz Cloud Run hizmetindeki temel bölüm ve /api/messages olacaktır.
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, siz bitirmeden önce doğrulama işlemi başlatılabilir. 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 Değişiklikleri Kaydet'i tıklayın. Uygulamanızı yeniden yüklemeniz istenir. İstemleri uygulayıp İzin ver'i tıklayın.
Bu noktada botunuz tamamen entegre edilmiş olur. Çalışma alanındaki mesajlar, Slack'in Cloud Run hizmetinize mesaj göndermesini tetikler. Bu hizmet de basit bir selamlama ile yanıt verir.
10. Bot'unuzu test etme
Kittenbot'a doğrudan mesaj gönderme:

"@kittenbot" yazıp "Davet Et"i tıklayarak kittenbot'u kanalınıza ekleyin:

Artık kanalınızdaki herkes Kittenbot ile etkileşim kurabilir.

Slack'teki her mesaj bir etkinliği tetikler ve Cloud Run hizmetimize bir HTTP POST mesajı gönderir. Cloud Run hizmet günlüklerine göz atarsanız her iletinin günlükteki bir POST girişine karşılık geldiğini görürsünüz.

Kittenbot, her mesaja "Miyav. 😺".
11. Bonus: Bot'unuzu güncelleme
Bu isteğe bağlı bölüm birkaç dakika sürer. Doğrudan Temizleme bölümüne geçebilirsiniz.
Sohbet Dizileri
Botun sadece "miyav" demesini istemiyoruz. Ancak Cloud Run'da çalışan bir uygulamanın yeni sürümünü nasıl dağıtırsınız?
Dizini cloud-slack-bot/extra-credit olarak değiştirin:
cd ../extra-credit/
Geçerli klasörü Cloud Shell Düzenleyici'de açma:
cloudshell workspace .
Botkit, görüşmeleri yönetme olanağı sunar. Bu sayede bot, daha fazla bilgi isteyebilir ve mesajlara tek kelimelik yanıtın ötesinde tepki verebilir.
İletişim kutusunu tanımlama
Öncelikle, dosyanın sonundaki sohbet işlevlerinin nasıl tanımlandığını inceleyin:
// ...
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 görüşme, yanıtlara göre ileti dizisini yönlendirir. Örneğin, kullanıcı yavru kedi sorusuna "hayır" yanıtını verirse bu ileti dizisinin sonu olan "no_kittens" etiketli mesaja atlanır.
İletişim kutusunu kumandaya ekleme
Konuşma tanımlandığına göre, 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 denetleyicinin kullanabileceği bu iletişim kutusunda, chatbot "kedi yavrusu", "kedi yavruları", "kedi" veya "kediler" kelimelerini duyduğunda sohbetin nasıl başladığını görün:
// ...
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 botunu yeni bir sürüme güncellediniz.
Eğik Çizgi Komutları
Kullanıcıyla sohbet etmek istemiyorsanız ne yapmalısınız? Peki, tek bir basit komutla bir işlemi tetiklemeyi tercih ederseniz ne olur?
Slack, bu işlevi Slash komutları aracılığıyla sunar. Bu komutlar, kullanıcıların komutu mesaj kutusuna girerek uygulamanızı çağırmasına olanak tanır.
Slack Slash komutlarını etkinleştirme
- Uygulama Yönetimi Sayfanızdaki Özellikler bölümünde Slash Commands (Slash Komutları) bölümüne gidin.
- Yeni Komut Oluştur'u tıklayın.
- Kittenbot hizmet URL'nizle bir
/catskomutu yapılandırın. Etkinlikler API'sini etkinleştirmek için kullandığınız uç noktayı kullanmayı unutmayın. Bu, URL'niz ve'/api/messages''dan oluşur.

- Uygulamanızı ve izinlerinizi güncellemek için istemi uygulayın.
Denetleyicinize Slash Komutları ekleme
Eğik çizgi komutları için işleyicinin controller.ready işlevine nasıl eklendiğini görün:
// ...
// 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 yazıp 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 botunuz var. Kullanılan kaynakları temizleme zamanı (maliyetten tasarruf etmek ve iyi bir bulut kullanıcısı 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 ediyorsanız bir 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 sırrı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 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ı 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 yalnızca yüzeyini inceledik. Kendi Cloud Run dağıtımlarınızla daha fazla keşif yapmanızı öneririz.
İşlediğimiz konular
- 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'a dağıtma
Sonraki Adımlar
- Diğer Cloud Run eğitimlerini tamamlama
Daha Fazla Bilgi
- GitHub'daki diğer Google Cloud Slack entegrasyonu örneklerine göz atın.
- Diğer Google Cloud özelliklerini kendiniz deneyin. Eğiticilerimize göz atın.