本教程演示了如何使用 Cloud Functions 函数来实现搜索 Google Knowledge Graph API 的 Slack Slash 命令。
目标
- 在 Slack 中创建一个 Slash 命令。
- 编写和部署 HTTP Cloud Functions 函数。
- 使用 Slash 命令搜索 Google Knowledge Graph API。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Cloud Run functions
- Cloud Build
- Artifact Registry
- Cloud Logging
For details, see Cloud Run functions pricing.
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Logging APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Logging APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
准备开发环境。
Node.js
Python
Go
Java
C#
Ruby
PHP
如果您已经安装 gcloud CLI,请运行以下命令进行更新:
gcloud components update
直观呈现数据流
Slack Slash 命令教程应用中的数据流涉及以下几个步骤:
- 用户在 Slack 频道中执行
/kg <search_query>
Slash 命令。 - Slack 将命令载荷发送到 Cloud Functions 函数的触发器端点。
- Cloud Functions 函数将包含用户的搜索查询的请求发送给 Knowledge Graph API。
- Knowledge Graph API 返回所有匹配的结果作为响应。
- Cloud Functions 函数将响应的格式设置为 Slack 消息。
- Cloud Functions 函数将消息发送回 Slack。
- 用户在 Slack 频道中看到经过格式化的响应。
直观展示上述步骤可能有所帮助:
获取凭据
如需部署函数,您需要 Google Cloud 控制台提供的 API 密钥和 Slack 签名密钥。
获取 Knowledge Graph API 密钥
在 Google Cloud 控制台“凭据”页面中,点击创建凭据按钮,然后选择 API 密钥。记住此密钥,因为您将添加它作为 deploy
命令的一部分。此密钥使您的函数能够访问 Knowledge Graph API。
获取 Slack 签名密钥
您还需要 Slack 签名密钥才能部署您的函数。如需获取 Slack 签名密钥,请创建用于托管您的 Slack 斜杠命令的 Slack 应用。此应用需要与您有权在其中安装集成的 Slack 群组关联。
进入 Slack 的您的应用页面,然后点击创建新应用。
选择重新开始。
为您的应用提供一个名称,然后选择您有权在其中安装集成的 Slack 工作区。
点击创建应用 (Create App)。
系统会创建应用,并且显示内容更改为基本信息页面。
在基本信息页面上,复制并保存您的 Slack 签名密钥。
保存更改。
接下来,您需要获取源代码并部署您的函数。部署您的函数后,您需要配置 Slack 应用以将其与部署的函数集成,如配置应用中所述。
准备函数
将示例应用代码库克隆到本地机器:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
切换到包含 Cloud Run functions 函数示例代码的目录:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Go
cd golang-samples/functions/functionsv2/slack/
Java
cd java-docs-samples/functions/slack/
C#
cd dotnet-docs-samples/functions/slack/SlackKnowledgeGraphSearch/
Ruby
cd ruby-docs-samples/functions/slack/
PHP
cd php-docs-samples/functions/slack_slash_command/
部署函数
如需部署在您(或 Slack)向函数的端点发出 HTTP POST 请求时执行的函数,请在包含示例代码(对于 Java 为 pom.xml
文件)的目录中运行以下命令。
将 YOUR_SLACK_SIGNING_SECRET
替换为应用配置的基本信息页面中由 Slack 提供的签名密钥,并将 YOUR_KG_API_KEY
替换为您刚刚创建的 Knowledge Graph API 密钥。
Node.js
gcloud functions deploy nodejs-slack-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=kgSearch \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
使用 --runtime
标志可以指定支持的 Node.js 版本的运行时 ID 来运行您的函数。
Python
gcloud functions deploy python-slack-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=kg_search \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
使用 --runtime
标志可以指定支持的 Python 版本的运行时 ID 来运行您的函数。
Go
gcloud functions deploy go-slack-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=KGSearch \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Java
gcloud functions deploy java-slack-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.SlackSlashCommand \ --memory=512MB \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
使用 --runtime
标志可以指定支持的 Java 版本的运行时 ID 来运行您的函数。
C#
gcloud functions deploy csharp-slack-function \ --gen2 \ --runtime=dotnet6 \ --region=REGION
\ --source=. \ --entry-point=SlackKnowledgeGraphSearch.Function \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
使用 --runtime
标志可以指定支持的 .NET 版本的运行时 ID 来运行您的函数。
Ruby
gcloud functions deploy ruby-slack-function \ --gen2 \ --runtime=ruby32 \ --region=REGION
\ --source=. \ --entry-point=kg_search \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
使用 --runtime
标志可以指定支持的 Ruby 版本的运行时 ID 来运行您的函数。
PHP
gcloud functions deploy php-slack-function \ --gen2 \ --runtime=php82 \ --region=REGION
\ --source=. \ --entry-point=receiveRequest \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
使用 --runtime
标志可以指定支持的 PHP 版本的运行时 ID 来运行您的函数。
配置应用
在部署函数后,您需要创建一个 Slack Slash 命令。每次该命令被触发时,都会将查询发送给您的 Cloud Functions 函数:
选择该应用,找到 Slash 命令,然后点击创建新命令 (Create New Command) 按钮。
输入
/kg
作为该命令的名称。在请求网址字段中,输入您的函数的网址。
您可以从
deploy
命令输出中复制该网址,也可以进入 Google Cloud 控制台中的 Cloud Functions 概览页面,点击该函数打开其函数详情页面,然后从中复制该网址。输入简短说明,然后点击保存。
转到基本信息。
点击安装到工作区,然后按照屏幕上的说明为工作区启用应用。
您的 Slack Slash 命令应该很快就能使用。
了解代码
导入依赖项
应用必须导入多个依赖项才能与 Google Cloud Platform 服务进行通信:
Node.js
Python
Go
Java
C#
Ruby
PHP
接收网络钩子
以下函数会在您(或 Slack)向其端点发出 HTTP POST 请求时执行:
Node.js
Python
Go
Java
C#
Ruby
PHP
以下函数通过验证 Slack 提供的 X-Slack-Signature
标头对传入的请求进行身份验证:
Node.js
Python
Go
Java
C#
Ruby
PHP
查询 Knowledge Graph API
以下函数会向 Knowledge Graph API 发送一个包含用户搜索查询的请求:
Node.js
Python
Go
Java
C#
Ruby
PHP
设置 Slack 消息的格式
最后,以下函数会将来自 Knowledge Graph 的结果转换为将向用户显示的富格式 Slack 消息:
Node.js
Python
Go
Java
C#
Ruby
PHP
Slack API 超时
Slack API 预期您的函数在收到 webhook 请求后的 3 秒内响应。
本教程中的命令通常不需要 3 秒便能响应。对于运行时间较长的命令,我们建议配置一个函数来推送请求(包括其 response_url
字段)到充当任务队列的 Pub/Sub 主题。
然后,您可以再创建一个由 Pub/Sub 触发的函数来处理这些任务并将结果发送回 Slack 的 response_url
。
使用 Slash 命令
函数部署完成后,在 Slack 频道中输入以下命令:
/kg giraffe
您应该会看到“giraffe”的知识图谱条目。
检查日志以查看函数执行的输出:
gcloud functions logs read --limit 100
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
要删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除函数
如需删除您在本教程中部署的 Cloud Functions 函数,请运行以下命令:
Node.js
gcloud functions delete nodejs-slack-function --gen2 --region REGION
Python
gcloud functions delete python-slack-function --gen2 --region REGION
Go
gcloud functions delete go-slack-function --gen2 --region REGION
Java
gcloud functions delete java-slack-function --gen2 --region REGION
C#
gcloud functions delete csharp-slack-function --gen2 --region REGION
Ruby
gcloud functions delete ruby-slack-function --gen2 --region REGION
PHP
gcloud functions delete php-slack-function --gen2 --region REGION
您也可以通过 Google Cloud 控制台删除 Cloud Run functions。