Blow Up by Black Swan

slackの自動メッセージ送信機能、Incoming WebHooksの導入方法

今回は、slackのメッセージ送信機能、Incoming WebHooksを使ってみたので、その内容についてまとめてみたいと思います。基本的には、英語の公式ドキュメントに記載されている以下の2つのページを参考にしています。

まだ基本的な使い方をがくしゅうしたところですので、この記事でもターミナル上でcurlを用いてメッセージを送るところまでをまとめています。次は、プログラムコードに組み込むことを想定しているので、そのコードが完成したらまた改めて記事にしたいと思います。

私はプログラマーチームで働いていたわけではないので、slackについてはさほど馴染みがなかったのですが、今回の件を機に色々と調べてみたところ、その使い勝手や機能の拡張性などから、プログラマーやチーム開発で利用される理由を知ることができたと思います。

1. 今回の実装イメージ

今回の実装イメージは、ざっくりすると以下になります。

(事前にワークスペースにサインイン済み)
slack appの作成
-> imcoming webhookのインストール 
-> POSTでメッセージ送信

「ワークスペース」とは、一定のメンバーが利用するチャット場所で、LINEのグループチャットのようなイメージになります。ワークスペースが一つのチャット空間になっているため、ワークスペースにサインインするにはID(メールアドレス)とパスワードが必要です。

しかし、slackではその中にさらにテーマごとのチャットーページが構築され、テーマごとのチャットページの中で様々なチャットがなされます。このチャットイメージは、「チャンネル」と呼ばれています。私自身がここら辺をよく理解せず、なんとなく使っていたので、ここでまとめを書かせて頂きました。

2. slack appとは

このslackでボットや自動メッセージ機能などの付加的な機能を実装するために利用されるのが、「slack app」と呼ばれるもので、これによってワークスペースの機能性をより高めることができます。ここに今回利用するIncoming WebHooksのような様々な機能をインストールすることで、自由にカスタマイズし、ワークスペースの機能を拡張することができます。

3. slackのIncoming WebHooksとは

このslack appの中で利用できる機能の1つが「Incoming WebHooks」です。インストール時に決めたワークスペースの特定のチャンネルにメッセージを送ることができる機能です。より具体的に言うと、このIncoming WebHooksをslack appにインストールすると、特定のURLが割り振られ、そのURLにjsonデータをもつHTTPのPOSTリクエストを送ることで、そのチャンネルにメッセージが送られる、という流れになります。こういった処理は従来、APIなどを利用するイメージがありますが、slackではこのような機能を提供し、より簡単に機能の拡充をできるようにしています。

4. slackのIncoming WebHooksの導入方法

ここからはこのIncoming WebHooksの導入方法についての説明です。まず次ののURLに行き、slack appを構築します。

incoming webhook1
  • 「APP name」 -> 任意の名前
  • 「Development Slack Workspace」 -> 利用したワークスペース
incoming webhook2
  • 「Basic Information」 -> Incoming WebHooksを選択
incoming webhook3

右上のところにある「off」を「On」に切り替え、Incoming WebHookをアクティブにします。アクティブにすると、その下に新たな項目が現れます。

incoming webhook4

「Add New WebHook to Workspace」を選択します。

incoming webhook5
  • 「Post to」 -> メッセージを送りたいチャンネル

チャンネルを選択後、「Authorize」を選択します。

incoming webhook6

この画面が完了画面です。ここに載っているURLがPOSTリクエストを送るURLです。このURLを知っていれば、誰でもそのチャンネルにメッセージを投稿できるため、チームメンバーなどの特定の人以外への拡散はしない方が良いです。また、curlで「Hello World」を送るコマンドの表示例が載っています。

5. slackのIncoming WebHooksを使ってメッセージを送信してみる

上記で載っていた、curlコマンドを実際に試してみます。

$ curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' YOUR_WEBHOOK_URL

「YOUR_WEBHOOK_URL」の部分に該当のURLが入ります。これをターミナルのコマンドで実行することで、「Hello World!」が指定したチャンネルに送られますので、試してみてください。

6. 最後に

以上がslack appのIncoming WebHooksを用いたメッセージ投稿機能の使い方です。次回は、これを拡張してエラー発生時などに自身のslackワークスペースにメッセージが行くような応用をしてみたいと思います。

と、一通りブログ記事を書いた後に知ったのですが、slack appは自身やチーム用にカスタマイズしたappを作るときに利用されるもので、一方で今回のようにIncoming WebHooksの機能だけ使いたい場合は、Workspaceのアプリケーション追加からIncoming WebHooksのappを入手することができます。メッセージの送り方は同じなので、Incoming WebHooksだけを使いたい場合は、上記の方法だと遠回りにあるようです。。。

読んで頂いた方、どうもありがとうございました。