7

我正在使用 slack slash commands API ,到目前为止,它可以与我的机器人 ( https://github.com/jesseditson/slashbot ) 配合使用,除了一件事:

在其他斜线集成(例如 giphy)中,当用户键入斜线命令时,该命令将输出到公共聊天,然后发布响应:

giphy集成
(来源:pxfx.io

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

没有消息
(来源:pxfx.io

我目前正在使用Incoming Webhooks API 将消息发布回通道,这可以正常工作,但是响应是无实体的,并且在没有原始请求的情况下缺少上下文。

我想要它做什么:

  1. 用户类型/command
  2. 该命令作为每个人都可以看到的消息回显到聊天室(如果我从斜杠命令命中的 URL 返回 2XX 最好)
  3. 响应是内联发布的,或者通过传入的 webhook 发布(两者都适用于我,两者都作为一个选项会更好)

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

  • giphy 是使用私有 API,还是我错过了模拟这种行为的正确 API?

  • 有没有我错过的设置允许这样做?

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


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

4

4 回答 4

4

来自 Slack 的 /Command API 文档:

在频道中”与“短暂”响应

默认情况下,发送到命令的响应消息仅对发出命令的用户可见(我们称这些“短暂”消息)。但是,如果您希望响应对用户键入命令的通道的所有成员可见,您可以在 JSON 响应中添加 a response_typeof ,如下所示:in_channel

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

我认为您需要设置response_type"in_channel"允许其他用户看到响应。

于 2015-12-22T15:59:38.837 回答
4

我最近遇到了这个问题,甚至遇到了这个问题。答案分布在斜杠命令文档中的两个地方。在“频道内”与“临时”响应的标题下:

默认情况下,发送到命令的响应消息仅对发出命令的用户可见(我们称这些“短暂”消息)。但是,如果您希望响应对用户键入命令的通道的所有成员可见,您可以将 response_type of 添加in_channel到 JSON 响应中,如下所示。

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

立即响应和延迟响应之间唯一面向用户的区别是“通道内”延迟响应将不包括用户发送的初始命令。要将命令回显到通道,您仍然需要提供对 Slack 对您的调用 URL 的原始访问的响应。

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

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

这将回声/command。不久之后,当图像获取请求的响应返回时,发布到response_url将有效负载发送回 slack,并将在 echoed out 下打印/command

于 2015-12-25T06:46:52.120 回答
3

我认为这与“立即响应”和“延迟响应”之间的区别有关。

当我通过 cURL 发送消息时,它不会显示斜杠命令“在频道中”。我发现,如果我只包含 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);

希望这会有所帮助,这是我的第一篇文章,所以如果我违反了 stackoverflow 的任何潜规则,请保持温和。

于 2016-05-06T07:04:29.837 回答
1

不幸的是,Slack 目前不提供/command与频道呼应的选项,这/giphy是一种独特的内部集成。

目前唯一的选择是创建一个 Slack API 应用程序并让您的用户单独进行身份验证。使用/commandpost 将原始内容/command message返回到频道后chat.postMessage,然后发布您的 Incoming webhook 消息。

于 2015-07-24T12:58:33.640 回答