如何删除临时的 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\": \"\"}"));
当用户使用斜杠命令时,我 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\": \"\"}"));