Slack Interactive Messages:按钮点击回复

时间:2017-06-23 17:35:25

标签: php slack slack-api

我对Slack API遇到的问题有疑问。在我们的票务系统中创建票证时,我编写了一些代码,用于向特定频道发送消息(通过Incoming Webhook)。此消息中有几个按钮,我想用它来执行操作。

enter image description here

我设置了响应URL,指向一些PHP代码,这些代码应该在单击按钮时在同一个通道中发布一条简单的消息(用于测试目的)。

<?php 

//Required for ticketing system API, to be implemented later
require_once __DIR__ . '/src/autoload.php';

//get information from HTTP POST, sent at button click
$payload = $_POST['payload'];
$data = json_decode($payload,true);

$responseURL = $data["response_url"];

class Response {
    public $response_type = "";
    public $text = "";
    public $replace_original = "";
}

$r = new Response();
$r->response_type = "in_channel";
$r->text = "Ticket Accepted";
$r->replace_original = "false";

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

//Using CURL
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $responseURL,
    CURLOPT_POST => 1,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => json_encode($r)
));

$resp = curl_exec($curl);
var_dump($resp);
curl_close($curl);

?>

我从按钮点击发送的HTTP POST请求中获取响应URL,但是不是发送我的消息(“Ticket Accepted”),我单击按钮后立即得到以下内容:

enter image description here

另请注意:我尝试将replace_original设置为false,这样我就能看到原始邮件(带按钮),但无论如何,该邮件都会被上面的邮件替换。

在测试期间,我尝试将$responseURL设置为其他频道的传入Webhooks网址。当我这样做时,我在该频道中获取我的简单“Ticket Accepted”消息以及替换按钮消息的类似消息:

enter image description here

我不确定为什么按钮点击会立即生成这些响应,但它们似乎阻止我向该频道发布任何其他内容。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您只需回复包含邮件的回复请求即可。无需向webhook发送明确的消息。

你的回答必须是JSON。这是一个代码示例。替换

$message = [
            "response_type" => "in_channel",            
            "text" => "Ticket accepted"
];

header('Content-Type: application/json');
echo json_encode($message);

你对Slack的回应是var_dump($resp);。它将回显变量的内容,Slack试图显示它。