-
-
Save thiagoloureiro/d26f28e750fd402712476ea7153d74a8 to your computer and use it in GitHub Desktop.
A simple C# class to post messages to a Slack channel. You must have the Incoming WebHooks Integration enabled. This class uses the Newtonsoft Json.NET serializer available via NuGet. Scroll down for an example test method and a LinqPad snippet. Enjoy!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Newtonsoft.Json; | |
using System; | |
using System.Collections.Specialized; | |
using System.Net; | |
using System.Text; | |
//A simple C# class to post messages to a Slack channel | |
//Note: This class uses the Newtonsoft Json.NET serializer available via NuGet | |
public class SlackClient | |
{ | |
private readonly Uri _uri; | |
private readonly Encoding _encoding = new UTF8Encoding(); | |
public SlackClient(string urlWithAccessToken) | |
{ | |
_uri = new Uri(urlWithAccessToken); | |
} | |
//Post a message using simple strings | |
public void PostMessage(string text, string username = null, string channel = null) | |
{ | |
Payload payload = new Payload() | |
{ | |
Channel = channel, | |
Username = username, | |
Text = text | |
}; | |
PostMessage(payload); | |
} | |
//Post a message using a Payload object | |
public void PostMessage(Payload payload) | |
{ | |
string payloadJson = JsonConvert.SerializeObject(payload); | |
using (WebClient client = new WebClient()) | |
{ | |
NameValueCollection data = new NameValueCollection(); | |
data["payload"] = payloadJson; | |
var response = client.UploadValues(_uri, "POST", data); | |
//The response text is usually "ok" | |
string responseText = _encoding.GetString(response); | |
} | |
} | |
} | |
//This class serializes into the Json payload required by Slack Incoming WebHooks | |
public class Payload | |
{ | |
[JsonProperty("channel")] | |
public string Channel { get; set; } | |
[JsonProperty("username")] | |
public string Username { get; set; } | |
[JsonProperty("text")] | |
public string Text { get; set; } | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void TestPostMessage() | |
{ | |
string urlWithAccessToken = "https://{your_account}.slack.com/services/hooks/incoming-webhook?token={your_access_token}"; | |
SlackClient client = new SlackClient(urlWithAccessToken); | |
client.PostMessage(username: "Mr. Torgue", | |
text: "THIS IS A TEST MESSAGE! SQUEEDLYBAMBLYFEEDLYMEEDLYMOWWWWWWWW!", | |
channel: "#general"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Query Kind="Program"> | |
<Reference><RuntimeDirectory>\SMDiagnostics.dll</Reference> | |
<Reference><RuntimeDirectory>\System.Configuration.dll</Reference> | |
<Reference><RuntimeDirectory>\System.Net.Http.dll</Reference> | |
<Reference><RuntimeDirectory>\System.Runtime.Serialization.dll</Reference> | |
<Reference><RuntimeDirectory>\System.ServiceModel.Internals.dll</Reference> | |
<NuGetReference>Newtonsoft.Json</NuGetReference> | |
<Namespace>System.Collections.Specialized</Namespace> | |
<Namespace>System.Net</Namespace> | |
<Namespace>System.Net.Http</Namespace> | |
<Namespace>System.Net.Http.Headers</Namespace> | |
<Namespace>System.Runtime.Serialization.Json</Namespace> | |
<Namespace>Newtonsoft.Json</Namespace> | |
</Query> | |
void Main() | |
{ | |
string urlWithAccessToken = "https://{your_account}.slack.com/services/hooks/incoming-webhook?token={your_access_token}"; | |
SlackClient client = new SlackClient(urlWithAccessToken); | |
client.PostMessage(username: "Mr. Torgue", | |
text: "THIS IS A TEST MESSAGE! SQUEEDLYBAMBLYFEEDLYMEEDLsaMOWWWWWWWW!", | |
channel: "#sandbox"); | |
} | |
//A simple C# class to post messages to a Slack channel | |
//Note: This class uses the Newtonsoft Json.NET serializer available via NuGet | |
public class SlackClient | |
{ | |
private readonly Uri _uri; | |
private readonly Encoding _encoding = new UTF8Encoding(); | |
public SlackClient(string urlWithAccessToken) | |
{ | |
_uri = new Uri(urlWithAccessToken); | |
} | |
//Post a message using simple strings | |
public void PostMessage(string text, string username = null, string channel = null) | |
{ | |
Payload payload = new Payload() | |
{ | |
Channel = channel, | |
Username = username, | |
Text = text | |
}; | |
PostMessage(payload); | |
} | |
//Post a message using a Payload object | |
public void PostMessage(Payload payload) | |
{ | |
string payloadJson = JsonConvert.SerializeObject(payload); | |
using (WebClient client = new WebClient()) | |
{ | |
NameValueCollection data = new NameValueCollection(); | |
data["payload"] = payloadJson; | |
var response = client.UploadValues(_uri, "POST", data); | |
//The response text is usually "ok" | |
string responseText = _encoding.GetString(response); | |
} | |
} | |
} | |
//This class serializes into the Json payload required by Slack Incoming WebHooks | |
public class Payload | |
{ | |
[JsonProperty("channel")] | |
public string Channel { get; set; } | |
[JsonProperty("username")] | |
public string Username { get; set; } | |
[JsonProperty("text")] | |
public string Text { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment