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_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"
以允许其他用户看到响应。
【讨论】:
我很快就会试一试!如果可行,我将更改已接受的答案。谢谢! 嗨@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 斜杠命令 - 显示用户输入的文本?的主要内容,如果未能解决你的问题,请参考以下文章
Discord.JS 13 斜杠命令显示目标用户的特定用户角色并嵌入,