如何通过API将响应消息更新为斜杠命令?

时间:2018-09-11 10:44:44

标签: slack-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

但是,根据documentation,我应该能够更新漫游器消息:

  

有效的邮件类型

     

只有经过身份验证的用户发布的邮件才能更新   使用这种方法。这包括常规的聊天消息,以及   包含me_message子类型的邮件。 Bot用户也可能会更新   他们发布的消息。

我想更新的消息显然属于我的slack应用,看起来像普通的bot消息。这是通过conversations.history看到的消息的样子:

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

顺便说一句。我通过chat.delete使用相同的参数删除了该邮件。

我想念什么?

1 个答案:

答案 0 :(得分:2)

我与Slack支持人员讨论了我的问题,他们确认无法通过chat.update更新响应消息。

这是完整的答复:

  

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

     

我的建议是发送临时斜杠命令响应或   空的斜杠命令响应,然后使用chat.postMessage API   发送“在频道中”消息的方法,以后可以更新   使用chat.update API方法。

根据建议,我现在将改为通过chat.postMessage API方法创建“游戏中”消息,这使我以后可以对其进行更新。然而,这产生了专用频道的访问问题。为了缓解这种情况,我现在将要求用户将我的机器人用户添加到所有私有渠道,这将使我的应用程序可以访问它。

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