eve 新增 Slack 事件钩子与会话控制功能

eve 新增 Slack 事件钩子与会话控制功能

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

Slack 的 eve 代理新增功能:支持在活跃会话线程中自动回复,无需重复提及;提供取消当前回复和重置会话的辅助函数;新增 onEvent 钩子,可处理任意 Slack 事件(如成员加入),并支持将事件分发至多个目标。这些功能简化了代理与 Slack 的交互流程。

🔎

延伸解读

会话管理更灵活

新增的 ctx.cancel() 和 ctx.reset() 让代理能更精细地控制对话流程。cancel 可中断当前回复并保留会话,适合处理用户中途修正;reset 则彻底结束会话,下次消息将开启全新上下文。这为需要动态调整对话状态的场景提供了便利。

事件驱动扩展

onEvent 钩子支持处理任意 Slack 事件,如成员加入、表情回应等。通过 ctx.receive() 可将单个事件分发到多个目标,例如 team_join 事件可触发多个频道的欢迎流程。这为自动化工作流提供了更多可能性,但需注意事件订阅和权限配置。

权限与触发条件

使用新功能时需注意权限要求:公共频道消息需要 message.channels 事件和 channels:history 权限,私密频道则需 message.groups 和 groups:history。此外,thread.listParticipants() 可获取线程参与者,但仅适用于特定场景。合理配置权限是功能正常工作的前提。

Q&A

eve 代理在 Slack 中如何实现在线程中自动回复而无需重复提及?

eve 代理通过新的 onMessage 钩子接收 Slack 消息,并使用 ctx.isSubscribed() 检查消息是否属于具有活跃 eve 会话的线程。如果线程已有活跃会话,代理可以自动回复,无需再次提及。

eve 代理如何区分需要处理的消息?

在 onMessage 钩子中,可以使用 ctx.isBotMentioned() 检测显式提及,ctx.isSubscribed() 检查消息是否属于活跃会话的线程,以及检查消息是否为直接消息(channel_type === 'im')。如果满足任一条件,则返回 { auth: null } 表示处理该消息。

eve 代理如何取消当前回复或重置会话?

在 onMessage 钩子中,可以调用 ctx.cancel() 取消当前回复并保留会话,然后返回 { auth } 将新消息作为替换输入;调用 ctx.reset() 可以终止当前会话,下次消息将开始新会话。

eve 代理如何处理任意 Slack 事件(如成员加入)?

通过新的 onEvent 钩子,可以接收原始事件(如 team_join)。在钩子内部,调用 ctx.receive() 可以启动代理回合,也可以多次调用以将事件分发到多个目标。例如,team_join 事件可以触发多个频道的 onboarding 流程。

eve 代理如何将单个事件分发到多个目标?

在 onEvent 钩子中,可以多次调用 ctx.receive(),每次传入不同的 target(如 channelId),从而将事件分发到多个频道。例如,team_join 事件可以同时触发多个欢迎频道的 onboarding。

eve 代理如何获取线程中的参与者列表?

使用 ctx.thread.listParticipants() 辅助函数,它返回线程中唯一的人类 Slack 用户 ID,按首次出现顺序排列。

eve 代理在 Slack 中处理公共和私人频道消息需要哪些权限?

公共频道消息需要 message.channels 触发事件类型和 channels:history bot 作用域;私人频道还需要 message.groups 和 groups:history。

🏷️

标签

➡️

继续阅读