なか日記

一度きりの人生、楽しく生きよう。

Incoming WebHookを使って、C#でSlackに投稿してみる

「ゆるふわ.rb in 大洲 〜作ってみよう Slack bot〜」に参加してきた - なか日記」の復習です。

ASP.NET MVCでSlackのスラッシュコマンドを作ってみる - なか日記」で「Incoming Webhooksについてはそのうち書くかも~」と書いてたので書きますね。

前回同様、誰得感はありますが気にしません。そして、コードをブログに貼り付けるのがなんだかエンジニア*1っぽくて嬉しいです。

Incoming WebHookとは

外部のアプリケーションから、Slackに投稿するための仕組みです。事前に設定して払い出されたURLに対して、JSON形式でメッセージをPOSTするとSlackに投稿されます。

作るもの

Slackに現在時刻を投稿するプログラムを作ってみたいと思います。

必要なもの

1.SlackのアカウントとIntegrationを追加できるチーム

これがないと始まりませんね。

今回は投稿するだけなので、「ASP.NET MVCでSlackのスラッシュコマンドを作ってみる - なか日記」の時のようにデプロイできる環境はいりません。

簡単にコンソールアプリを作ってみます。

Slackでの設定

https://slack.com/apps」を開きます。ここで、「Inco」って入力すると、「Incoming WebHook」というのが出てくるのでこれを選択します。

f:id:nakaji999:20160207044210p:plain

どこのチームにインストールするか聞かれますので、設定したいチームを選択(Installをクリック)します。

f:id:nakaji999:20160207044557p:plain

どのチャンネルに投稿するか聞かれますので適当なチャンネルを選択します。このチャンネルは後から変更することができますので、他の人の迷惑にならないチャンネル(テスト用とか)を選んでおきましょう。

f:id:nakaji999:20160207045040p:plain

次の設定画面ではIncoming WebHookの各種設定が行えます。英語で使い方も載ってますが、英語が分からなくても雰囲気である程度わかると思います。

f:id:nakaji999:20160207045543p:plain

ここに表示されている「Webhook URL」を控えておきましょう。

コンソールアプリケーションを作る

適当な名前でコンソールアプリケーションを作成します。

f:id:nakaji999:20160207050318p:plain

DynamicJsonのインストール

Slackに投稿するにはJSON形式でデータを送る必要があります。方法は色々ありますが、今回はDynamicJsonを使用します。

パッケージマネージャーコンソールで以下のコマンドを実行してDynamicJsonをインストールしておきます。

PM> install-package DynamicJson

コードを書く

    class Program
    {
        static string WEBHOOK_URL = "[設定画面のWebhook URL]";

        static void Main(string[] args)
        {
            var wc = new WebClient();

            var data = DynamicJson.Serialize(new
            {
                text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
                icon_emoji = ":ghost:", //アイコンを動的に変更する
                username = "投稿テスト用Bot"  //名前を動的に変更する
            });

            wc.Headers.Add(HttpRequestHeader.ContentType, "application/json;charset=UTF-8");
            wc.Encoding=Encoding.UTF8;


            wc.UploadString(WEBHOOK_URL, data);
        }
    }

textには投稿する文字をセットします。

icon_emoji や username を変更することで投稿した際のアイコンや名前を変更することもできます。

詳しいことはSlack公式の下記を見てもらえればと思います。

実行してみる

f:id:nakaji999:20160207061429p:plain

できた!

まとめ

ゆるふわ.rbでの復習はこれでおしまい。

通知を含め、いろいろ使い道がありそうですね。気の利いたのを思いつきませんが。。。

作成した Incoming WebHoos を Slack app として提供できそうなことが書かれていますので、「PVをSlackに投稿するサービス」なんてのも作れそうな気がします。

次はチャンネルに
 大丈夫でしょうか?
という投稿があったら、
 大丈夫だ。問題ない*2
って返すボットを作ってみたいですね。

その為には Bot Users を使う必要がある?Outgoing Webhooks でもいける?と全くわかっていませんが、結果が出たらまたブログに書いてみたいと思います。

おしまい。

*1:システムエンジニアじゃない

*2:おお、懐かしいな