【问题标题】:Detecting when Slack ephemeral message disappears检测 Slack 临时消息何时消失
【发布时间】:2018-09-18 02:44:17
【问题描述】:

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

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

【问题讨论】:

    标签: slack slack-api


    【解决方案1】:

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

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

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

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

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

    该 ID 可以代表对象的实例(例如客户),因此您可以再次从数据库中获取该对象,也可以是服务器会话的 ID,这使您能够使用服务器会话并保持服务器会话中的所有上下文数据。 (另见this answer)。

    【讨论】:

    • 谢谢!我的临时消息是使用从 API 获取的数据创建的——我可以传递触发按钮值获取的命令,并在用户点击按钮时重新获取,但不能保证我得到相同的数据——一些响应是时间敏感的。这就是导致我将原始消息存储在 Redis 中的原因。也许我会在我的 Redis 密钥上设置一个过期日期并在一周左右后清除它们。
    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2015-05-03
    • 2017-04-27
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多