我有一个Slack命令bot,它发布临时消息,并让用户决定是否要使该消息对频道中的其他所有人可见(“发送”)还是删除该消息(“取消”)。由于Slack API在用户与临时消息交互时不提供原始消息,因此我必须将原始消息存储在Redis中,在用户与发布的消息交互时检索它们,然后从Redis中删除密钥。我担心的一件事是使用永远不会删除的键来阻塞Redis,因为用户永远不会与消息进行交互(换句话说,不要轻敲任何按钮,仅将消息留在原处然后走开)。
Slack API是否提供任何方法来了解临时消息何时被删除,以便我可以清理Redis?还是有解决这个问题的更好方法?
答案 0 :(得分:2)
否-暂时性消息消失后,Slack没有机制通知您的应用程序。通常,它们将一直存在,直到用户刷新浏览器上的页面(在Web版本中)为止。
但是我可以提供一种替代解决方案,将所有消息存储在Redis上:
由于您创建了初始临时消息,因此,如果您知道确切的功能上下文(例如,用户ID),则应该能够在以后始终重新创建该消息。
您需要做的就是在第一条消息的按钮中存储一个链接到其上下文的ID。如果用户单击按钮,则Slack请求将包含这些ID,以便您识别其上下文,例如采取适当的措施或重新创建相同的消息以发送到整个频道。
您可以使用操作的name
或value
字段来存储ID。 (另请参见this answer。)
该ID可以代表对象(例如客户)的实例,因此您可以再次从数据库中获取该对象,也可以是服务器会话的ID,这使您可以处理服务器会话并保持服务器会话中的所有上下文数据。 (另请参见this answer)。