はじめに
前回の記事でC#からSlackにメッセージを送る方法を紹介しました。
しかし、現在は新しい方式での利用を推奨しているようなので、その方法を改めて紹介したいと思います。
Webhook URLを取得しメッセージをJson形式にまとめてPOSTするという流れは前回の記事とほぼ同じです。
Incoming WebHookを追加するところが変わりましたので画像多めで解説していきます。
準備
チャンネルの追加
デスクトップのSlackアプリからメッセージを送りたいチャンネルを追加します。
今回は[#webhook]とします。

Slack APIの準備
- Slack APIにアクセスして[Start Building]をクリックします。
- このような画面に移動すします。
- APPの名前を入力します。今回は[Incoming WebHooks]と入力し、[Create App]をクリックします。
- 左メニューの[Incoming WebHooks]を選択します。
- Activate Incoming WebHooksの右にあるトグルスイッチをONにします。
- スクロールして[Add New Webhook to Workspace]をクリックします。
- 投稿先のチャンネルを選択し[許可する]をクリックします。
- Webhook URLを取得します。[Copy]をクリックします。
- これで投稿したいチャンネルの[Webhook URL]が取得できました。
これを用いてプログラムの作成を行いたいと思います。
プログラム
一番シンプルなテキストのみを投稿する方法を紹介します。
.Net Core3.1のコンソールアプリケーションで検証しています。
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
class Program
{
static void Main(string[] args)
{
var url = "[Webhook URL]";
var payload = new Payload
{
text = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"),
};
Send(url, payload);
}
static void Send(string url, Payload payload)
{
var json = JsonSerializer.Serialize(payload);
var client = new HttpClient();
var content = new StringContent(json, Encoding.UTF8, "application/json");
var res = client.PostAsync(url, content).Result;
Console.WriteLine(res);
}
}
public class Payload
{
public string text { get; set; }
}
大まかな流れを紹介します。
- Webhook URLを設定
- 送信したい内容をJson形式にまとめる
- HttpClientクラスを使用してPOSTする
System.Text.Jsonに関して
- .NET Core 3.0以降の場合はデフォルトで導入されています。
- .NET Framework 4.6.1以降、.NET Core 2.0以降の場合はNuGetで導入できます。
2021/3/20追記
Slackへ送信するフックがSSL/TLSのセキュリティでエラーになると情報をいただきました。送信前に下記のコードを設定する必要があると情報をいただきました。感謝いたします。
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11| System.Net.SecurityProtocolType.Tls12;
動作確認
メッセージが無事送信できました。

アイコンと名前を設定する
Slack APIにアクセスして右上の[Your App]をクリックします。
次に[Incoming WebHooks]をクリックします。

下までスクロールするとApp Name, Short description, App icon, Background colorが設定できます。
右下の[Save Change]で設定が反映されます。

変更された様子

比較的簡単にSlackへの投稿が完了しました。
メッセージ以外にもプログラム側で設定できるようなので触る機会があれば紹介したいと思います。