Slack Slash命令 - 不在私有通道或直接消息中工作

时间:2017-07-06 19:56:42

标签: php slack slack-api

我编写了几个斜杠命令,在公共频道中显示响应没有任何问题,但它们在私人频道或直接消息中没有显示任何响应。

如下所示,我使用的是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 个答案:

答案 0 :(得分:2)

这看起来不是正确的做法。

响应斜杠命令

要响应斜杠命令,您不得发回新邮件(例如,通过代码示例中的webhook)。而只是回应来自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向用户发送直接消息。

答案 1 :(得分:2)

我和Slash团队谈过,这非常有帮助,我们弄清楚问题是什么。我在这里分享它,以防其他人遇到同样的问题。

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

解决方案是让webhook的创建者编辑它(不是代码,只是webhook)并默认将其设置为公共频道(任何)而不是私有频道。这使它适用于每个频道,甚至是直接信息。

通过这种方式,我可以使用原始代码,这也允许我动态更改用户图标,而不是发回消息。

我希望这对其他人也有帮助!