Slack Slash 命令 - 在私人频道或直接消息中不起作用
Slack Slash commands - Not working in private channels or direct messages
我编写了几个斜杠命令,它们在 public 频道中显示响应没有任何问题,但它们在私人频道或直接消息中没有显示任何响应。
如下所示,我使用的是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);
提前致谢!
这看起来不是正确的方法。
响应斜杠命令
为了响应斜杠命令,您不得发回新消息(例如,通过您的代码示例中的 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。
正在发送更多消息
您当然也可以从脚本发送消息以响应斜线命令。但是,如果您想向私人频道发送消息,请注意,如果在非 public 频道中使用,来自 Slack 的斜杠命令请求将不会包含正确的频道 ID。我认为目前没有任何解决方案或解决方法。
但是,您始终可以通过使用用户 ID 作为频道 ID 向用户发送直接消息。
我与 Slack 团队进行了交谈,这非常有帮助,我们找出了问题所在。我在这里分享它以防其他人遇到同样的问题。
问题不在于 public 或私人频道中使用的命令。创建 webhook 的人将其设置为在私人频道(我们的测试频道)上工作,因此它只能在该频道或她所属的任何频道中工作(因此,所有 public 频道)。只要我把她加到私人频道就可以了。
解决方案是让 webhook 的创建者编辑它(不是代码,只是 webhook)并将其默认设置为 public 频道(任意)而不是私人频道。这使其适用于每个渠道,甚至是直接消息。
通过这种方式,我能够使用我的原始代码,它还允许我动态更改用户图标,而不是发回消息。
我希望这对其他人也有帮助!
我编写了几个斜杠命令,它们在 public 频道中显示响应没有任何问题,但它们在私人频道或直接消息中没有显示任何响应。
如下所示,我使用的是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);
提前致谢!
这看起来不是正确的方法。
响应斜杠命令
为了响应斜杠命令,您不得发回新消息(例如,通过您的代码示例中的 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。
正在发送更多消息
您当然也可以从脚本发送消息以响应斜线命令。但是,如果您想向私人频道发送消息,请注意,如果在非 public 频道中使用,来自 Slack 的斜杠命令请求将不会包含正确的频道 ID。我认为目前没有任何解决方案或解决方法。
但是,您始终可以通过使用用户 ID 作为频道 ID 向用户发送直接消息。
我与 Slack 团队进行了交谈,这非常有帮助,我们找出了问题所在。我在这里分享它以防其他人遇到同样的问题。
问题不在于 public 或私人频道中使用的命令。创建 webhook 的人将其设置为在私人频道(我们的测试频道)上工作,因此它只能在该频道或她所属的任何频道中工作(因此,所有 public 频道)。只要我把她加到私人频道就可以了。
解决方案是让 webhook 的创建者编辑它(不是代码,只是 webhook)并将其默认设置为 public 频道(任意)而不是私人频道。这使其适用于每个渠道,甚至是直接消息。
通过这种方式,我能够使用我的原始代码,它还允许我动态更改用户图标,而不是发回消息。
我希望这对其他人也有帮助!