上下文
我正在基于斜杠命令构建一个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
但是,根据documentation,我应该能够更新漫游器消息:
有效的邮件类型
只有经过身份验证的用户发布的邮件才能更新 使用这种方法。这包括常规的聊天消息,以及 包含
me_message
子类型的邮件。 Bot用户也可能会更新 他们发布的消息。
我想更新的消息显然属于我的slack应用,看起来像普通的bot消息。这是通过conversations.history
看到的消息的样子:
{
"text": "Some text...",
"bot_id": "Bxxxxxxxx",
"type": "message",
"subtype": "bot_message",
"ts": "{TS}"
}
顺便说一句。我通过chat.delete
使用相同的参数删除了该邮件。
我想念什么?
答案 0 :(得分:2)
我与Slack支持人员讨论了我的问题,他们确认无法通过chat.update
更新响应消息。
这是完整的答复:
用户无法更新
in_channel
斜杠命令响应。以来 斜杠命令响应未使用Web API,因此未使用 与任何特定令牌相关联,则不可能 chat.update调用以确定是否允许更新 消息与否。因此是错误。我的建议是发送临时斜杠命令响应或 空的斜杠命令响应,然后使用
chat.postMessage
API 发送“在频道中”消息的方法,以后可以更新 使用chat.update API方法。
根据建议,我现在将改为通过chat.postMessage
API方法创建“游戏中”消息,这使我以后可以对其进行更新。然而,这产生了专用频道的访问问题。为了缓解这种情况,我现在将要求用户将我的机器人用户添加到所有私有渠道,这将使我的应用程序可以访问它。
我本来希望避免使用这种方法,因为它为用户增加了一个额外的步骤,但是没有更好的选择(顺便说一句,github应用程序使用相同的方法)。