如何通过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
相关产品推荐
相关产品推荐

