如何删除临时的 Slack 消息

How to delete ephemeral Slack message

当用户使用斜杠命令时,我 post 只向该用户发送一条临时消息。当他们单击一个按钮时,我希望删除或更新该短暂消息。现在我只是想让删除部分工作。

在 Slack API 文档中它说发送 HTTP POST 到 response_url。当用户单击按钮时,我得到的唯一 response_url 是这样的:https://hooks.slack.com/actions/XXXXXXXXX/YYYYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ

当我向 url 发送 POST 时,我得到一个错误(我不确定错误是什么,我只知道我的代码在 try/catch).

我发送给 URL 的 JSON 看起来像这样:

        {
            "response_type" = "ephemeral",
            "replace_original" = "true",
            "delete_original" = "true",
            "text" = ""
        };

我在 Slack API 文档中看到它说我应该将 JSON 发送到以 https://hooks.slack.com/services/ 开头的 URL 但是我没有收到任何response_url 有 /services/。

这是我用来发送响应的 C# 代码:

       var replaceMsg = new NameValueCollection();
       replaceMsg["delete_original"] = "true";
       replaceMsg["replace_original"] = "true";
       replaceMsg["response_type"] = "ephemeral";
       replaceMsg["text"] = "";                    
       var responseReplace = client.UploadValues(button.response_url, "POST", replaceMsg);

编辑:当我尝试发送

时似乎遇到了 404 错误
Exception: System.Net.WebException: The remote server returned an error: (404) Not Found.

但是,当我将确切的 URL 粘贴到我的浏览器中时,我没有看到 404,而是看到了 JSON。

谁能指导我正确的方向?谢谢。

不久前我做了一些非常相似的事情并且能够让它工作,尽管它很棘手。

这个 post 帮了我大忙:

我会做两件事:

1) 确保您知道 POST 响应失败的原因,因为它可能包含有用的信息。

2) 看起来您发送的是字符串 "true" 而不是布尔值,我猜您可能想发送布尔值:

{
   "response_type" = "ephemeral",
   "replace_original" = true,
   "delete_original" = true,
   "text" = ""
};

@theMayer 和@Aaron 关于 headers 错误的说法是正确的。

设置 headers 解决了问题,如下所示:

var client = new WebClient();
client.Headers.Add("Content-Type", "text/html");
var response = client.UploadData(button.response_url, "POST", Encoding.Default.GetBytes("{\"response_type\": \"ephemeral\",\"replace_original\": \"true\",\"delete_original\": \"true\",\"text\": \"\"}"));