1. Tổng quan
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tạo bot Slack bằng bộ công cụ Botkit và chạy bot này trên Google Cloud. Bạn sẽ có thể tương tác với bot này trên một kênh phát trực tiếp của Slack.
Kiến thức bạn sẽ học được
- Cách tạo công cụ tích hợp tuỳ chỉnh cho bot trong Slack
- Cách bảo vệ các bí mật của Slack bằng Người quản lý bí mật
- Cách triển khai bot Slack trên Cloud Run, một nền tảng điện toán được quản lý toàn diện, có thể tự động mở rộng quy mô các vùng chứa không có trạng thái
Bạn cần có
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm khi sử dụng Google Cloud?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn luôn có thể cập nhật ứng dụng.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham khảo Mã dự án của mình (thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử cách riêng của mình để xem có thể sử dụng hay không. Bạn không thể thay đổi mã này sau bước này và mã vẫn giữ nguyên trong thời gian dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án), mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa bằng máy tính xách tay, nhưng trong hướng dẫn này, bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
Nếu đây là lần đầu tiên khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn nhìn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
Máy ảo này được tải tất cả các công cụ phát triển cần thiết. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Nhiều (nếu không nói là) tất cả công việc của bạn trong lớp học lập trình này đều có thể thực hiện bằng trình duyệt.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án được đặt thành mã dự án.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Kết quả lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project
Kết quả lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể đặt chế độ này bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Kết quả lệnh
Updated property [core/project].
3. Bật các API
Trên Cloud Shell, hãy bật các API Artifact Registry, Cloud Build, Cloud Run và Secret Manager:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ secretmanager.googleapis.com
Thao tác này sẽ tạo ra một thông báo thành công tương tự như thông báo sau:
Operation "operations/..." finished successfully.
Giờ đây, bạn đã sẵn sàng chuẩn bị và triển khai ứng dụng...
4. Tạo không gian làm việc trên Slack
Bạn cần có một không gian làm việc của Slack để tạo các công cụ tích hợp tuỳ chỉnh. Bạn có thể tạo không gian làm việc miễn phí nếu chưa có không gian làm việc mà bạn muốn sử dụng cho hướng dẫn này.
5. Tạo người dùng bot Slack
Người dùng bot có thể nghe tin nhắn trên Slack, đăng tin nhắn và tải tệp lên. Trong lớp học lập trình này, bạn sẽ tạo một bot để đăng một tin nhắn chào mừng đơn giản.
Tạo ứng dụng Slack mới
- Truy cập trang quản lý ứng dụng Slack.
- Nhấp vào nút Tạo ứng dụng mới ở góc trên bên phải.
- Đặt tên cho ứng dụng, chẳng hạn như "Kittenbot".
- Chọn nhóm Slack nơi bạn muốn cài đặt công cụ này.
Tạo người dùng bot
- Chuyển đến Trang chủ ứng dụng trên bảng điều khiển bên trái trong phần Tính năng
- Chỉ định phạm vi cho mã thông báo bot của bạn bằng cách nhấp vào Review Scopes to Add (Xem xét phạm vi cần thêm)
- Di chuyển xuống phần Bot Token Scopes (Phạm vi mã thông báo bot) rồi nhấp vào Add an OAuth Scope (Thêm phạm vi OAuth). Chọn
chat:write
để "Gửi tin nhắn dưới tên Kittenbot"
- Di chuyển lên rồi nhấp vào nút Cài đặt ứng dụng vào Workspace.
- Thao tác này sẽ cài đặt ứng dụng vào nhóm của bạn, thêm người dùng bot mà bạn vừa tạo và tạo mã thông báo bot.
- Khi được nhắc, hãy nhấp vào "Cho phép" để cho phép bot trò chuyện trong không gian làm việc của bạn.
Bật tin nhắn và lệnh
- Di chuyển xuống mục Show tab (Hiện thẻ) và đảm bảo bật cả hai tuỳ chọn:
Lấy khoá bí mật ký ứng dụng
- Chuyển tới Basic Information (Thông tin cơ bản) trong phần Settings (Cài đặt).
- Di chuyển xuống phần Ký khoá bí mật, nhấp vào Hiển thị,sau đó sao chép mã bí mật vào bảng nhớ tạm:
- Lưu giá trị bí mật trong một biến môi trường:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET
Nhận mã thông báo bot
- Chuyển đến OAuth và Quyền trong phần Tính năng.
- Nhấp vào nút Sao chép để sao chép Mã truy cập OAuth cho người dùng bot vào bảng nhớ tạm.
- Lưu mã thông báo bot trong một biến môi trường:
BOT_TOKEN=PASTE_THE_BOT_TOKEN
Đừng lo. Bạn có thể quay lại trang cấu hình này qua trang quản lý ứng dụng nếu cần lấy lại các mã thông báo này.
6. Bảo vệ bí mật của bạn
Chúng tôi muốn đảm bảo rằng mã thông báo bot và mật khẩu ký ứng dụng khách của bạn được lưu trữ an toàn. Việc mã hoá cứng các bí mật trong mã nguồn khiến mã nguồn có thể vô tình làm lộ các bí mật này bằng cách xuất bản chúng để quản lý phiên bản hoặc nhúng chúng vào một hình ảnh Docker.
Secret Manager (Trình quản lý bí mật) cung cấp một phương thức an toàn và thuận tiện để lưu trữ các khoá API, mật khẩu, chứng chỉ và những dữ liệu nhạy cảm khác. Secret Manager là nguồn thông tin chính xác duy nhất để quản lý, truy cập và kiểm tra các dữ liệu bí mật trên Google Cloud.
Tạo ra bí mật của bạn
Lưu khoá bí mật ký ứng dụng khách và mã bot bằng các lệnh sau:
- Mật khẩu ký ứng dụng
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \ --replication-policy automatic \ --data-file -
- Mã thông báo bot
echo -n $BOT_TOKEN | gcloud secrets create bot-token \ --replication-policy automatic \ --data-file -
Truy cập vào Khoá bí mật của bạn
Hãy xác nhận rằng bạn đã tạo các khoá bí mật đúng cách và các quyền của bạn đang hoạt động. Truy cập vào giá trị bí mật của bạn bằng các lệnh sau:
echo $(gcloud secrets versions access 1 --secret client-signing-secret) echo $(gcloud secrets versions access 1 --secret bot-token)
Bạn cũng có thể xem và quản lý các giá trị bí mật trong bảng điều khiển Google Cloud.
7. Nhận mã mẫu
Trong Cloud Shell trên dòng lệnh, hãy chạy lệnh sau để sao chép kho lưu trữ GitHub:
git clone https://github.com/googlecodelabs/cloud-slack-bot.git
Thay đổi thư mục thành cloud-slack-bot/start
.
cd cloud-slack-bot/start
Tìm hiểu mã
Mở tệp kittenbot.js
bằng trình chỉnh sửa dòng lệnh mà bạn ưu tiên (nano, vim, emacs...) hoặc bằng lệnh sau để mở trực tiếp thư mục hiện tại trong Cloud Shell Editor:
cloudshell workspace .
Mã mèo con có hai chức năng chính. Một phương thức để truy xuất khoá bí mật và phương pháp còn lại là chạy bot.
Trước tiên, chúng ta nhập các phần phụ thuộc:
kittenbot.js
const { Botkit } = require('botkit');
const {
SlackAdapter,
SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
SlackAdapter và SlackEventMiddleware là các gói mở rộng Botkit và cho phép bot dễ dàng dịch tin nhắn đến và từ API Slack. Ứng dụng Người quản lý bí mật sẽ cho phép bạn truy cập vào các khoá bí mật mà bạn đã lưu ở bước trước.
Tiếp theo, chúng ta có hàm để truy xuất các giá trị bí mật:
/**
* 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;
}
Hàm này trả về các giá trị chuỗi của những mã bí mật cần thiết để xác thực bot.
Hàm tiếp theo sẽ khởi chạy bot:
/**
* 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:');
}
);
});
}
Phần đầu tiên của hàm này định cấu hình SlackAdapter với các mã thông báo bí mật, sau đó chỉ định một điểm cuối để nhận thông báo. Sau đó, khi bộ điều khiển được bật, bot sẽ trả lời bất kỳ tin nhắn nào có chứa lời "xin chào", "Xin chào" hoặc "Xin chào" bằng chú thích "Meow. 😺".
Hãy xem những phần cụ thể sau đây trong tệp kê khai ứng dụng:
package.json
{
// ...
"scripts": {
"start": "node kittenbot.js",
// ...
},
"engines": {
"node": "16"
},
// ...
}
Bạn có thể triển khai ứng dụng Node.js trực tiếp từ nguồn bằng Cloud Run. Sau đây sẽ là những tính năng nâng cao:
- Cloud Run gọi Cloud Build để tạo hình ảnh vùng chứa (xem phần Triển khai từ mã nguồn).
- Nếu
Dockerfile
có trong thư mục mã nguồn, thì Cloud Build sẽ sử dụng mã này để tạo hình ảnh vùng chứa. - Vì không phải như vậy nên Cloud Build sẽ gọi Buildpacks để phân tích nguồn và tự động tạo một hình ảnh sẵn sàng cho việc phát hành công khai.
- Buildpacks phát hiện tệp kê khai
package.json
và tạo hình ảnh Node.js. - Trường
scripts.start
xác định cách khởi động ứng dụng. - Trường
engines.node
xác định phiên bản Node.js của hình ảnh cơ sở vùng chứa. - Tại thời điểm triển khai, các bản sửa lỗi bảo mật đã biết sẽ tự động được áp dụng.
Bạn đã sẵn sàng triển khai ứng dụng!
8. Triển khai ứng dụng
API Sự kiện của Slack sử dụng webhook để gửi tin nhắn đi về các sự kiện. Khi định cấu hình ứng dụng Slack, bạn phải cung cấp một URL truy cập công khai để API Slack gửi ping.
Cloud Run là một giải pháp hiệu quả để lưu trữ các mục tiêu webhook. Công cụ này cho phép bạn sử dụng bất kỳ ngôn ngữ hoặc thời gian chạy nào mà bạn thích và cung cấp tính năng đồng thời, có nghĩa là ứng dụng của bạn sẽ có thể xử lý lưu lượng lớn hơn nhiều.
Truy xuất mã dự án
Xác định biến môi trường PROJECT_ID:
PROJECT_ID=$(gcloud config get-value core/project)
Xác định khu vực của bạn trong Cloud Run
Cloud Run mang tính khu vực, nghĩa là cơ sở hạ tầng chạy dịch vụ Cloud Run nằm ở một khu vực cụ thể và do Google quản lý để có thể sử dụng dự phòng trên tất cả các vùng trong khu vực đó. Xác định khu vực bạn sẽ dùng để triển khai, ví dụ:
REGION="us-central1"
Cập nhật quyền
Để có thể truy cập vào giá trị bí mật trên Secret Manager, tài khoản dịch vụ Cloud Run cần được cấp vai trò roles/secretmanager.secretAccessor
.
Trước tiên, hãy lưu tài khoản dịch vụ mặc định vào một biến môi trường:
SERVICE_ACCOUNT=$(gcloud iam service-accounts list \ --format "value(email)" \ --filter "displayName:Compute Engine default service account")
Xác nhận bạn đã lưu địa chỉ email:
echo $SERVICE_ACCOUNT
Tài khoản dịch vụ có định dạng sau: PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Sau khi bạn có địa chỉ email, hãy bật vai trò này cho tài khoản dịch vụ:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/secretmanager.secretAccessor
Triển khai ứng dụng
Dịch vụ Cloud Run hiển thị một điểm cuối duy nhất và tự động mở rộng cơ sở hạ tầng cơ bản để xử lý các yêu cầu gửi đến.
Triển khai ứng dụng lên Cloud Run:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
- Thao tác này sẽ tạo một dịch vụ có tên là
kittenbot
. - Tuỳ chọn
--source
dùng thư mục hiện tại để xây dựng ứng dụng bằng Cloud Build. Cloud Build sẽ tự động phát hiện sự có mặt của tệppackage.json
. - Bạn có thể xác định một khu vực mặc định khác bằng lệnh sau:
gcloud config set run/region $REGION
- Bạn cũng có thể dùng lệnh sau để quản lý Cloud Run theo mặc định:
gcloud config set run/platform managed
- Tuỳ chọn
--set-env-vars
đặt các biến môi trường dịch vụ. - Tuỳ chọn
--allow-unauthenticated
sẽ cung cấp dịch vụ công khai.
Lần đầu tiên, bạn sẽ nhận được lời nhắc tạo một kho lưu trữ Artifact Registry. Nhấn Enter để xác thực:
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)?
Thao tác này sẽ khởi chạy quá trình tải mã nguồn của bạn lên kho lưu trữ Artifact Registry và bản dựng của hình ảnh vùng chứa:
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 ...
Sau đó, hãy đợi trong giây lát cho đến khi quá trình tạo và triển khai hoàn tất. Khi thành công, dòng lệnh sẽ hiển thị URL dịch vụ:
... 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
Bạn có thể lấy URL dịch vụ bằng lệnh sau:
SERVICE_URL=$( \ gcloud run services describe kittenbot \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
URL có định dạng như sau:
https://kittenbot-PROJECTHASH-REGIONID.a.run.app
URL này sẽ là cơ sở dùng để bật API sự kiện Slack. Hãy sao chép tệp này vào bảng nhớ tạm để sử dụng trong bước tiếp theo.
Dịch vụ của bạn hiện đã hoạt động và công khai! Truy cập vào bảng điều khiển Cloud Run để biết thêm thông tin.
Bạn có thể xem thời điểm tạo bản sửa đổi gần đây nhất, lưu lượng truy cập nhận được và xem nhật ký. Khi nhấp vào nhật ký, chúng ta có thể thấy rằng trình điều khiển Botkit đang bật và sẵn sàng nhận thông báo.
Bây giờ, hãy bắt đầu gửi thông báo từ kênh Slack của chúng tôi!
9. Bật sự kiện Slack
Như chúng ta đã thấy trước đó, mã mèo con của chúng ta chỉ định một điểm cuối tương đối cho mục tiêu webhook của chúng ta.
kittenbot.js
const controller = new Botkit({
webhook_uri: '/api/messages',
adapter: adapter,
});
Tức là URL đầy đủ của chúng tôi sẽ là phần cơ sở của dịch vụ Cloud Run, cùng với /api/messages
.
Bật sự kiện
Trên trang quản lý ứng dụng, hãy chuyển đến phần Gói thuê bao sự kiện trên thanh bên, rồi bật tuỳ chọn Bật sự kiện. Nhập URL dịch vụ của bạn:
PASTE_THE_SERVICE_URL/api/messages
Tuỳ thuộc vào tốc độ bạn nhập URL, URL có thể cố gắng xác minh trước khi bạn hoàn tất. Nếu không thành công, hãy nhấp vào "Thử lại".
Đăng ký
Đăng ký tất cả các sự kiện bot tin nhắn.
Nhấp vào Lưu thay đổi ở cuối trang. Bạn sẽ được nhắc Cài đặt lại ứng dụng. Làm theo lời nhắc rồi nhấp vào Cho phép.
Đến thời điểm này, bot của bạn đã hoàn toàn tích hợp! Tin nhắn trong không gian làm việc sẽ kích hoạt Slack gửi tin nhắn đến dịch vụ Cloud Run của bạn. Sau đó, dịch vụ này sẽ phản hồi bằng một lời chào đơn giản.
10. Thử nghiệm bot của bạn
Gửi tin nhắn trực tiếp tới Kittenbot:
Thêm mèo con vào kênh của bạn bằng cách nhập "@myactivitybot" rồi nhấp vào "Mời Họ":
Giờ đây, mọi người trên kênh của bạn đều có thể tương tác với Kittenbot!
Mỗi thông báo trong Slack kích hoạt một sự kiện và gửi thông báo POST qua HTTP đến dịch vụ Cloud Run của chúng tôi. Nếu xem nhật ký dịch vụ Cloud Run, bạn sẽ thấy mỗi thông báo tương ứng với một mục nhập POST trong nhật ký.
Mèo con trả lời từng tin nhắn với nội dung "Meow. 😺".
11. Phần thưởng - Cập nhật bot của bạn
Phần không bắt buộc này thường mất vài phút. Bạn có thể chuyển thẳng đến phần Làm sạch.
Chuỗi trò chuyện
Chúng tôi muốn bot này làm được nhiều việc hơn ngoài việc chỉ nói "meow". Nhưng làm cách nào để triển khai phiên bản mới của một tính năng chạy trên Cloud Run?
Thay đổi thư mục thành cloud-slack-bot/extra-credit
:
cd ../extra-credit/
Mở thư mục hiện tại trong Cloud Shell Editor:
cloudshell workspace .
Botkit có thể xử lý các cuộc trò chuyện. Với những tính năng này, bot có thể yêu cầu thêm thông tin và phản ứng với các tin nhắn ngoài việc trả lời một từ.
Xác định hộp thoại
Trước tiên, hãy xem cách định nghĩa các hàm đàm thoại ở cuối tệp:
// ...
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;
}
Cuộc trò chuyện mới này sẽ chuyển hướng chuỗi cuộc trò chuyện dựa trên câu trả lời. Ví dụ: nếu người dùng trả lời "không" sang câu hỏi về mèo con, câu hỏi này sẽ chuyển thẳng đến tin nhắn có nhãn "no_METRICs", tức là phần kết thúc của chuỗi trò chuyện.
Thêm hộp thoại vào bộ điều khiển
Bây giờ, cuộc trò chuyện đã được xác định, hãy xem cách thêm cuộc trò chuyện vào bộ điều khiển:
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(() => {
// ...
});
}
Kích hoạt hộp thoại
Bộ điều khiển đã có thể sử dụng hộp thoại đó, hãy xem cách bắt đầu cuộc trò chuyện khi bot trò chuyện nghe thấy "mèo con", "mèo con", "mèo" hoặc "mèo":
// ...
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
// ...
});
// ...
Cập nhật ứng dụng
Triển khai lại ứng dụng lên Cloud Run:
gcloud run deploy kittenbot \ --source . \ --platform managed \ --region $REGION \ --set-env-vars PROJECT_ID=$PROJECT_ID \ --allow-unauthenticated
Dùng thử
Xin chúc mừng! Bạn vừa cập nhật một bot Slack chạy trên Cloud Run lên một phiên bản mới.
Lệnh trượt tuyết
Nếu bạn không muốn trò chuyện với người dùng đó thì sao? Nếu bạn chỉ muốn kích hoạt một hành động bằng một lệnh đơn giản thì sao?
Slack cung cấp chức năng này thông qua Lệnh Sllash, cho phép người dùng gọi ứng dụng của bạn bằng cách nhập lệnh vào hộp tin nhắn.
Bật các lệnh Dấu gạch chéo của Slack
- Chuyển đến phần Lệnh chéo trong phần Tính năng trên trang Quản lý ứng dụng của bạn.
- Nhấp vào Create New Command (Tạo lệnh mới).
- Định cấu hình lệnh
/cats
bằng URL dịch vụ transactionbot. Hãy nhớ sử dụng chính điểm cuối mà bạn đã dùng để bật API Sự kiện! Đây là URL của bạn và'/api/messages'
.
- Làm theo lời nhắc để cập nhật ứng dụng và các quyền.
Thêm lệnh Dấu gạch chéo vào Bộ điều khiển
Hãy xem cách thêm trình xử lý cho lệnh dấu gạch chéo vào bên trong hàm console.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
});
// ...
Dùng thử
Nhập /cats cùng với một số để gửi lệnh dấu gạch chéo. Ví dụ: /cats 8
Bot sẽ trả lời bằng 8 chú mèo, chỉ bạn mới nhìn thấy:
12. Dọn dẹp
Xin chúc mừng! Bạn hiện đã có một bot Slack đang chạy trên Cloud Run. Thời gian để dọn dẹp các tài nguyên được sử dụng (để tiết kiệm chi phí và trở thành một công dân tốt của công nghệ đám mây).
Xoá dự án
Bạn có thể xoá toàn bộ dự án trực tiếp từ Cloud Shell:
gcloud projects delete $PROJECT_ID
Hoặc nếu bạn muốn xoá từng tài nguyên khác nhau, hãy chuyển sang phần tiếp theo.
Xoá hoạt động triển khai
gcloud run services delete kittenbot --region $REGION
Kết quả của lệnh
Service [kittenbot] will be deleted. Do you want to continue (Y/n)? y Deleted service [kittenbot].
Xoá khoá bí mật ký ứng dụng
gcloud secrets delete client-signing-secret
Kết quả của lệnh
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].
Xoá mã bí mật của mã bot
gcloud secrets delete bot-token
Kết quả của lệnh
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].
Xoá bộ chứa lưu trữ
Trước tiên, hãy liệt kê các bộ chứa Google Cloud Storage để lấy đường dẫn bộ chứa:
gsutil ls
Kết quả của lệnh
gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/ gs://<PROJECT_ID>_cloudbuild/
Bây giờ, hãy xoá bộ chứa cấu phần phần mềm:
gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/
Kết quả của lệnh
Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...
Cuối cùng, hãy xoá bộ chứa Cloudbuild:
gsutil rm -r gs://${PROJECT_ID}_cloudbuild/
Kết quả của lệnh
Removing gs://<PROJECT_ID>_cloudbuild/...
13. Xin chúc mừng!
Giờ đây, bạn đã biết cách chạy bot Slack trên Cloud Run!
Chúng tôi mới chỉ mới tìm hiểu sơ qua về công nghệ này và chúng tôi khuyến khích bạn khám phá thêm thông qua hoạt động triển khai Cloud Run của riêng bạn.
Nội dung đã đề cập
- Tạo công cụ tích hợp tuỳ chỉnh bot trong Slack
- Bảo vệ các bí mật về Slack bằng Người quản lý bí mật
- Triển khai bot Slack trên Cloud Run
Các bước tiếp theo
- Xem các hướng dẫn khác về Cloud Run
Tìm hiểu thêm
- Xem các ví dụ khác về tích hợp Slack của Google Cloud trên GitHub.
- Dùng thử các tính năng khác của Google Cloud. Hãy xem hướng dẫn của chúng tôi.