ConsumeSlack

文档中心 › 组件索引 › ConsumeSlack

ConsumeSlack Processor

类型全限定名:cn.org.acal.lynxus.processors.slack.ConsumeSlack

所属 Bundle:cn.org.acal.lynxus:lynxus-slack-nar:2.11.8

描述

从一个或多个配置的 Slack 通道检索消息。 消息以 JSON 格式写出。 有关如何配置此处理器并使其能够从 Slack 检索消息的更多信息,请参阅用法/其他详细信息。

标签

slackconversationconversation.historysocial mediateamtextunstructured

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Channels逗号分隔的 Slack 频道列表,用于从中检索消息。列表中的每个元素可以是频道 ID(如 C0L9VCD47),或者(仅限公共频道)带 # 前缀的频道名称(如 #general)。如果提供了频道名称而非 ID,则提供的 Access Token 必须被授予 channels:read 权限范围才能解析频道 ID。有关如何查找频道 ID 的信息,请参阅处理器的附加详情。
Access Token用于验证/授权 Lynxus 发送的 Slack 请求的 OAuth 访问令牌。可以是用户令牌或机器人令牌。必须根据所使用的会话类型授予 channels:history、groups:history、im:history 或 mpim:history 权限范围。
敏感属性:是
回复监控窗口7 days在消费完给定频道中的所有消息后,此处理器将定期轮询所有"线程消息"(即回复),这些回复的时间戳在当前时间和此时间量之间。将此值设置为较长时间可能会导致额外的资源使用并可能触发速率限制。但是,如果用户回复了在此窗口之外启动的旧线程,则可能无法捕获该回复。
回复监控频率5 mins在消费完给定频道中的所有消息后,此处理器将定期轮询所有"线程消息"(即回复),这些回复的时间落在当前时间和<回复监控窗口>属性指定的时间量之间。此属性决定轮询这些消息的频率。将值设置为较短时间可能导致更快地捕获消息回复,提供更低的延迟。但是,它也会导致额外的资源使用并可能触发速率限制。
Batch Size100在单次 Slack 请求中检索的最大消息数量。整个响应将被解析到内存中,因此在设置此值时需要注意这一点。
Resolve Usernamestrue
  • true
  • false
指定是否应将用户 ID 解析为用户名。默认情况下,Slack 消息提供发送消息的用户 ID(如 U0123456789),但不提供用户名(如 LynxusUser)。用户名可以被解析,但可能需要额外调用 Slack API,并且要求使用的 Token 被授予 users:read 权限范围。如果设置为 true,将以尽力而为的方式解析用户名:如果无法获取用户名,则跳过。另外请注意,当获取到用户名时,消息的 <username> 字段将被填充,并且 <text> 字段会被更新,使得任何提及都以 \"Hi @user\" 的形式输出,而不是 \"Hi <@U1234567>\"。
Include Message Blocksfalse
  • true
  • false
指定是否输出 JSON 应包含每条 Slack 消息的 'blocks' 字段值。该字段包含使用富文本格式化的消息各部分等信息。例如,这对于解析可能很有用。但是,它通常占数据的很大一部分,因此在不需要时可以设置为 null。
Include Null Fieldstrue
  • true
  • false
指定是否应将具有 null 值的字段包含在输出 JSON 中。如果为 true,Slack 消息中任何具有 null 值的字段都将包含在 JSON 中,值为 null。如果为 false,则该键将从输出 JSON 中完全省略。省略 null 值会产生更小的消息,通常处理效率更高,但包含这些值可能有助于更好地理解格式,特别是在 Schema 推断时。

关系 (Relationships)

名称描述自动终止
success成功接收的 Slack 消息将被路由到此关系否

写入的 FlowFile 属性

名称描述
slack.channel.id从中检索消息的 Slack 通道的 ID
slack.message.countFlowFile 中包含的松弛消息的数量
mime.type设置为 application/json,因为输出始终为 JSON 格式

状态管理

作用域描述
CLUSTER维护 Slack 通道 ID 到为该通道检索的最后消息时间戳的映射。这允许处理器仅检索自上次运行以来发布的消息。此状态存储在集群中,以便如果主节点更改,新节点将从上一个节点停止的地方继续。

受限 (Restricted)

该组件不受限。

输入要求

该组件不允许有传入连接。

另请参阅

详细说明

ConsumeSlack

说明

ConsumeSlack 可以使用 Slack 的 conversations.history API 从 Slack 接收消息。它可以消费给定会话(例如 Channel)的消息事件。 该 Processor 会周期性轮询 Slack 以获取最新消息。遗憾的是,如果不 扫描原始的"父"消息,Slack API 没有提供便于识别消息新回复(即新 线程消息)的机制。因此,该 Processor 会周期性轮询频道内的消息以 发现新的回复。默认每 5 分钟轮询一次,可以通过修改 "Reply Monitor Frequency" 属性的值来配置。此外,对于长期存在的 频道,轮询所有消息的开销非常大。因此,该 Processor 默认只轮询 7 天内的消息以发现新回复。可以通过设置 "Reply Monitor Window" 属性的值来配置。

Slack 配置

要使用该 Processor,需要在你的 Slack 工作区中创建并安装一个 Slack App。必须为该 App 创建一个 OAuth 用户令牌或 Bot 令牌, 且令牌必须具有 channels:history、groups:history、 im:history 或 mpim:history 用户令牌 Scope。需要哪个 Scope 取决于要消费的会话类型。关于如何创建应用并安装到你的 工作区,参见 Slack 文档 的最新信息。

根据 Processor 的配置,你可能还需要额外的 Scope。例如,要消费的 频道可以以 Channel ID 或(对于公开频道)频道名称列出。但是,如果 使用了 #general 这样的名称,令牌必须具有 channels:read Scope 才能为你确定 Channel ID。此外,如果 "Resolve Usernames" 属性设为 true,令牌必须具有 users:read Scope 才能把用户 ID 解析为用户名。

作为不需要 channels:read Scope 的替代,你可以只为 "Channel" 属性提供 Channel ID。要确定某个频道的 ID,在 Slack 中打开目标 频道,点击屏幕顶部的频道名称。会弹出一个提供频道信息的窗口。 滚动到弹窗底部,可以看到 Channel ID,并可点击按钮将其复制到 剪贴板。

编写本文档时,以下步骤可用于创建具有必要 channels:history Scope 的 Slack App。不过,这些说明可能随时变化,因此最好阅读 Slack 快速入门指南。

  • 创建一个 Slack App。点击这里 开始。在这里,点击 "Create New App" 按钮并选择 "From scratch"。 为你的 App 命名,并选择要用于开发该应用的工作区。
  • 创建应用后会进入应用的配置页面。例如 https://api.slack.com/apps/<APP_IDENTIFIER>。在这里,点击 左侧菜单的 "OAuth & Permissions"。滚动到 "Scopes" 部分, 点击 'Bot Token Scopes' 下的 "Add an OAuth Scope" 按钮。 选择 channels:history Scope。
  • 滚动回顶部,在 "OAuth Tokens for Your Workspace" 部分, 点击 "Install to Workspace" 按钮。如果你有相应权限,系统会 提示允许把该应用添加到你的工作区;否则,会生成一个供工作区 所有者批准安装的通知。此外,会生成一个 "Bot User OAuth Token"。
  • 复制 "Bot User OAuth Token" 的值。它将用作 ConsumeSlack Processor 的 Access Token 属性的值。
  • 然后必须为你要消费消息的每个频道启用该 Bot。方法是在 Slack 应用中,进入要消费的频道并按 /。选择 Add apps to this channel 选项,把你创建的 Application 作为 Bot 添加到频道。
  • 或者,你可以不在 "Bot Token Scopes" 下,而是在 "User Token Scopes" 部分创建 channels:history OAuth Scope。这样,该 令牌就可以以你的名义在你有权访问的任何频道(例如所有公开频道) 中使用,而无需显式地把 Bot 添加到频道。