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

时间:2015-07-23 21:02:11

标签: node.js bots slack-api

我正在处理松弛slash commands API,到目前为止它与我的机器人(https://github.com/jesseditson/slashbot)一起游泳,除了一件事:

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

giphy integration http://oi.pxfx.io/image/0h0n0L1Q2E0e/Screen%20Recording%202015-07-23%20at%2001.47%20PM.gif

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

no message http://oi.pxfx.io/image/061t2v402X10/Screen%20Recording%202015-07-23%20at%2001.49%20PM.gif

我目前正在使用Incoming Webhooks API将消息发布回频道,这样可以正常运行,但是如果没有原始请求,则回复是无效的,缺少上下文。

我喜欢做什么:

  1. 用户输入/command
  2. 该命令被回显到聊天室,作为每个人都可以看到的消息(最好是我从URL返回2XX,斜杠命令命中)
  3. 响应是以内联方式发布的,或者是通过传入的webhook发布的(对我来说都是有效的,两者都可以作为选项更好)
  4. 这似乎可以通过任何giphy用于集成,这给我一些问题:

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

    • 我错过了允许这样的设置吗?

    我使用的是node.js,但如果可能的话,我会更感兴趣,除了语言之外。

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

4 个答案:

答案 0 :(得分:4)

来自Slack的/ Command API文档:

  

在频道“vs”短暂的“回应”

     

默认情况下,发送给命令的响应消息只对发出命令的用户可见(我们称之为“短暂”消息)。但是,如果您希望响应对用户键入命令的频道的所有成员可见,则可以向JSON响应添加response_type in_channel,如下所示:

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

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

答案 1 :(得分:4)

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

  

默认情况下,发送给命令的响应消息只对发出命令的用户可见(我们称之为"短暂的"消息)。但是,如果您希望响应对用户键入命令的通道的所有成员可见,则可以向JSON响应添加in_channel的response_type,如下所示。

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

  

立即响应和延迟响应之间唯一面向用户的区别在于"在频道"延迟响应将不包括用户发送的初始命令。要将命令回显给频道,您仍然需要回复Slack对您的调用URL的原始访问。

因此,在您对服务器的初始请求结束时,机器人已启用,您将要发送类似

的响应

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

将回显/command。不久之后,当图像提取请求的响应返回时,发布到response_url会将有效负载发送回松弛状态,并将在回显的/command下打印。

答案 2 :(得分:3)

我认为这与“即时回应”之间的区别有关。并且'延迟回应'

当我通过cURL发送消息时,它不会在频道'中显示斜杠命令。我发现,如果我只包含标题('内容类型标题: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规则,请保持温和。

答案 3 :(得分:1)

不幸的是,Slack目前没有提供将/command回显到频道的选项,/giphy是一种独特的内部整合。

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