LoginSignup
1
5

More than 5 years have passed since last update.

springbootでslackボットを作ってみる

Last updated at Posted at 2019-04-20

目標

springbootでslackボットを使ったメッセージの送受信ができる!

ライブラリ

simpleslackapiというものがあるようなので使ってみる

https://mvnrepository.com/artifact/com.ullink.slack/simpleslackapi

Bot作成

ここでは割愛。。。
Botで使用するトークンが手元にある前提です

早速実装!

slackとの接続

SlackApiClient.java
import com.ullink.slack.simpleslackapi.SlackChannel;
import com.ullink.slack.simpleslackapi.SlackSession;
import com.ullink.slack.simpleslackapi.impl.SlackSessionFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class SlackApiClient {
    private SlackSession session;

    public SlackApiClient() throws Exception {
        // 生成したセッションをフィールドに保持しておく
        this.session = SlackSessionFactory.createWebSocketSlackSession("your slack bot token");
        session.connect();
    }
}

これだけ!

メッセージの送信機能

  • sessionからSlackChannelクラスを生成
    • 名前の通りslackのチャンネルと紐づいたクラス
  • メッセージ送信自体はSlackSession#sendMessag
SlackApiClient.java
import com.ullink.slack.simpleslackapi.SlackChannel;
import com.ullink.slack.simpleslackapi.SlackSession;
import com.ullink.slack.simpleslackapi.impl.SlackSessionFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class SlackApiClient {
    private SlackSession session;

    public SlackApiClient(ApplicationProperties applicationProperties) throws Exception {

        this.session = SlackSessionFactory.createWebSocketSlackSession(applicationProperties.getToken());
        session.connect();
    }

    // メッセージ送信
    public void sendMessage(String channel, String message) {
        SlackChannel slackChannel = session.findChannelByName(channel);
        return session.sendMessage(slackChannel, message);
    }
}

メッセージの受信機能

  • SlackSessionaddMessagePostedListenerというクラスがある
  • このメソッドにSlackMessagePostedListenerを登録すればOK!
  • 関数インタフェースになっているからここでは簡易的にラムダ式で実装
    • 受け取るのはSlackMessagePostedSlackSession
    • SlackMessagePostedの中にチャンネルとか送信者とかメッセージが入っている
SlackApiClient.java
import com.ullink.slack.simpleslackapi.SlackChannel;
import com.ullink.slack.simpleslackapi.SlackSession;
import com.ullink.slack.simpleslackapi.impl.SlackSessionFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class SlackApiClient {
    private SlackSession session;

    public SlackApiClient(ApplicationProperties applicationProperties) throws Exception {

        this.session = SlackSessionFactory.createWebSocketSlackSession(applicationProperties.getToken());
        session.connect();
        session.addMessagePostedListener(((event, slackSession) -> {
            // メッセージ受信時の処理
        }));
    }

    public Object sendMessage(String channel, String message) {
        SlackChannel slackChannel = session.findChannelByName(channel);
        return session.sendMessage(slackChannel, message);
    }
}

いったんここまで!

1
5
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
1
5