2017-07-06 103 views
0

我编写了几个斜杠命令,它们在公共通道中显示响应没有任何问题,但是它们在专用通道或直接消息中不显示任何响应。Slack Slash命令 - 不能在私人通道或直接消息中工作

如下所示,我使用in_channel响应类型。是否有任何其他响应类型可以使用,或者解决方法是否可以在任何地方使用?

$data = array(
    "username" => "My_user", 
    "channel" => $channel_id, 
    "response_type" => "in_channel", 
    "text" => $text, 
    "mrkdwn" => true, 
    "icon_url" => $icon_url 

); 

$json_string = json_encode($data); 
$slack_call = curl_init($slack_webhook_url); 
curl_setopt($slack_call, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($slack_call, CURLOPT_POSTFIELDS, $json_string);  
curl_setopt($slack_call, CURLOPT_CRLF, true); 
curl_setopt($slack_call, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($slack_call, CURLOPT_HTTPHEADER, array(                   
    "Content-Type: application/json", 
    "Content-Length: " . strlen($json_string)) 
);                             
$result = curl_exec($slack_call); 
curl_close($slack_call); 

在此先感谢!

回答

2

这看起来不正确。

响应削减命令

用于响应命令斜线你不能发送新的消息发送回(例如,经由网络挂接在您的代码示例)。而只需要回复Slack提供的消息内容。

$message = array (
    'response_type' => 'in_channel', 
    'text' => $text 
    ); 

header ('content-type: application/json'); 
echo json_encode ($message); 

这是你所需要的。

response_type定义如果响应可以通过一个信道"in_channel"或所有成员仅由斜线命令"ephemeral"

的发行者请参阅official documentation更多细节和选项可以看出。

发送其他消息

你当然也可以响应斜线命令从脚本发送消息。但是,如果您想发送消息给专用通道,请注意,如果在非公共通道中使用来自Slack的斜线命令请求,则不会包含正确的通道ID。我不认为目前有任何解决方案或解决方法。

但是,您始终可以通过将用户的ID用作通道ID来向用户发送直接消息。

+0

谢谢你,Erik。这很棒,但我需要解决两件事:它还将原始命令发回(我可能会弄清楚如何摆脱),但最重要的是,我需要能够从内部设置图标代码。正如你在上面看到的,我有“icon_url”=> $ icon_url,这是斜线命令的一个组成部分。我将这一行添加到了您的方法中,但它不起作用。你知道这是否可以做到?再次感谢! – Irina

+0

乐于助人。 1.如果使用“in_channel”,它将始终响应原始命令。唯一的办法就是将它关闭以使用“短暂”,但只有发行人才能看到回应。 2.您不能在响应消息中为斜杠命令设置图标。相反,您可以在应用设置中为相应的Slack应用设置图标。 –

+0

再次感谢Erik。在那种情况下,恐怕我不得不采取我最初的方法,因为我需要能够动态设置图标并隐藏命令,但仍然会在频道中发布。我的原始代码效果很好,但是在做了一些测试之后,我意识到它只适用于至少有5个人的渠道。你知道这是为什么,或者有什么方法可以解决这个问题吗?这对我来说似乎是一个错误。再次感谢! – Irina

1

我跟Slash团队交谈,这非常有帮助,我们找出问题所在。如果有其他人遇到同样的问题,我会在这里分享。

问题不在于公共或私人渠道中使用的命令。创建webhook的人将它设置为可以在私人频道(我们的测试频道)上使用,因此它只能在该频道或任何她参与的频道(所有公共频道)中使用。只要我将她加入私人频道,它就会起作用。

解决方案是为webhook的创建者编辑它(不是代码,只是webhook),并将其默认设置为公共频道(任意)而不是专用频道。这使得它可以在每个频道中工作,甚至可以直接发送消息

这样,我就可以使用我的原始代码,这也允许我动态地更改用户图标,而不是发回消息。

我希望能帮助其他人!

相关问题