Automatically posting messages to slack

SQL Server supports SQL Mail for email notifications, and traditionally I’ve used SQL Mail to keep myself apprised of various server issues.

Slack is a great alternative to email, and a lot of folks make extensive use of slack. I thought it would be nice to receive notifications from SQL Server in a slack channel, and so started looking into what would be necessary to programmatically generate messages to slack.

Assuming you have created a slack application and have an authorization token, and assuming that you wish to post the message to a channel (posting to specific users is a subject for another day), here is a routine that you can use that uses the slack postMessage API to send a message to a specified channel.

 public string PostMessageRaw(
                                string token,
                                string channel,
                                string message)
                string responseText = string.Empty;

                var request = (HttpWebRequest)WebRequest.Create("");

                string encodedMessage =message.Replace("\\", "\\\\");   //slack requires that slashes be escaped.

                StringBuilder postData = new StringBuilder();
                        .AppendFormat("\"channel\":\"{0}\",", channel)
                        .AppendFormat("\"text\":\"{0}\"", encodedMessage)

                var data = Encoding.UTF8.GetBytes(postData.ToString());

                request.Method = "POST";
                request.ContentType = "application/json; charset=utf-8";
                request.Headers.Add(string.Format("Authorization: Bearer {0}", token));

                request.ContentLength = data.Length;

                using (var stream = request.GetRequestStream())
                    stream.Write(data, 0, data.Length);

                var response = (HttpWebResponse)request.GetResponse();

                responseText = new StreamReader(response.GetResponseStream()).ReadToEnd();

               return responseText;

Written by

42   Posts

View All Posts

Leave a Reply