Php 避免信道响应中斜杠命令的回音

Php 避免信道响应中斜杠命令的回音,php,slack,slack-api,Php,Slack,Slack Api,我现在正在为我的频道创建一个非常小的斜杠命令。我使用HTTPS 200将命令发送到PHP脚本,对其进行操作并将其作为JSON负载发送回,基本上如下所示: <?php header('Content-Type: application/json'); $text = $_POST['text']; if ($text === "keyword") $answer = "Hello World"; else $answer = "Nothing in here"; $response =

我现在正在为我的频道创建一个非常小的斜杠命令。我使用HTTPS 200将命令发送到PHP脚本,对其进行操作并将其作为JSON负载发送回,基本上如下所示:

<?php
header('Content-Type: application/json');

$text = $_POST['text'];

if ($text === "keyword") $answer = "Hello World";
else $answer = "Nothing in here";

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

echo json_encode($response);

使用
response\u type
时,请将其设置为
在\u频道中
其标准行为,以响应您的slash命令。这通常是有道理的,因此该频道中的用户可以在看到斜杠命令的结果之前看到该命令已发出

没有直接的方法可以关闭此回音功能,但有一个简单的解决方法

不要直接回复Slack请求,而是将您的响应作为新请求发送到
response\u url
,这是您在初始请求中从Slack获得的。然后,您只会在通道中得到响应,斜杠命令本身不会得到响应

顺便说一句,“发送延迟响应”一节中也解释了这种行为:

与即时响应消息一样,您可以包括响应类型字段。但是,如果将in_channel的值与此延迟方法一起使用,则不包括调用该命令的原始文本

我建议使用将请求发送到Slack

使用curl call更新问题后编辑

您仍然返回对Slack请求的直接响应,这会导致Slack响应用户命令。除了200OK(PHP脚本将自动执行),您不能返回任何内容。因此,请删除这一行:

echo json_encode(数组('text'=>'片刻…)

我还建议通过添加以下行在curl调用中包括正确的内容标题:

curl_setopt($curl,CURLOPT_HTTPHEADER,['Content-Type:application/json'])


开头的
header()?好的,那我该怎么处理呢?我甚至可以说'text'=>''来返回空文本。但我的问题是:如何防止初始斜杠命令也发布在频道中?从文本中删除该命令?如果始终使用相同的命令,则可以使用
str_replace
,或者对于正则表达式,可以使用
preg_replace
。要么我不明白你的问题,要么答案真的和我写的一样简单:)我的意思是:如果我写“/mycommand一些文本”,然后松弛发布“/mycommand一些文本”作为我的普通消息,并将外部服务器的答案作为单独的消息附加。但是我只想显示来自服务器的答案。Argh抱歉:D在$text=和$response=变量之间,文本正在完全更改。我会更新我的问题,让它更容易理解。我今天阅读了文档并测试了它。但是我不能让它工作。我应该用新的代码更新我的问题,还是应该如何继续?我测试了它,我可以确认它是有效的。因此,是的,请用最新的代码更新您的问题,以便人们能够帮助您使其工作。我更新了我的答案,以指出如何使您的代码按预期工作。是的,您是对的,但是$response应该编码为json字符串。你帮了大忙!非常感谢。
<?php
header('Content-Type: application/json');

$response = array(
  'response_type' => 'in_channel',
  'text' => "> \\M2\Kunden\_Tutorial"
);

echo json_encode(array('text' => 'One moment...'));

$ch = curl_init($_POST['response_url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
$exec = curl_exec($ch);
curl_close($ch);
    <?php
    $response = array(
      'response_type' => 'in_channel',
      'text' => '> \\M2\Kunden\_Tutorial'
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_POST['response_url']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($response));
    curl_setopt($ch, CURLOPT_POST, 1);
    $headers = array();
    $headers[] = "Content-Type: application/json";
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $result = curl_exec($ch);
    curl_close ($ch);