【问题标题】:Slack Interactive Messages: Button click responseSlack 交互式消息:按钮点击响应
【发布时间】:2017-06-24 05:04:15
【问题描述】:

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

我设置了我的响应 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,但我没有发送消息(“票证已接受”),而是在单击按钮后立即收到以下内容:

另请注意:我尝试将 replace_original 设置为 false 以便我可以看到我的原始消息(带有按钮),但该消息无论如何都会被上面的消息替换。

在测试期间,我尝试将 $responseURL 设置为不同频道的传入 Webhooks URL。当我这样做时,我确实在该频道中收到了简单的“Ticket Accepted”消息以及替换按钮消息的类似消息:

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

【问题讨论】:

  • replace_original 应该是一个布尔值,试试这个:$r-&gt;replace_original = false;

标签: php slack slack-api


【解决方案1】:

您回复一个按钮请求时只需要一个包含您的消息的回声。无需向 webhook 发送显式消息。

您的响应必须是 JSON。这是一个代码示例。替换

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

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

您在 Slack 上收到回复的原因是 var_dump($resp);。它将回显 Slack 尝试显示的变量的内容。

【讨论】:

  • 这行得通吗?我只是试图回复传入的请求,但没有收到“票已接受”文本
猜你喜欢
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多