Как удалить эфемерное сообщение Slack - PullRequest
0 голосов
/ 04 февраля 2020

Когда пользователь использует команду sla sh, я отправляю эфемерное сообщение только этому пользователю. Когда они нажимают кнопку, я хочу, чтобы это эфемерное сообщение было либо удалено, либо обновлено. Сейчас я просто пытаюсь заставить работать удаленную часть.

В документации Slack API говорится, что нужно отправить HTTP POST в response_url. Единственный response_url, который я получаю, когда пользователь нажимает кнопку, выглядит примерно так: https://hooks.slack.com/actions/XXXXXXXXX/YYYYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ

Когда я отправляю POST на этот URL, я получаю сообщение об ошибке (я не уверен в чем ошибка, я просто знаю, что мой код терпит неудачу при попытке / поймать).

JSON, который я отправляю на этот URL-адрес, выглядит следующим образом:

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

В документации по Slack API указано, что я должен отправить JSON на URL-адрес. это начинается с https://hooks.slack.com/services/, однако я не получаю ни одного 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.

Кто-нибудь может направить меня в правильном направлении? Спасибо.

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Я сделал что-то очень похожее, не слишком длинное go и смог заставить его работать, хотя это было сложно.

Этот пост мне очень помог: Как удалить эфемерные сообщения

Я бы сделал две вещи:

1) убедитесь, что вы знаете, что это Сбой ответа POST, поскольку он может содержать полезную информацию.

2) Похоже, что вы отправляете в строке "true" вместо логических значений, я полагаю, вы, вероятно, хотите отправить логические значения вместо:

{
   "response_type" = "ephemeral",
   "replace_original" = true,
   "delete_original" = true,
   "text" = ""
};
0 голосов
/ 05 февраля 2020

@ theMayer и @Aaron были правы о неправильных заголовках.

Установка заголовков решила проблему, вот так:

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\": \"\"}"));
...