如何从react_added事件获取线程回复的内容?

时间:2019-10-19 14:09:56

标签: bots slack slack-api bolts-framework

我正在构建一个松弛的FAQ应用程序,该应用程序使用消息反应来收集问题的最佳答案。我的计划是通过使用reaction_added事件获取TS属性,然后使用conversations.history方法获取消息的内容来保存任何带有积极反应的Slack消息。

这对于父级或非线程消息非常有效,但是不适用于线程内的回复消息。由于某种原因,conversations.history方法在使用线程回复的TS时返回不相关的消息。

我已经查看了Slack API conversations.history方法文档,以查看是否以任何特殊方式处理了回复。我回顾了conversations.replies方法以查看是否有帮助,但是由于reaction_added事件仅提供了消息的TS ID,并且没有conversations.replies方法可以使用的thread_ts值。 / p>

我正在使用螺栓框架。这是尝试将reaction_added事件和conversations.history方法一起使用以获取消息内容的代码段:

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,
      latest: event.item.ts,
      limit: 1,
      inclusive: true
    });
    save(`${result.messages[0].text}`);
  }
  catch (error) {
    console.error(error);
  }
});

预期结果: 发布了响应的线程回复的消息内容

实际结果: 备用频道中最新消息的消息内容

1 个答案:

答案 0 :(得分:0)

我不确定它是否最近更改,或者我误读了文档,但是conversations.replies API端点不需要thread_ts值来包含父线程时间戳,以便检索线程回复。 / p>

event.item.ts事件提供的reaction_added值足以检索添加了反应的回复的消息内容。

因此,要获取添加了反应的消息的消息内容,可以将原始问题中的代码更新为:

app.event('reaction_added', async ({ event, context, say }) => {
  try {
    const result = await app.client.conversations.replies({
      token: process.env.SLACK_USER_TOKEN,
      channel: event.item.channel,
      ts: event.item.ts
    });
    save(`${result.messages[0].text}`);
  }
  catch (error) {
    console.error(error);
  }
});