检测 Slack 临时消息何时消失

Detecting when Slack ephemeral message disappears

我有一个 Slack 命令机器人,它可以发布临时消息并让用户决定他们是想让频道中的其他人都可以看到消息 ('Send') 还是删除消息 ('Cancel').由于 Slack API 在用户与临时消息交互时不提供原始消息,因此我必须将原始消息存储在 Redis 中,在用户与发布的消息交互时检索它们,然后从 Redis 中删除密钥。我担心的一件事是用永远不会被删除的键阻塞 Redis,因为用户从不与消息交互(换句话说,不点击任何按钮,只是按原样离开消息然后走开).

Slack API 是否提供任何方式来了解临时消息何时被删除以便我可以清理 Redis?或者有没有更好的方法来解决这个问题?

否 - Slack 没有机制在临时消息消失时通知您的应用程序。一般来说,它们会一直存在,直到用户在他的浏览器上刷新页面(在网络版本中)。

但我可以提供一种替代解决方案来将所有消息存储在 redis 上:

自从您创建了初始临时消息后,如果您知道确切的功能上下文(例如用户 ID),您应该能够在以后始终重新创建相同的消息。

您需要做的就是在第一条消息的按钮中存储一个链接到其上下文的 ID。如果用户单击按钮,Slack 请求将包含这些 ID,这样您就可以识别其上下文,例如采取适当的行动或重新创建相同的消息以发送到整个频道。

您可以使用操作的 namevalue 字段来存储 ID。 (另见 。)

该 ID 可以代表一个对象的实例(例如客户),因此您可以再次从您的数据库中获取该对象,或者它可以是您的服​​务器会话的 ID,这使您能够使用服务器会话并将所有上下文数据保存在服务器会话中。 (另见 )。