1. Przegląd

Z tego przewodnika dowiesz się, jak utworzyć bota do Slacka za pomocą zestawu narzędzi Botkit i uruchomić go w Google Cloud. Będziesz mieć możliwość interakcji z botem na kanale Slack na żywo.
Czego się nauczysz
- Jak utworzyć niestandardową integrację bota w Slacku
- Jak zabezpieczyć obiekty tajne Slacka za pomocą Secret Manager
- Jak wdrożyć bota Slacka w Cloud Run, w pełni zarządzanej platformie obliczeniowej, która automatycznie skaluje bezstanowe kontenery
Czego potrzebujesz
Jak zamierzasz korzystać z tego samouczka?
Jak oceniasz korzystanie z Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym samouczku będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.

Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce.
Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.
- Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Włączanie interfejsów API
W Cloud Shell włącz interfejsy Artifact Registry API, Cloud Build API, Cloud Run API i Secret Manager API:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
Wyświetli się komunikat o powodzeniu podobny do tego:
Operation "operations/..." finished successfully.
Teraz możesz przygotować i wdrożyć aplikację…
4. Tworzenie obszaru roboczego Slacka
Musisz mieć obszar roboczy w Slacku, w którym możesz tworzyć integracje niestandardowe. Jeśli nie masz jeszcze obszaru roboczego, którego chcesz użyć w tym samouczku, możesz go utworzyć bezpłatnie.

5. Tworzenie użytkownika bota Slacka
Użytkownik bota może nasłuchiwać wiadomości na Slacku, publikować wiadomości i przesyłać pliki. W tym ćwiczeniu utworzysz bota, który będzie publikować proste powitanie.
Tworzenie nowej aplikacji Slack
- Otwórz stronę zarządzania aplikacjami Slack.
- W prawym górnym rogu kliknij przycisk Utwórz nową aplikację.
- Nadaj aplikacji nazwę, np. „Kittenbot”.
- Wybierz zespół Slack, w którym chcesz zainstalować aplikację.
Tworzenie użytkownika bota
- W panelu po lewej stronie w sekcji Funkcje kliknij Strona główna aplikacji.

- Przypisz zakres do tokena bota, klikając Sprawdź zakresy do dodania.
- Przewiń w dół do sekcji Zakresy tokena bota i kliknij Dodaj zakres OAuth. Wybierz
chat:write, aby „Wysyłać wiadomości jako Kittenbot”.

- Przewiń w górę i kliknij przycisk Zainstaluj aplikację w obszarze roboczym.
- Spowoduje to zainstalowanie aplikacji w zespole, dodanie utworzonego właśnie użytkownika bota i wygenerowanie tokena bota.
- Gdy pojawi się prośba, kliknij „Zezwól”, aby zezwolić botowi na czatowanie w Twoim obszarze roboczym.
Włączanie wiadomości i poleceń
- Przewiń w dół do sekcji Pokaż karty i upewnij się, że obie opcje są włączone:

Uzyskiwanie tajnego klucza podpisywania klienta
- W sekcji Ustawienia kliknij Podstawowe informacje.
- Przewiń w dół do sekcji Signing Secret (Klucz podpisu), kliknij Show (Pokaż), a potem skopiuj klucz do schowka:

- Zapisz obiekt tajny w zmiennej środowiskowej:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
Uzyskiwanie tokena bota
- W sekcji Funkcje kliknij OAuth i uprawnienia.
- Kliknij przycisk Kopiuj, aby skopiować tekst Token dostępu OAuth użytkownika bota do schowka.

- Zapisz token bota w zmiennej środowiskowej:
BOT_TOKEN=PASTE_THE_BOT_TOKEN
Nie martw się. Jeśli będziesz potrzebować tych tokenów ponownie, możesz wrócić na tę stronę konfiguracji z strony zarządzania aplikacjami.
6. Chroń swoje tajemnice
Chcemy mieć pewność, że Twój token bota i tajny klucz podpisywania klienta są bezpiecznie przechowywane. Zakodowanie ich na stałe w kodzie źródłowym zwiększa prawdopodobieństwo przypadkowego ujawnienia tych informacji przez opublikowanie ich w systemie kontroli wersji lub osadzenie ich w obrazie Dockera.
Secret Manager to bezpieczna i wygodna metoda przechowywania kluczy interfejsu API, haseł, certyfikatów i innych danych wrażliwych. Secret Manager to centralne miejsce i jedno źródło wiarygodnych informacji do zarządzania tajnymi danymi, uzyskiwania do nich dostępu i przeprowadzania audytów w Google Cloud.
Tworzenie obiektów tajnych
Zapisz tajny klucz podpisywania klienta i token bota za pomocą tych poleceń:
- Klucz tajny klienta do podpisywania
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \ --replication-policy automatic \ --data-file -
- Token bota
echo -n $BOT_TOKEN | gcloud secrets create bot-token \ --replication-policy automatic \ --data-file -
Uzyskiwanie dostępu do obiektów tajnych
Sprawdźmy, czy Twoje klucze tajne zostały utworzone prawidłowo i czy uprawnienia działają. Uzyskaj dostęp do kluczy tajnych za pomocą tych poleceń:
echo $(gcloud secrets versions access 1 --secret client-signing-secret) echo $(gcloud secrets versions access 1 --secret bot-token)
Możesz też wyświetlać tajne klucze i zarządzać nimi w konsoli Google Cloud.
7. Pobieranie przykładowego kodu
W Cloud Shell w wierszu poleceń uruchom to polecenie, aby sklonować repozytorium GitHub:
git clone https://github.com/googlecodelabs/cloud-slack-bot.git
Przejdź do katalogu cloud-slack-bot/start.
cd cloud-slack-bot/start
Wyjaśnienie kodu
Otwórz plik kittenbot.js w preferowanym edytorze wiersza poleceń (nano, vim, emacs...) lub za pomocą tego polecenia, aby bezpośrednio otworzyć bieżący folder w edytorze Cloud Shell:
cloudshell workspace .
Kod kittenbota ma 2 główne funkcje. Jedna służy do pobierania kluczy tajnych, a druga do uruchamiania bota.
Najpierw importujemy zależności:
kittenbot.js
const { Botkit } = require('botkit');
const {
SlackAdapter,
SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
SlackAdapter i SlackEventMiddleware to pakiety rozszerzające Botkit, które umożliwiają botowi łatwe tłumaczenie wiadomości na potrzeby interfejsu Slack API i z niego. Klient Secret Manager umożliwi Ci dostęp do obiektów tajnych zapisanych w poprzednim kroku.
Następnie mamy funkcję pobierania obiektów tajnych:
/**
* 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;
}
Ta funkcja zwraca wartości ciągów znaków z informacjami tajnymi potrzebnymi do uwierzytelnienia bota.
Kolejna funkcja inicjuje bota:
/**
* 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:');
}
);
});
}
Pierwsza część funkcji konfiguruje SlackAdapter za pomocą kluczy tajnych, a następnie określa punkt końcowy do odbierania wiadomości. Gdy kontroler jest włączony, bot odpowiada na każdą wiadomość zawierającą słowa „hello”, „hi” lub „hey” słowem „Meow”. 😺".
Sprawdź te elementy w manifeście aplikacji:
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Aplikację Node.js możesz wdrożyć bezpośrednio ze źródła za pomocą Cloud Run. W tle nastąpią te działania:
- Cloud Run wywołuje Cloud Build, aby skompilować obraz kontenera (patrz Wdrażanie z kodu źródłowego).
- Jeśli w katalogu kodu źródłowego znajduje się plik
Dockerfile, Cloud Build używa go do utworzenia obrazu kontenera. - Jeśli tak nie jest, Cloud Build wywołuje pakiety kompilacji, aby przeanalizować źródło i automatycznie wygenerować obraz gotowy do wykorzystania w środowisku produkcyjnym.
- Buildpack wykrywa manifest
package.jsoni tworzy obraz Node.js. - Pole
scripts.startokreśla sposób uruchamiania aplikacji. - Pole
engines.nodeokreśla wersję Node.js obrazu bazowego kontenera. - Podczas wdrażania automatycznie stosowane są znane poprawki zabezpieczeń.
Możesz wdrożyć aplikację.
8. Wdrażanie aplikacji
Interfejs Slack Events API używa webhooków do wysyłania wiadomości wychodzących o zdarzeniach. Podczas konfigurowania aplikacji Slack musisz podać publicznie dostępny adres URL, na który interfejs Slack API będzie wysyłać pingi.
Cloud Run to dobre rozwiązanie do hostowania miejsc docelowych webhooka. Umożliwia to używanie dowolnego języka lub środowiska wykonawczego i zapewnia współbieżność, co oznacza, że aplikacja będzie w stanie obsłużyć znacznie większy ruch.
Pobieranie identyfikatora projektu
Zdefiniuj zmienną środowiskową PROJECT_ID:
PROJECT_ID=$(gcloud config get-value core/project)
Określanie regionu Cloud Run
Cloud Run działa regionalnie, co oznacza, że infrastruktura, która uruchamia Twoją usługę Cloud Run, znajduje się w określonym regionie i jest zarządzana przez Google w taki sposób, aby była redundantnie dostępna we wszystkich strefach w tym regionie. Określ region, w którym chcesz wdrożyć usługę, np.:
REGION="us-central1"
Zaktualizuj uprawnienia
Aby konto usługi Cloud Run mogło uzyskać dostęp do obiektów tajnych z usługi Secret Manager, musi mieć przypisaną rolę roles/secretmanager.secretAccessor.
Najpierw zapisz domyślne konto usługi w zmiennej środowiskowej:
SERVICE_ACCOUNT=$(gcloud iam service-accounts list \ --format "value(email)" \ --filter "displayName:Compute Engine default service account")
Sprawdź, czy masz zapisany adres e-mail:
echo $SERVICE_ACCOUNT
Konto usługi ma następujący format: PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Gdy uzyskasz adres e-mail, włącz rolę dla konta usługi:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/secretmanager.secretAccessor
Wdrażanie aplikacji
Usługa Cloud Run ujawnia unikalny punkt końcowy i automatycznie skaluje dotychczasową infrastrukturę pod kątem obsługi żądań przychodzących.
Wdróż aplikację w Cloud Run:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
- Spowoduje to utworzenie usługi o nazwie
kittenbot. - Opcja
--sourceużywa bieżącego folderu do skompilowania aplikacji za pomocą Cloud Build. Cloud Build automatycznie wykrywa obecność plikupackage.json. - Możesz też zdefiniować region domyślny za pomocą tego polecenia:
gcloud config set run/region $REGION - Możesz też ustawić Cloud Run jako domyślną usługę zarządzaną za pomocą tego polecenia:
gcloud config set run/platform managed - Opcja
--set-env-varsustawia zmienne środowiskowe usługi. - Opcja
--allow-unauthenticatedsprawia, że usługa jest dostępna publicznie.
Gdy zrobisz to po raz pierwszy, pojawi się prośba o utworzenie repozytorium Artifact Registry. Aby sprawdzić poprawność, kliknij 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)?
Spowoduje to przesłanie kodu źródłowego do repozytorium Artifact Registry i skompilowanie obrazu kontenera:
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 ...
Następnie poczekaj chwilę na zakończenie kompilacji i wdrażania. Kiedy operacja zostanie wykonana, w wierszu poleceń wyświetli się URL usługi:
... 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
Adres URL usługi możesz uzyskać za pomocą tego polecenia:
SERVICE_URL=$( \ gcloud run services describe kittenbot \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
Adres URL ma format:
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
Ten adres URL będzie podstawą do włączenia interfejsu Slack Events API. Skopiuj go do schowka, aby użyć go w następnym kroku.
Twoja usługa jest już aktywna i dostępna publicznie. Więcej informacji znajdziesz w konsoli Cloud Run. 
Możesz sprawdzić, kiedy została utworzona ostatnia wersja, jaki jest jej ruch i przejrzeć logi. Jeśli klikniemy dzienniki, zobaczymy, że kontroler Botkit jest włączony i gotowy do odbierania wiadomości.
Teraz zacznijmy wysyłać wiadomości z naszego kanału Slack.
9. Włączanie zdarzeń Slacka
Jak widzieliśmy wcześniej, kod kittenbota określa względny punkt końcowy dla naszego miejsca docelowego webhooka.
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
Oznacza to, że pełny adres URL będzie składać się z części podstawowej z usługi Cloud Run i /api/messages.
Włączanie Wydarzeń
Na stronie zarządzania aplikacjami w sekcji Subskrypcje zdarzeń na pasku bocznym włącz opcję Włącz zdarzenia. Wpisz adres URL usługi:
PASTE_THE_SERVICE_URL/api/messages

W zależności od tego, jak szybko wpiszesz adres URL, może on zostać zweryfikowany, zanim skończysz. Jeśli się nie uda, kliknij „Ponów”.
Subskrybuj
Subskrybuj wszystkie zdarzenia bota do obsługi wiadomości.

U dołu strony kliknij Zapisz zmiany. Pojawi się prośba o ponowne zainstalowanie aplikacji. Postępuj zgodnie z instrukcjami i kliknij Zezwól.
Na tym etapie bot jest już w pełni zintegrowany. Wiadomości na obszarze roboczym spowodują, że Slack wyśle wiadomości do Twojej usługi Cloud Run, która z kolei odpowie prostym powitaniem.
10. Przetestuj bota
Wysyłanie wiadomości na czacie do Kittenbota:

Dodaj kittenbota do swojego kanału, wpisując „@kittenbot”, a następnie klikając „Invite Them” (Zaproś).

Teraz każdy na Twoim kanale może wchodzić w interakcje z Kittenbotem.

Każda wiadomość w Slacku wywołuje zdarzenie i wysyła wiadomość HTTP POST do naszej usługi Cloud Run. Jeśli przyjrzysz się logom usługi Cloud Run, zobaczysz, że każda wiadomość odpowiada wpisowi POST w logu.

Kittenbot odpowiada na każdą wiadomość słowem „Miau”. 😺".
11. Bonus – aktualizowanie bota
Ta opcjonalna sekcja powinna zająć kilka minut. Możesz przejść bezpośrednio do sekcji Czyszczenie.
Wątki konwersacyjne
Chcemy, aby bot robił coś więcej niż tylko mówił „miau”. Jak wdrożyć nową wersję czegoś, co działa w Cloud Run?
Przejdź do katalogu cloud-slack-bot/extra-credit:
cd ../extra-credit/
Otwórz bieżący folder w edytorze Cloud Shell:
cloudshell workspace .
Botkit umożliwia prowadzenie rozmów. Dzięki temu bot może prosić o więcej informacji i reagować na wiadomości, a nie tylko odpowiadać jednym słowem.
Określanie okna
Najpierw sprawdź, jak na końcu pliku zdefiniowane są funkcje konwersacyjne:
// ...
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;
}
Nowa rozmowa kieruje wątkiem na podstawie odpowiedzi. Jeśli na przykład użytkownik odpowie „nie” na pytanie o kocięta, przejdzie do wiadomości z etykietą „no_kittens”, która jest końcem tego wątku rozmowy.
Dodawanie okna do kontrolera
Skoro rozmowa jest już zdefiniowana, zobacz, jak dodać ją do kontrolera:
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(() => {
// ...
});
}
Wywołaj okno
Teraz to okno jest dostępne dla kontrolera. Zobacz, jak rozpoczyna się rozmowa, gdy chatbot usłyszy słowo „kitten”, „kittens”, „cat” lub „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
// ...
});
// ...
Zaktualizowanie aplikacji
Ponownie wdróż aplikację w Cloud Run:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
Wypróbuj

Gratulacje! Właśnie udało Ci się zaktualizować do nowej wersji bota Slacka działającego w Cloud Run.
Polecenia rozpoczynające się ukośnikiem
Co zrobić, jeśli nie chcesz rozmawiać z użytkownikiem? A co, jeśli wolisz po prostu wywołać działanie za pomocą jednego prostego polecenia?
Slack oferuje tę funkcję za pomocą poleceń po ukośniku, które umożliwiają użytkownikom wywoływanie aplikacji przez wpisanie polecenia w polu wiadomości.
Włączanie poleceń rozpoczynających się ukośnikiem w Slacku
- Na stronie zarządzania aplikacjami w sekcji Funkcje otwórz sekcję Polecenia z ukośnikiem.
- Kliknij Utwórz nowe polecenie.
- Skonfiguruj polecenie
/cats, podając adres URL usługi kittenbot. Pamiętaj, aby użyć tego samego punktu końcowego, którego użyto do włączenia interfejsu Events API. Jest to Twój adres URL plus'/api/messages'.

- Postępuj zgodnie z instrukcjami, aby zaktualizować aplikację i uprawnienia.
Dodawanie poleceń po ukośniku do kontrolera
Zobacz, jak w funkcji controller.ready dodano obsługę poleceń po ukośniku:
// ...
// 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
});
// ...
Wypróbuj
Wpisz /cats i liczbę, aby wysłać polecenie po ukośniku. Np. /cats 8

Bot odpowie 8 kotami, które będą widoczne tylko dla Ciebie:

12. Czyszczenie
Gratulujemy! Bot Slack działa już w Cloud Run. Czas na wyczyszczenie używanych zasobów (aby zaoszczędzić i być dobrym użytkownikiem chmury).
Usuwanie projektu
Możesz usunąć cały projekt bezpośrednio z Cloud Shell:
gcloud projects delete $PROJECT_ID
Jeśli wolisz usuwać poszczególne zasoby, przejdź do następnej sekcji.
Usuń wdrożenie
gcloud run services delete kittenbot --region $REGION
Wynik polecenia
Service [kittenbot] will be deleted. Do you want to continue (Y/n)? y Deleted service [kittenbot].
Usuwanie tajnego klucza podpisywania klienta
gcloud secrets delete client-signing-secret
Wynik polecenia
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].
Usuwanie tajnego tokena bota
gcloud secrets delete bot-token
Wynik polecenia
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].
Usuń zasobniki na dane
Najpierw wyświetl listę zasobników Google Cloud Storage, aby uzyskać ścieżkę do zasobnika:
gsutil ls
Wynik polecenia
gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/ gs://<PROJECT_ID>_cloudbuild/
Teraz usuń zasobnik artefaktów:
gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/
Wynik polecenia
Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...
Na koniec usuń zasobnik cloudbuild:
gsutil rm -r gs://${PROJECT_ID}_cloudbuild/
Wynik polecenia
Removing gs://<PROJECT_ID>_cloudbuild/...
13. Gratulacje!

Wiesz już, jak uruchomić bota Slacka w Cloud Run.
Zaledwie zarysowaliśmy tę technologię i zachęcamy do dalszego poznawania jej możliwości w ramach własnych wdrożeń Cloud Run.
Omówione zagadnienia
- Tworzenie niestandardowej integracji bota w Slacku
- Zabezpieczanie obiektów tajnych Slacka za pomocą usługi Secret Manager
- Wdrażanie bota Slacka w Cloud Run
Następne kroki
- Ukończ więcej samouczków Cloud Run
Więcej informacji
- Zobacz inne przykłady integracji Google Cloud ze Slackiem w GitHubie.
- Wypróbuj inne funkcje Google Cloud. Zapoznaj się z naszymi samouczkami.