Post-Nachricht mit der Datei als Anhang auf slack

Ich bin der Codierung eine einfache Konsolenanwendung in C# für die Kommunikation mit Slack.com.
Ich mache dies über Ihr WebApi.
Derzeit weiß ich, wie das veröffentlichen von Nachrichten (mit Anhängen, farbig, links, Benutzer, etc.) und senden Sie Dateien auf den server.

Wenn Sie senden eine Datei in eine normale Art und Weise ("eine Datei Hochladen" auf der linken Seite der Eingabe Textfeld) diese Datei wird in der Haupt-Chatfenster. Aber wie können Sie erreichen die gleiche Sache über WebAPI ? Derzeit nach dem senden der Datei, ich kann es sehen in der rechten Seite, wo alle Dateien aufgelistet sind nur.

Gibt es auch noch eine zweite Frage: ist es möglich, ändern Sie die Farbe von text in die Nachricht (nicht der "line" in der Anlage)?

Dies ist die Antwort nach dem senden der Datei über https://slack.com/api/files.upload

{
    "ok": true,
    "file": {
        "id": "F04EX4***",
        "created": 1429279966,
        "timestamp": 1429279966,
        "name": "Testing.txt",
        "title": "Testing",
        "mimetype": "text\/plain",
        "filetype": "text",
        "pretty_type": "Plain Text",
        "user": "U*********",
        "editable": true,
        "size": 28,
        "mode": "snippet",
        "is_external": false,
        "external_type": "",
        "is_public": false,
        "public_url_shared": false,
        "url": "https:\/\/slack-files.com\/files-pub\/T*******\
/testing.txt",
        "url_download": "https:\/\/slack-files.com\/files-pub\/T************\
/download\/testing.txt",
        "url_private": "https:\/\/files.slack.com\/files-pri\/T*******\
/testing.txt",
        "url_private_download": "https:\/\/files.slack.com\/files-pri\/T**********\
 /download\/testing.txt",
        "permalink": "https:\/\/******.slack.com\/files\/******\
/F0******\/testing.txt",
        "permalink_public": "https:\/\/slack-files.com\/********",
        "edit_link": "https:\/\/******.slack.com\/files\/****\/F******\/testing.txt\/edit",
        "preview": "This is a test file number2.",
        "preview_highlight": "<div class=\
"sssh-code\"><div class=\"sssh-line\"><pre>This is a test file number2.<\/pre><\/div>\n
<\/div>",
        "lines": 1,
        "lines_more": 0,
        "channels": [],
        "groups": [],
        "ims": [],
        "comments_count": 0
    }
}

sorry, ich weiß nicht, wie dieses format sehr schön.

Den "is_external" und "is_public" sind beide falsch, vielleicht ist das der Grund, aber wie kann ich diese auf "true" ?

->> Danke für den edit! 🙂
Das ist die gesamte Funktion, die ich verwende:

public static void SlackSendFile()
    {
        FileStream str = File.OpenRead(@"C:\Users\Eru\Desktop\Testing.txt");
        byte[] fBytes = new byte[str.Length];
        str.Read(fBytes, 0, fBytes.Length);
        str.Close();

        var webClient = new WebClient();
        string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
        webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
        var fileData = webClient.Encoding.GetString(fBytes);
        var package = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", boundary, "Testing.txt", "multipart/form-data", fileData);

        var nfile = webClient.Encoding.GetBytes(package);
        string url = "https://slack.com/api/files.upload?token=" + Token + "&content=" + nfile + "&channels=[" + Channel + "]";

        byte[] resp = webClient.UploadData(url, "POST", nfile);

        var k = System.Text.Encoding.Default.GetString(resp);
        Console.WriteLine(k);
        Console.ReadKey();
    }

EDIT1:
In dieser Zeile:

 byte[] resp = webClient.UploadData(url, "POST", nfile);

Die URL ist:

 https://slack.com/api/files.upload?token=*********&content=System.Byte[]&channels=[%23*****]

Dann bin ich vorbei an der byte-array.

EDIT:

Habe ich das problem gelöst. Die Sache war, dass der Kanal sollte die ID des Kanals, nicht der name des Kanals... blöder Fehler 🙁

  • Versuchen Sie das Lesen durch diese: api.slack.com/methods/files.upload
  • Ja, das ist, wie ich bin senden von Dateien. Das bedeutet aber nicht, zeigen Sie die Datei im main Chat Fenster.
  • Versuchen Sie, Debuggen Sie Ihre Anwendung, um zu sehen, was http-Antwort zurück kommt, auch stellen Sie sicher, dass die Vertrauensebene der Anwendung auf vollständig festgelegt ist.
  • Ich bearbeitet meine post
  • Können Sie uns zeigen, das JSON-du postest auch?
  • Sind Sie sicher, dass die Slack-API-integration ist derzeit aktiv? Auch haben Sie versucht, zu sehen, den Wert der string 'url' nach seinen wurden verkettet (um zu sehen, ob es sieht aus wie eine richtige URL)?
  • Ich habe bearbeitet die post hinzufügen der URL. was meinst du mit "AKTIV" ? wie Sie dies überprüfen? Ich denke ja, wie kann ich Nachrichten senden und Dateien auch, aber Sie erscheinen nicht in der Haupt-Chatfenster.
  • Sie haben die integration konfiguriert und aktiviert auf Slack? Es ist vielleicht eine dumme Frage, aber es scheint, dass Sie alles richtig machen, das ist die einzige Sache, die ich denken kann.
  • Alle, die ich in meinem "Konfiguriert Integrationen" ist die "Eingehende Webhooks" (abgesehen von anderen Dingen, die sind jetzt irrelevant). Ich habe eine Funktion, die über die URL: hooks.slack.com/services..... und die Datei, die ich sende, um die API... vielleicht sollte ich das konfigurieren etwas mehr da? 🙁
  • problem gelöst -> siehe die post, die Letzte "Bearbeiten"
  • Wow das ist wirklich seltsam, ich habe immer nur den Namen. Froh, dass Sie es geschafft habe!
  • Danke für Eure Hilfe 🙂
  • Toller Artikel. BTW, wenn Sie den Test lokal webhooks, empfehle ich ein Programm namens ngrok von ngrok.com. Sobald Sie es einrichten. Führen Sie eine Befehlszeile auf Ihrem dev-Maschine zu testen, Ihre lokalen API mit "ngrok http -host-header=localhost:9000 9000" Wenn Ihre api-port wurde auf 9000 zum Beispiel

InformationsquelleAutor Eru | 2015-04-17
Schreibe einen Kommentar