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

Posted

技术标签:

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

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

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

(来源:pxfx.io)

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

(来源:pxfx.io)

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

我想要它做什么:

    用户键入/command 该命令作为每个人都可以看到的消息回显到聊天室(如果我从斜杠命令命中的 URL 返回 2XX 最好) 响应是内联发布的,或者通过传入的 webhook 发布(这两种方法都适用于我,最好同时选择两者)

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

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

是否有我错过的设置允许这样做?

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


作为旁注,我意识到我可以使用 Bot API 或 Real Time Messaging 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);

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

此答案已过时且不再正确。您现在可以传递属性response_type 来确定响应是否显示给整个频道。查看@Hooray Im Helping 和@esamek 的答案以了解详细信息。

以上是关于Slack 斜杠命令 - 显示用户输入的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从服务器使用 Slack API 进行身份验证

Discord.JS 13 斜杠命令显示目标用户的特定用户角色并嵌入,

在 prometheus alertmanager 通知中提及 slack 用户

用数据响应 Express 中的 Slack url

如何激活 Slack 机器人

为机器人用户创建 Slack 频道