首页 > 解决方案 > 如何通过 API 将响应消息更新为斜杠命令?

问题描述

语境

我正在构建一个基于斜杠命令的 Slack 应用程序,它正在创建一个in_channel带有按钮的响应消息,供用户与之交互。斜杠命令用于私人频道。

当用户单击按钮时,我的应用程序能够更新该消息以反映新状态 - 只需使用更新的消息回复斜杠请求并设置replace_original = true.

问题

此外,我还想批量更新该消息,例如当计时器用完时。我一直在尝试使用 更新消息chat.update,但cant_update_message出现 API 错误。

这是我在 Postman 中用于测试的请求:

https://slack.com/api/chat.update?token={TOKEN}&channel={CHANNEL}&ts={TS}&text=Updated&as_user=true

但是,根据文档,我应该能够更新机器人消息:

有效的消息类型

只有经过身份验证的用户发布的消息才能使用此方法进行更新。这包括常规聊天消息,以及包含me_message子类型的消息。机器人用户还可以更新他们发布的消息。

我要更新的消息显然属于我的 slack 应用程序,看起来像一条普通的机器人消息。这是该消息的外观conversations.history

{
    "text": "Some text...",
    "bot_id": "Bxxxxxxxx",            
    "type": "message",
    "subtype": "bot_message",
    "ts": "{TS}"
}

顺便提一句。chat.delete我通过作品使用相同的参数删除该消息。

我错过了什么?

标签: slack-api

解决方案


我与 Slack 支持人员讨论了我的问题,他们确认无法通过chat.update.

以下是完整回复:

用户in_channel不能更新斜杠命令响应。由于斜杠命令响应未使用 Web API,因此未与任何特定令牌关联,因此 chat.update 调用无法确定是否允许更新消息。因此错误。

我的建议是发送一个临时斜杠命令响应或一个空斜杠命令响应,然后使用chat.postMessageAPI 方法发送“in channel”消息,稍后可以使用 chat.update API 方法更新该消息。

正如建议的那样,我现在将通过chat.postMessageAPI 方法创建“游戏内”消息,这允许我稍后对其进行更新。然而,这会为私人频道带来访问问题。为了缓解这种情况,我现在将要求用户将我的机器人用户添加到所有私人频道,这将使我的应用程序可以访问它。

我本来希望首先避免这种方法,因为它为用户创建了一个额外的步骤,但是没有更好的选择(顺便说一句,github 应用程序使用相同的方法)。


推荐阅读