Newtonsoft.Json
ужна помощь с загрузкой файлов в Slack.
У меня есть Slack-приложение, которое до сих пор работает с моим кодом (ниже). Но все, что я могу сделать, это отправлять сообщения. Я не могу прикрепить изображения к сообщениям - потому что я не понимаю, как использовать так называемые «методы», а синтаксис Slack «показывает» на их API-странице.
Это создает мой «контент» и ниже его просто поток для чтения файла, который я мог загрузить:
public class PostMessage
{
public FormUrlEncodedContent Content(string message, string file)
{
var values = new Dictionary<string, string>
{
{"token", "xoxp-myToken"},
{ "username", "X"},
{ "channel", "myChannel"},
{ "as_user", "false"},
{"text", message},
{ "content", file},
{ "attachments","[{ \"fallback\":\"dummy\", \"text\":\"this is a waste of time\"}]"}
};
var content = new FormUrlEncodedContent(values);
return content;
}
}
public class PostFile
{
String path = @"C:\Users\f.held\Desktop\Held-Docs\dagged.jpg";
public string ReadImageFile()
{
FileInfo fileInfo = new FileInfo(path);
long imageFileLength = fileInfo.Length;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] imageData = br.ReadBytes((int)imageFileLength);
var str = Encoding.Default.GetString(imageData);
return str;
}
}
}
Клиент, который общается:
public class SlackClient
{
private readonly Uri _webhookUrl;
private readonly HttpClient _httpClient = new HttpClient {};
public SlackClient(Uri webhookUrl)
{
_webhookUrl = webhookUrl;
}
public async Task<HttpResponseMessage> SendMessageAsync(FormUrlEncodedContent content)
{
var response = await _httpClient.PostAsync(_webhookUrl, content);
return response;
}
}
}
Главный:
public static void Main(string[] args)
{
Task.WaitAll(IntegrateWithSlackAsync());
}
private static async Task IntegrateWithSlackAsync()
{
var webhookUrl = new Uri("https://slack.com/api/files.upload");
var slackClient = new SlackClient(webhookUrl);
PostMessage PM = new PostMessage();
PostFile PF = new PostFile();
while (true)
{
Console.Write("Type a message: ");
var message = Console.ReadLine();
var testFile = PF.ReadImageFile();
FormUrlEncodedContent payload = PM.Content(message, testFile);
var response = await slackClient.SendMessageAsync(payload);
var isValid = response.IsSuccessStatusCode ? "valid" : "invalid";
Console.WriteLine($"Received {isValid} response.");
Console.WriteLine(response);
response.Dispose();
}
}
}}
Если у кого-то есть пример того, как должна выглядеть загрузка. Или даже лучше,
если бы кто-то действительно мог объяснить синтаксис, который должны иметь эти Slack-сообщения.
Это было бы прекрасно! Я до сих пор не знаю, где и как я должен поставить так называемый«Допустимые типы контента: multipart / form-data, application / x-www-form-urlencoded» к моей загрузке. Я просто не могу найти примеры по этому ...
Редактировать:
Что меня смущает, так это то, что Slack утверждает, что у них есть дополнительный метод, называемыйfile.upload
- но мы не должны использовать его больше, мы должны использовать толькоpostMessage
.
Но как мне «упаковать» файл в сообщение? Мой синтаксис всегда выключен. Особенно, когда речь идет о «контенте» ... Я просто не могу понять, как должен выглядеть код c #. Где я могу объявить вышеупомянутый «тип контента»?
Другая проблема заключается в том, что он всегда отправляет мои сообщения - значит, я получаю 200-ответ от сервера. Но он никогда не показывает файл (что, вероятно, означает, что синтаксис выключен) Или я получаю 200-ответ, но сообщение никогда не отображается в Slack.