Como fazer upload de qualquer arquivo no Slack via Slack-App em c #
Preciso de ajuda com o upload de arquivos para o Slac
Tenho um Slack-App que está funcionando com meu código (abaixo) até agora. Mas tudo o que posso fazer é postar mensagens. Não consigo anexar imagens às mensagens - porque não entendo como usar os chamados "métodos" e a sintaxe que o Slack está "aparecendo" na página da API.
Isso cria meu "conteúdo" e, abaixo, é apenas um Stream para ler um arquivo que eu poderia enviar:
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;
}
}
}
O cliente que se comunica:
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;
}
}
}
O principal
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();
}
}
}}
Se alguém tiver um exemplo de como deve ser o upload. Ou melhor ainda,
se alguém pudesse realmente explicar a sintaxe que essas Slack-Messages devem te
Isso seria bom! Eu ainda não sei onde e como devo colocar o chamado "Tipos de conteúdo aceitos: multipart / form-data, application / x-www-form-urlencoded" para o meu upload. Eu simplesmente não consigo encontrar exemplos sobre isso ...
Editar
O que me confunde é que Slack afirma que eles têm um método extra chamadofile.upload
- mas não devemos mais usá-lo, devemos usar apenaspostMessage
.
Mas como eu "empacotaria" um arquivo em uma mensagem? Minha sintaxe sempre parece estar desativada. Especialmente quando se trata de "conteúdo" ... Eu simplesmente não consigo descobrir como é o código c #. Onde declaro o "tipo de conteúdo" mencionado acima?
Outro problema é que ele sempre envia minhas mensagens - significa que recebo 200 respostas do servidor. Mas ele nunca mostra o arquivo (o que provavelmente significa que a sintaxe está desativada). Ou recebo a resposta de 200, mas a mensagem nunca aparece no Slac