使用Slack Commands API

时间:2018-04-03 09:51:03

标签: slack slack-api

所以我在Node中构建一个响应某些用户命令的松弛应用程序。它通常以带有一些附件和按钮的交互式消息进行响应。

对于某些按钮,我会返回不同类型的文本或其他附件,但我也希望有一个"取消"基本上取消当前命令的按钮 - 将其从用户的聊天中删除。

问题在于我想在不必请求聊天的情况下执行此操作:编写:用户范围或无需创建机器人

  1. 通过询问chat:write:user范围,我基本上可以删除用户创建的任何消息,但是在安装应用程序时会询问该范围并授予我的应用程序代表用户发布的权限,大多数人都觉得不舒服。

  2. 通过创建一个机器人,我可以实现这一点,但它再次要求允许将一个机器人添加到频道,我不想要这个。

  3. 我尝试了什么

    1. 使用chat.delete方法,但即使我尝试将{ ok: false, error: 'missing_scope', needed: 'chat:write:user', provided: 'identify,commands' }设置为as_user,我也会从Slack获得false

    2. 对该命令发出空消息,如res.send()res.send({ text: null })res.send({ attachments: null })等。 当您在Slack上回复用户命令时,它会默认覆盖以前的内容。我只想覆盖什么,基本上删除原始响应。然而,当我尝试这样做时,除非我提供某些内容,否则它不会做任何事情。

    3. 我非常确定#2是要走的路,我觉得我很亲近,而且这很简单,但不在我看来。

      我想要的实例

      我知道可以这样做,因为松弛的GIF Keyboard应用程序就是这样做的。在搜索Gif时,他们有一个"取消"底部的按钮,只删除当前命令/消息。此外,他们只询问命令范围。

1 个答案:

答案 0 :(得分:4)

你走在正确的轨道上。选项#2有效,因此无需请求范围来删除消息。

只需将以下回复发送回Slack,您应用中的最后一条(短暂的)消息将被删除:

{
    "response_type": "ephemeral",
    "replace_original": true,
    "delete_original": true,
    "text": ""
}