我正在处理松弛slash commands API,到目前为止它与我的机器人(https://github.com/jesseditson/slashbot)一起游泳,除了一件事:
在其他斜杠集成(例如giphy)中,当用户键入斜杠命令时,该命令将输出到公共聊天,然后发布响应:
但是,当我使用自定义斜杠命令时,根本不输出原始命令:
我目前正在使用Incoming Webhooks API将消息发布回频道,这样可以正常运行,但是如果没有原始请求,则回复是无效的,缺少上下文。
/command
这似乎可以通过任何giphy用于集成,这给我一些问题:
是giphy使用私有API,还是我错过了正确的API来模仿这种行为?
我错过了允许这样的设置吗?
我使用的是node.js,但如果可能的话,我会更感兴趣,除了语言之外。
作为旁注,我意识到我可以使用Bot API或Real Time Messaging API来实现类似的东西,但没有斜线 - 但是,我真的很喜欢斜杠附带的文档选项和自动完成功能命令,这就是我在回答这个问题后所做的事情。
答案 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消息。