C# で Slack に投稿する

いままで忘備録的に、twitter にメモを投稿していたのだけど、半年ほど独り slack に投稿するということをやっている。ツイッターの自分の投稿をググるのも大変というのもあり、仕事に関係するものを投稿して、逆に仕事自体を推測されるのもアレなので(そういアピールだったらいいんだけど、実際、そういうこともやるし)、手元のものは手元でやるということで。

で、せっかくのクローズドな独り slack なのだから、redmine への投稿も slack 経由でやったり、逆に新規のチケットがでてきたら slack のほうに投げ返したりしたらどうか?と思ったりする。

slack の場合、http://slack.com/apps に各種アプリケーションがアップしてあって(twitter の連携アプリのような感じか?)、直接 slack api を触れなくて、適当な連携アプリを探してくるのがベターだったりするみたい。

Incoming WebHooks を使う

そんな中で、Incoming WebHookを使って、C#でSlackに投稿してみる – なか日記 というのがあったので、Incomming WebHook を使ってみる。

Incoming WebHooks | Slack App Directory
https://slack.com/apps/A0F7XDUAZ-incoming-webhooks?page=1

image

  1. Add Configuration する
  2. 投稿先のチャンネルを選んで、Add Incoming WebHooks Integration する
  3. Webhook URL が作成されるので、これを自前アプリで使う。

なか日記さんのほうでは、WebClient が使われているので、HttpClient を使うように書き替えてみる。JSON を送るときの content-type は StringContent を作成するときに指定すれば ok. DynamicJson を使っているけど、Newtonsoft.Json でシリアライズしてもよい。

class Program
 {
     static string WEBHOOK_URL = “”;
    static void Main(string[] args)
     {
         var hc = new HttpClient();
         var json = DynamicJson.Serialize(new
         {
             text = args.Length == 0 ? 
                     DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"):
                     args[0],
             icon_emoji = ":ghost:", //アイコンを動的に変更する
            username = "slackpost"  //名前を動的に変更する
        });

        var content = new StringContent(json, Encoding.UTF8, "application/json");
        var res = hc.PostAsync(WEBHOOK_URL, content).Result;
        Console.WriteLine("投稿しました");
    }
}

ちなみに、WebHook URL を取得するときにチャンネルを指定するけど、登校時に JSON で channel プロパティを指定すれば、指定したチャンネルが使われるので、実質何処にでも投稿ができる。

詳しい解説は Incoming Webhooks | Slack にある。curl を使って post すればよいので、わざわざツールを作るまでもないんだけど、まあ、あれこれ複雑なオプションを外してしまった単発ツールをスクリプトで作ってもよいだろう。

逆にメッセージを監視するときは、Outgoing WebHookを使ってSlackのメッセージを監視する – なか日記 に Outgoing WebHooks の使い方がある…のだけど、別途 Web API を立てる必要がある。外部サーバーで何かをやる場合はこれでいいのだが、結局のところ手元なPCへ通知を出す場合が多いので、真面目に slack api を使ってメッセージをポーリングするのが良いかなと思ったり。message event | Slack このあたり。

カテゴリー: 開発, Slack パーマリンク