0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#からSlackに投稿する

Posted at

はじめに

本記事では私がLRの機能開発をしながら学んだC#からSlackに投稿するやり方を整理したものです。結構簡単なので、よかったら参考にしてみてください!

使用するAPIについて

今回、SlackのIncoming WebhooksというAPIを使用します。これは外部サービスからSlackにメッセージを送信するための機能です。
この機能は外部からHTTPリクエストでメッセージを送っています。そのため、HTTP通信ができる言語・環境であれば使うことができます。(本記事ではC#を使って紹介しています。)
この機能を使用するためにはメッセージ送信先のURLを作成しておく必要があります。

Slackで送信先のURLを作成する

チャンネルの詳細のApp管理からAppディレクトリを表示しIncoming Webhooksを検索、 Slackに追加してください。次に、Post先のチャンネルを選択し、Incoming Webhooksインテグレーションの追加を行い、インテグレーションの設定欄にあるWebhook URLをコピーしておいてください。
このUrlを使って外部からチャンネルにメッセージをPostできます。(インテグレーションの設定欄でデフォルトで表示される名前、アイコンなどが設定できる)
こちらも参考にしてください。

プロジェクト側の準備

SlackにPostする情報はJson形式にシリアライズして送信するため、Jsonデータが扱えるようにNewtonsoft.JsonをNuGetからインストールしてください。

SlackにテキストをPostする

準備完了です。早速テキストを送信してみましょう。
まずは、Slackに送信するJsonデータの変換元となるペイロードクラスを作成しましょう。
今回は簡単に、送り主の名前と本文テキストを設定します。


   /// <summary>
	/// Slackに送信するjsonの変換元となるデータを保持するクラス
	/// 送信チャンネルはデフォルト
	/// </summary>
	public class SlackPayload
	{
		#region プロパティ

		/// <summary>
		/// ユーザ名
		/// </summary>
		public string username { get; set; }

		/// <summary>
		/// 本文
		/// </summary>
		public string text { get; set; }

		#endregion
	}  

それでは、SlackにPostするクラスを作成します。
HTTPリクエストを送信するためにHttpClientクラスを使用しますので、インスタンスを生成しておきます。 HttpClientは無闇に作成したり破棄したりするのではなく、Static宣言をして使いまわすのが良いみたいです。詳しくはこちら
送信したいテキストをJson形式にシリアライズします。作成したJsonパラメータをURLに変換し、WebhookURLにPostします。


	/// <summary>
	/// Slackに対してHttpリクエストの送信を行うクラス
	/// 送信先はデフォルトとして設定されたチャンネル
	/// </summary>
	class SlackNotificationService
	{
		#region 定数

		/// <summary>
		/// POST先のURL
		/// </summary>
		private const string c_PostUrl =
			"https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxx";

		/// <summary>
		/// ペイロード用のKey値
		/// JsonをUrlに変換する際に必要なデータをディクショナリに詰める必要がある。
		/// その際にペイロードの値はこのKey値で格納する。
		/// </summary>
		private const string c_PayloadKeyValue = "payload";

		#endregion

		#region フィールド

		/// <summary>
		/// SlackにPOSTするために使用するHttpClient
		/// </summary>
		private static HttpClient m_HttpClient = new HttpClient();

		#endregion

		#region 公開サービス

		/// <summary>
		/// HttpリクエストをPOSTする
		/// </summary>
		/// <param name="text"></param>
		/// <param name="username"></param>
		/// <returns></returns>
		public async Task<bool> Post(string text, string username)
		{
			// 送信パラメータを作成
			var slackPayload = new SlackPayload()
			{
				text = text,
				username = username
			};

			// 送信パラメータオブジェクトをJSONに変換
			var jsonSlackPayload = JsonConvert.SerializeObject(slackPayload);

			// Jsonの送信パラメータ情報をURLに変換
			var slackPayloadDictionary = new Dictionary<string, string>()
			{
				{c_PayloadKeyValue, jsonSlackPayload}
			};
			var urlParameter = new FormUrlEncodedContent(slackPayloadDictionary);

			var response = await m_HttpClient.PostAsync(c_PostUrl, urlParameter);

			return (response.StatusCode == HttpStatusCode.OK);
		}

		#endregion
	}
   

最後に、上記のPostメソッドを呼び出せば、Slackにテキストを送信することができます!

以上です。最後まで読んでいただき、ありがとうございました。

参考サイト

C#でSlackにPost

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?