JavaからSlackに任意のメッセージを送る方法

こんにちは。 エキサイト株式会社の三浦です。

仕事やプライベートでSlackを使っている方も多いと思いますが、使っていく中で、「一定の条件下で自動的にメッセージを送信してほしい」と考えることもあるのではないでしょうか。

幸いSlackには、それを実現するための方法が用意されています。

今回は、Java・Spring Bootを使ってSlackにメッセージを送る方法を紹介します。

全体の流れ

JavaからSlackにメッセージを送るためには、以下の手順が必要になってきます。

  1. Slackのアプリを作成し、自動送信に使うためのトークンを発行する
  2. Javaで、Slackへのメッセージ送信用のライブラリをインストールする
  3. 発行したトークンとインストールしたライブラリを使って、メッセージ送信用のコードを作成・実行する

一つずつ見ていきましょう。

Slackのアプリを作成し、自動送信に使うためのトークンを発行する

Slackに、コードなどから自動的にメッセージを送信するためには、Slack側が発行したトークンを用いる必要があります。

これは、トークン等なしに自由にメッセージを送信できてしまうと、悪用される恐れがあるからだと思われます。

アプリの作り方については以前以下の記事にまとめたので、こちらを御覧ください。

tech.excite.co.jp

注意点としては、この記事では

なお、 Incoming Webhooks でもSlackにメッセージを送信することはできますが、ファイルの送信はできないようです。 メッセージの送信だけなら構いませんが、もしファイルも送信したいのであれば、 Incoming Webhooks は選ばないようにしてください。

と書いていますが、今回のようにJavaから送信する場合は、メッセージの送信がしたいだけでも Incoming Webhooks ではできません。

Permissions から設定する方を行ってください。

記事の設定が完了していれば、 OAuth & Permissions メニュー内の Bot User OAuth Token 欄にトークンが表示されているはずです。

今回はそれを使用します。

Javaで、Slackへのメッセージ送信用のライブラリをインストールする

トークンが発行できたら、次はJavaからのSlackへの送信を簡単にするため、公式で公開されているライブラリをインストールします。

Gradleを使用している場合は、 build.gradle に以下のように設定すれば問題ありません。

// ..

dependencies {
        implementation "com.slack.api:slack-api-client:1.27.3" // バージョンは適宜変更してください
}

// ...

発行したトークンとインストールしたライブラリを使って、メッセージ送信用のコードを作成・実行する

最後に、これまで準備してきたものを使って実際にメッセージを送信してみます。

やり方は非常に簡単で、以下のコードを実行するだけです。

try {
        Slack
                .getInstance()
                .methods("発行されたトークン")
                .chatPostMessage(req -> req
                        .channel("送信先チャンネル")
                        .text("テスト通知")
                );
 } catch (Exception e) {
        System.out.println(e.getMessage());
}

実行すると、以下のメッセージが表示されます。

送信されたメッセージ

これで、簡単なメッセージであればJavaで送信できるようになりました!

最後に

特定の何かが起きたときの通知やエラーの警告など、Slackにプログラマチックにメッセージを送りたい場面は少なくないでしょう。

この記事が、そういった場面で助けになれば幸いです。