设置 Openflow Connector for Slack¶
备注
使用该连接器需遵守 连接器条款。
本主题介绍 Openflow Connector for Slack 的设置步骤。
先决条件¶
确保您已查看 Openflow Connector for Slack。
确保您已 设置 Openflow。
设置 Slack 应用程序¶
在 Slack 工作区中设置 Slack 应用程序。需要 Slack 管理员配置 Slack 工作区的访问权限。为此,需要创建或提供 Slack 应用程序凭据,并将该应用程序安装至 Slack 工作区及通道。您可以使用 JSON 配置创建 Slack 应用程序:
更新 JSON 清单。复制下面的 JSON 清单文本。将名称和显示名称属性从
EXAMPLE_NAME_CHANGE_THIS
更改为所需的 Slack 应用程序名称。建议为您的应用程序使用相同的名称和显示名称。{ "display_information": { "name": "EXAMPLE_NAME_CHANGE_THIS" }, "features": { "bot_user": { "display_name": "EXAMPLE_NAME_CHANGE_THIS", "always_online": false } }, "oauth_config": { "scopes": { "bot": [ "channels:history", "channels:read", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "users.profile:read", "users:read", "users:read.email", "files:read", "app_mentions:read", "reactions:read" ] } }, "settings": { "event_subscriptions": { "bot_events": [ "message.channels", "message.groups", "message.im", "message.mpim", "reaction_added", "reaction_removed", "file_created", "file_deleted", "file_change" ] }, "interactivity": { "is_enabled": true }, "org_deploy_enabled": false, "socket_mode_enabled": true, "token_rotation_enabled": false } }
通过 应用程序页面 (https://api.slack.com/apps) 创建 Slack 应用程序。
在 Your Apps 页面上,选择 Create New App。
选择 From a manifest。
选择要在其中开发应用程序的 Workspace。您可以选择稍后 [将应用程序分发](https://api.slack.com/distribution (https://api.slack.com/distribution)) 至其他工作区。
复制第 1 步中更新的清单 JSON。
生成应用程序级令牌。即使在使用 JSON 清单之后,您也需要创建应用程序级令牌。在 Basic Information 下,滚动到 App-level tokens 部分,然后点击按钮以生成 [应用程序级令牌](https://api.slack.com/concepts/token-types#app (https://api.slack.com/concepts/token-types#app))。包括令牌的
connections:write
作用域。安装和授权应用程序。
返回应用程序管理页面的 Basic Information 部分。
通过选择 Install to Workspace 按钮来安装您的应用程序。
系统将引导您完成 Slack OAuth 流。在随后显示的屏幕上选择 Allow。
如果您想将应用程序添加到自己工作区之外的其他工作区,则这些步骤需要由该工作区的用户执行。安装后,导航回 ** OAuth & Permissions** 页面。您将在 OAuth Tokens 下看到一个 访问令牌。访问令牌代表安装用户委派给您的应用程序的权限。请妥善保管。请勿将其提交至公共版本控制系统。而是通过环境变量进行访问。
将应用程序添加到通道。您的应用程序尚未加入任何通道,请先选择通道以添加测试消息,并使用
/invite
命令邀请应用程序。例如/invite @Grocery Reminders
。
备注
重新启动处理器以加载新通道。将应用程序添加到新通道后,需要停止并重新启动 OpenFlow 运行时中的 Consume Slack Conversation
处理器。
设置必要的引入规则¶
Snowflake 管理员应遵循 引入指南,将引入规则应用到端点 https://slack.com/api
,并对 wss://wss.slack.com
启用 WebSocket 引入。最简单的实现方式是添加规则以启用“slack.com”域名的引入。
设置 Snowflake 账户¶
作为 Snowflake 账户管理员,请执行以下任务:
创建新角色或使用现有角色并授予 数据库权限。
创建类型为 SERVICE 的新 Snowflake 服务用户。
向该 Snowflake 服务用户授予您在前面步骤中创建的角色。
为第 2 步中创建的 Snowflake SERVICE 用户配置 密钥对身份验证。
Snowflake 强烈建议执行此步骤。配置 Openflow 支持的密钥管理器(例如 AWS、Azure 和 Hashicorp),并将公钥和私钥存储在密钥存储库中。
备注
如果您出于任何原因不希望使用密钥管理器,则您有责任根据组织的安全策略保护用于密钥对身份验证的公钥和私钥文件。
配置密钥管理器后,确定如何对其进行身份验证。在 AWS 中,建议您使用与 Openflow 关联的 EC2 实例角色,因为这样就无需保留其他密钥。
在 Openflow 中,从右上角的汉堡菜单中配置与此密钥管理器关联的参数提供商。导航到 Controller Settings » Parameter Provider,然后提取您的参数值。
此时,可以使用关联的参数路径引用所有凭据,无需在 Openflow 中保留敏感值。
如果任何其他 Snowflake 用户需要访问连接器引入的原始文档和表(例如,在 Snowflake 中进行自定义处理),则授予这些用户在步骤 1 中创建的角色。
指定一个仓库供连接器使用。从最小的仓库规模开始,然后根据要复制的表数量和传输的数据量来测试规模。表数量较多(而不是仓库规模更大)通常可以在 多集群仓库 中更好地扩展。
用例 1:仅引入 Slack 内容¶
使用连接器定义可执行以下操作:
对引入的 Slack 数据进行自定义分析(不进行 Cortex Search 处理)。
将 Slack 消息、回复、文件附件和成员列表引入到 Snowflake 中,并使其保持最新状态。
设置连接器¶
作为数据工程师,执行以下任务以配置连接器:
安装连接器¶
在 Snowflake 中为连接器创建数据库和架构,以存储引入的数据。向第一步中创建的角色授予所需的 数据库权限。用实际值替换角色占位符,然后使用以下 SQL 命令:
CREATE DATABASE DESTINATION_DB; CREATE SCHEMA DESTINATION_DB.DESTINATION_SCHEMA; GRANT USAGE ON DATABASE DESTINATION_DB TO ROLE <CONNECTOR_ROLE>; GRANT USAGE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>; GRANT CREATE TABLE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>;
导航到 Openflow“Overview”页面。在 Featured connectors 部分中,选择 View more connectors。
在 Openflow 连接器页面上,找到连接器并选择 Add to runtime。
在 Select runtime 对话框中,从 Available runtimes 下拉列表中选择您的运行时。
选择 Add。
备注
在安装连接器之前,请确保在 Snowflake 中为连接器创建了数据库和架构,用于存储引入的数据。
使用您的 Snowflake 账户凭据对部署进行身份验证,并在系统提示时选择 Allow,以允许运行时应用程序访问您的 Snowflake 账户。连接器安装过程需要几分钟才能完成。
使用您的 Snowflake 账户凭据进行运行时身份验证。
此时将显示 Openflow 画布,其中添加了连接器进程组。
配置连接器¶
右键点击导入的进程组并选择 Parameters。
输入所需的参数值,正如下面 流参数:仅引入内容 中所述。
右键点击画布并选择 Enable all controller services。
右键点击导入的进程组并选择 Start。该流创建所有必需的 Snowflake 对象并开始引入 Slack 数据。
流参数:仅引入内容¶
参数 |
描述 |
---|---|
应用程序令牌 |
在 Slack 应用程序中生成的 Slack 应用程序级令牌。 |
机器人令牌 |
在 Slack 应用程序中生成的 Slack 机器人令牌。 |
目标数据库 |
包含所有连接器对象的数据库(如果不存在则创建)。 |
目标架构 |
数据库内的架构(如果不存在则创建)。 |
Snowflake 账户 |
Snowflake 账户标识符。 |
Snowflake 角色 |
身份验证后流扮演的角色。 |
Snowflake 用户 |
流用于连接的用户名。 |
Snowflake 私钥 |
用于身份验证的 RSA 私钥(PKCS8 PEM 格式)。请注意,必须定义 Snowflake 私钥或 Snowflake 私钥文件。 |
Snowflake 私钥密码 |
加密私钥的密码(如果未加密,则留空)。 |
Snowflake 私钥文件 |
包含 RSA 私钥的文件(PKCS8 PEM 格式)。头标记行以 |
Snowflake 仓库 |
用于由流执行的 SQL 的仓库。 |
上传间隔 |
推送至 Snowflake 前预留的数据采集时间。较长的间隔会减少 Snowflake 的负载,但可能会增加延迟和内存使用量。 |
刷新 Slack 成员 |
两次 Slack 成员资格 (ACL) 刷新之间的分钟数。 |
用例 2:引入 Slack 内容并启用 Cortex¶
使用连接器定义可执行以下操作:
将 Slack 数据预处理为适合 Snowflake Cortex 进行对话式搜索的格式。
确保在搜索结果中遵守 Slack 通道访问控制。
设置连接器¶
作为数据工程师,执行以下任务以配置连接器:
安装连接器¶
在 Snowflake 中为连接器创建数据库和架构,以存储引入的数据。向第一步中创建的角色授予所需的 数据库权限。用实际值替换角色占位符,然后使用以下 SQL 命令:
CREATE DATABASE DESTINATION_DB; CREATE SCHEMA DESTINATION_DB.DESTINATION_SCHEMA; GRANT USAGE ON DATABASE DESTINATION_DB TO ROLE <CONNECTOR_ROLE>; GRANT USAGE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>; GRANT CREATE TABLE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>;
导航到 Openflow“Overview”页面。在 Featured connectors 部分中,选择 View more connectors。
在 Openflow 连接器页面上,找到连接器并选择 Add to runtime。
在 Select runtime 对话框中,从 Available runtimes 下拉列表中选择您的运行时。
选择 Add。
备注
在安装连接器之前,请确保在 Snowflake 中为连接器创建了数据库和架构,用于存储引入的数据。
使用您的 Snowflake 账户凭据对部署进行身份验证,并在系统提示时选择 Allow,以允许运行时应用程序访问您的 Snowflake 账户。连接器安装过程需要几分钟才能完成。
使用您的 Snowflake 账户凭据进行运行时身份验证。
此时将显示 Openflow 画布,其中添加了连接器进程组。
配置连接器¶
右键点击导入的进程组并选择 Parameters。
输入所需的参数值,正如下面 流参数:引入内容并启用 Cortex 中所述。
右键点击画布并选择 Enable all controller services。
右键点击导入的进程组并选择 Start。
流运行后,继续 查询 Cortex Search 服务 以进行测试。
流参数:引入内容并启用 Cortex¶
参数 |
描述 |
---|---|
应用程序令牌 |
在 Slack 应用程序中生成的 Slack 应用程序级令牌。 |
机器人令牌 |
在 Slack 应用程序中生成的 Slack 机器人令牌。 |
目标数据库 |
包含所有连接器对象的数据库(如果不存在则创建)。 |
目标架构 |
数据库内的架构(如果不存在则创建)。 |
上传间隔 |
推送至 Snowflake 前预留的数据采集时间。值越大,负载越小,但会增加数据延迟。 |
Snowflake 账户 |
Snowflake 账户标识符。 |
Snowflake 角色 |
身份验证后流扮演的角色。 |
Snowflake 用户 |
流用于连接的用户名。 |
Snowflake 私钥 |
用于密钥对身份验证的 PEM 格式化私钥。 |
Snowflake 私钥密码 |
加密私钥的密码(如果未加密,则为空)。 |
Snowflake 仓库 |
用于由流 和 Cortex 执行的所有 SQL 的仓库。 |
刷新 Slack 成员 |
两次 Slack 成员资格 (ACL) 刷新之间的分钟数。 |
启用私有通道 ACLs¶
除了需要 将 Slack 应用程序邀请至 各私有通道外,无需其他额外步骤。连接器会自动刷新成员列表并以每个 刷新 Slack 成员 间隔将其存储在成员列表中。
查询 Cortex Search 服务¶
在运行用例 2 并创建 Cortex Search 服务后,您可以按如下方式进行查询:
SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'<openflow_db>.<openflow_schema>.<<SLACK_CORTEX_SEARCH>',
'{
"query": "What is my vacation carry over policy?",
"columns": ["text","channel","ts","username"],
"filter": {"@contains": {"memberemails": "alice@example.com"}},
"limit": 10
}'
)
)['results'] AS results;
常见的可搜索列
text
, type
, subtype
, channel
, user
, username
, connectorId
, workspaceId
, ts
, threadTs
示例:向 AI 助手查询人力资源 (HR) 信息
您可以使用 Cortex Search 查询 AI 助手,让员工聊聊最新的 Slack 帖子。搜索的消息来自 Slack 信息类通道,例如通用通道或 it-help 通道。
在 SQL 工作表 中运行以下内容,利用从 Slack 引入的消息查询 Cortex Search 服务。
替换以下内容:
cortex_db
:包含 Cortex Search 服务的数据库的名称,由目标数据库
参数指定。cortex_schema
:包含 Cortex Search 服务的架构的名称,由目标架构
参数指定。cortex_search_service_name
:Cortex Search 服务的名称,由Cortex Search 名称
参数指定。user_emailID
:要筛选响应的用户的电子邮件 ID。
SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'<cortex_db>.<cortex_schema>.<cortex_search_service_name>',
'{
"query": "What is my vacation carry over policy?",
"columns": ["text", "channel", “ts”,”username”],
"filter": {"@contains": {"memberemails": "<user_emailID>"} },
"limit": 1
}'
)
)['results'] AS results
在 Python 工作表 中运行以下代码,通过从 Slack 引入的消息查询 Cortex Search 服务。确保将 snowflake.core
包添加到数据库中。
替换以下内容:
cortex_db
:包含 Cortex Search 服务的数据库的名称,由目标数据库
参数指定。cortex_schema
:包含 Cortex Search 服务的架构的名称,由目标架构
参数指定。cortex_search_service_name
:Cortex Search 服务的名称,由Cortex Search 名称
参数指定。user_emailID
:要筛选响应的用户的电子邮件 ID。
import snowflake.snowpark as snowpark
from snowflake.snowpark import Session
from snowflake.core import Root
def main(session: snowpark.Session):
root = Root(session)
# fetch service
my_service = (root
.databases["<cortex_db>"]
.schemas["<cortex_schema>"]
.cortex_search_services["<cortex_search_service_name>"]
)
# query service
resp = my_service.search(
query="What is my vacation carry over policy?",
columns = ["text", "channel", "ts","username"],
filter = {"@contains": {"memberemails": "<user_emailID>"} },
limit=1
)
return (resp.to_json())
在命令行界面中执行以下代码,利用从 Slack 引入的文件查询 Cortex Search 服务。您需要通过密钥对身份验证和 OAuth 来访问 Snowflake REST APIs。有关更多信息,请参阅 Rest API 和 使用 Snowflake 对 Snowflake REST APIs 进行身份验证。
替换以下内容:
cortex_db
:包含 Cortex Search 服务的数据库的名称,由目标数据库
参数指定。cortex_schema
:包含 Cortex Search 服务的架构的名称,由目标架构
参数指定。cortex_search_service_name
:Cortex Search 服务的名称,由Cortex Search 名称
参数指定。account_url
:您的 Snowflake 账户 URL。有关查找您的账户 URL 的说明,请参阅 查找账户的组织和账户名称。
curl --location "https://<account_url>/api/v2/databases/<cortex_db>/schemas/<cortex_schema>/cortex-search-services/<cortex_search_service_name>" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer <CORTEX_SEARCH_JWT>" \
--data '{
"query": "What is my vacation carry over policy?",
"columns": ["text", "channel"],
"limit": 1
}'
示例响应:
{
"results" : [ {
"channel" : "dev notes",
"text" : "Answer to the question asked."
} ]
}