本教程演示了如何使用 Cloud Functions 函数来实现搜索 Google Knowledge Graph API 的 Slack Slash 命令。
目标
- 在 Slack 中创建一个 Slash 命令。
- 编写和部署 HTTP Cloud Functions 函数。
- 使用 Slash 命令搜索 Google Knowledge Graph API。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Cloud Run functions
准备工作
- 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, and Google Knowledge Graph Search 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, and Google Knowledge Graph Search 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 频道中看到经过格式化的响应。
直观展示上述步骤可能有所帮助:
创建 Knowledge Graph API 密钥
在 Google Cloud 控制台凭据页面中,点击创建凭据按钮,然后选择 API 密钥。记住此密钥,因为您将在下一部分中使用该密钥访问 Knowledge Graph API。
准备函数
将示例应用代码库克隆到本地机器:
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/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 kgSearch \ --runtime nodejs20 \
--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 kg_search \ --runtime python312 \
--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 KGSearch \ --runtime go121 \
--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 \ --entry-point functions.SlackSlashCommand \ --runtime java17 \ --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 \ --entry-point SlackKnowledgeGraphSearch.Function \ --runtime dotnet6 \
--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 kg_search --runtime ruby32 \
--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 searchKnowledgeGraph --runtime php82 \
--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 函数:
创建一个 Slack 应用来托管您的 Slack Slash 命令。将该应用关联至您有权安装集成的 Slack 团队。
转到 Slash commands 并点击 Create new command 按钮。
输入
/kg
作为该命令的名称。输入该命令的网址:
Node.js
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kgSearch
Python
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
Go
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/KGSearch
Java
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/java-slack-function
C#
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/csharp-slack-function
Ruby
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
PHP
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/searchKnowledgeGraph
其中,
YOUR_REGION
是部署 Cloud Functions 函数的区域,YOUR_PROJECT_ID
是您的 Cloud 项目 ID。当您的函数完成部署后,这两个值会显示在您的终端。
点击保存。
转到基本信息。
点击将应用安装到工作区 (Install your app to your workspace),然后按照屏幕上的说明为工作区启用应用。
您的 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
查看日志以确保执行完成:
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.
删除函数
如需删除您在本教程中部署的函数,请运行以下命令:
Node.js
gcloud functions delete kgSearch
Python
gcloud functions delete kg_search
Go
gcloud functions delete KGSearch
Java
gcloud functions delete java-slack-function
C#
gcloud functions delete csharp-slack-function
Ruby
gcloud functions delete kg_search
PHP
gcloud functions delete searchKnowledgeGraph
您也可以通过 Google Cloud 控制台删除 Cloud Run functions。