代码之家  ›  专栏  ›  技术社区  ›  Erik Kalkoken

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

  •  0
  • Erik Kalkoken  · 技术社区  · 6 年前

    语境

    我正在基于斜杠命令构建一个Slack应用程序,它正在创建一个 in_channel 带有按钮的响应消息,供用户进行交互。斜杠命令在专用通道中使用。

    当用户点击某个按钮时,我的应用程序可以更新该消息以反映新的状态-只需用更新的消息回复斜线请求,并通过设置 replace_original = true .

    问题

    此外,我还希望通过批处理更新该消息,例如,当计时器用完时。我一直试图用更新邮件 chat.update 但是我得到了 cant_update_message API错误。

    以下是我在邮递员中用于测试的请求:

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

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

    有效的消息类型

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

    我要更新的消息显然属于我的slack应用程序,看起来像一条普通的bot消息。下面是这个信息的查看方式 conversations.history :

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

    btw.i使用相同的参数通过 chat.delete 作品。

    我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Erik Kalkoken    6 年前

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

    以下是完整的答复:

    in_channel 用户无法更新斜杠命令响应。自从 斜杠命令响应未使用Web API,因此 与任何特定的令牌关联,不可能 chat.update调用以确定是否允许更新 是否留言。因此出现了错误。

    我的建议是发送一个短暂的斜杠命令响应,或者 一个空的斜杠命令响应,然后使用 chat.postMessage 美国石油学会 发送“in channel”消息的方法,稍后可以更新 使用chat.update API方法。

    按照建议,我现在将通过 聊天.postmessage 而是API方法,它允许我以后更新它。但是,这会造成专用通道的访问问题。为了缓解这种情况,我现在会要求用户将我的bot用户添加到所有专用频道,这将使我的应用程序能够访问它。

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