松弛斜杠命令 - 显示用户输入的文本?

Slack slash commands - show user-entered text?

到目前为止,我正在使用 slack slash commands API, and it works swimmingly with my bot (https://github.com/jesseditson/slashbot),除了一件事:

在其他斜杠集成(例如 giphy)中,当用户键入斜杠命令时,该命令将输出到 public 聊天,然后响应为 posted:


(来源:pxfx.io

但是当我使用自定义斜杠命令时,根本没有输出原始命令:


(来源:pxfx.io

我目前正在使用 Incoming Webhooks API 到 post 消息返回频道,这工作正常,但没有原始请求的响应是无形的并且缺乏上下文。

我希望它做什么:

  1. 一个用户键入 /command
  2. 该命令作为每个人都可以看到的消息回显到聊天室(最好是如果我 return 2XX 从 URL 斜线命令命中)
  3. 响应是 post 内联或通过传入的 webhook 编辑的(两者都对我有用,最好同时选择两者)

这似乎可以通过 giphy 用于集成的任何东西来实现,这给我留下了一些问题:

我正在使用 node.js,但除了语言之外,我更感兴趣的是这是否可行。


作为旁注,我意识到我可以使用 Bot API or Real Time Messaging API 来实现类似的东西,但没有斜杠 - 但是,我真的很喜欢斜杠命令附带的文档选项和自动完成功能,所以这就是我想问这个问题。

遗憾的是,Slack 目前不提供将 /command 回显到频道的选项,/giphy 是一个独特的内部集成。

目前唯一的选择是创建一个 Slack API 应用程序并让您的用户单独授权。在使用 /command post 原来的 /command message 回到频道 chat.postMessage 之后,然后 post 您的 Incoming webhook 消息。

来自 Slack 的 /Command API 文档:

In Channel" vs "Ephemeral" responses

By default, the response messages sent to commands will only be visible to the user that issued the command (we call these "ephemeral" messages). However, if you would like the response to be visible to all members of the channel in which the user typed the command, you can add a response_type of in_channel to the JSON response, like this:

{ "response_type": "in_channel", "text": "It's 80 degrees right now.", "attachments": [ { "text":"Partly cloudy today and tomorrow" } ] }

我认为您需要将 response_type 设置为 "in_channel" 以允许其他用户看到回复。

我最近遇到了这个问题,甚至遇到了这个问题。答案分布在 slash command documentation. 中的两个位置,在“"In Channel" vs "Ephemeral" 响应”标题下:

By default, the response messages sent to commands will only be visible to the user that issued the command (we call these "ephemeral" messages). However, if you would like the response to be visible to all members of the channel in which the user typed the command, you can add a response_type of in_channel to the JSON response, like this.

然后,当谈到延迟响应(来自节点服务器的请求将是)时:

The only user-facing difference between immediate responses and delayed responses is that "in channel" delayed responses will not include the initial command sent by the user. To echo the command back to the channel, you'll still need to provide a response to Slack's original visit to your invocation URL.

因此,在您对机器人所在服务器的初始请求结束时,您需要发送类似于

的响应

response.send({"response_type": "in_channel"});

这将回显 /command。不久之后,当图像获取请求的响应返回时,发布到 response_url 会将有效负载发送回 slack,并将在回显 /command.

下打印

我认为这与 'immediate response' 和 'delayed response' 之间的区别有关。

当我通过 cURL 发送消息时,它不显示斜杠命令 'in channel'。我发现,如果我仅包含 header('content-type header: application/json'),并使用包含 'in_channel' 的 json 有效负载回显我的响应,则会显示斜线命令。不需要 API!

示例:

$reply = "Whatever you want";
    $data = array(
        "response_type"=>"in_channel",
        "text"=>$repy,
        );
    header('Content-Type: application/json');
    echo json_encode($data);

希望这有帮助,这是我的第一个 post,如果我违反了 Whosebug 的任何潜规则,请保持温和。