【问题标题】:Slack slash commands - show user-entered text?Slack 斜杠命令 - 显示用户输入的文本?
【发布时间】:2015-10-14 09:15:31
【问题描述】:

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

在其他斜线集成中(例如 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 来实现类似的效果,但没有斜线 - 但是,我真的很喜欢斜线命令附带的文档选项和自动完成功能,所以就是这样我想问这个问题。

【问题讨论】:

    标签: node.js bots slack-api


    【解决方案1】:

    来自 Slack 的 /Command API 文档:

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

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

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

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

    【讨论】:

    • 我很快就会试一试!如果可行,我将更改已接受的答案。谢谢!
    • 嗨@esamek,我如何在 PHP 中设置此响应,我总是以未解析的响应结束,例如 {'text':'hello world'} 但它应该只打印 hello world,我应该怎么做做?有人可以帮忙吗
    • @MuhammadIrfan 我会检查以确保您没有使用格式错误的 JSON。
    【解决方案2】:

    我最近遇到了这个问题,甚至遇到了这个问题。答案分布在slash command documentation. 的两个地方,位于“在频道中”与“临时”响应的标题下:

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

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

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

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

    的响应

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

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

    【讨论】:

      【解决方案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 的任何潜规则,请保持温和。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 此答案已过时且不再正确。您现在可以传递属性response_type 来确定响应是否显示给整个频道。查看@Hooray Im Helping 和@esamek 的答案以了解详细信息。
        猜你喜欢
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        • 2023-01-05
        • 2017-02-11
        相关资源
        最近更新 更多