You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Slack的reaction_added事件获取线程回复的消息内容?

解决Slack FAQ应用中线程回复消息获取的问题

我来帮你搞定这个线程消息的获取问题!你遇到的核心问题是调用conversations.history时参数设置不对,导致无法精准定位到线程里的那条回复消息。

问题根源

你之前只设置了latest: event.item.ts,这个参数的作用是返回早于或等于该时间戳的最新消息,而不是恰好匹配这个时间戳的消息。所以当被添加反应的是线程回复时,Slack会返回频道里最新的那条消息,而不是你要的线程回复内容。

解决方案

修改conversations.history的参数,同时设置oldest和latest为event.item.ts,这样就能精准筛选出时间戳完全匹配的那条消息——不管它是普通频道消息还是线程回复。

修改后的代码如下:

app.event('reaction_added', async ({ event, context, say }) => {
  try {
    const result = await app.client.conversations.history({
      token: process.env.SLACK_USER_TOKEN,
      channel: event.item.channel,
      oldest: event.item.ts, // 新增:设置起始时间戳为目标消息的ts
      latest: event.item.ts,
      limit: 1,
      inclusive: true
    });
    // 确保消息存在再保存
    if (result.messages && result.messages.length > 0) {
      save(`${result.messages[0].text}`);
    } else {
      console.log("未找到匹配的消息");
    }
  } catch (error) {
    console.error(error);
  }
});

额外说明

如果之后你需要获取这条回复所属的整个线程内容,可以从返回的result.messages[0]中提取thread_ts字段(只有线程回复才会有这个字段),然后调用conversations.replies方法:

// 假设已经拿到了目标消息
const targetMessage = result.messages[0];
if (targetMessage.thread_ts) {
  const threadReplies = await app.client.conversations.replies({
    token: process.env.SLACK_USER_TOKEN,
    channel: event.item.channel,
    ts: targetMessage.thread_ts
  });
  // 处理整个线程的消息
}

内容的提问来源于stack exchange,提问作者Roman Sheydvasser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:58