目標
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);
}
}
メッセージの受信機能
-
SlackSession
にaddMessagePostedListener
というクラスがある - このメソッドに
SlackMessagePostedListener
を登録すればOK! - 関数インタフェースになっているからここでは簡易的にラムダ式で実装
- 受け取るのは
SlackMessagePosted
とSlackSession
-
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);
}
}
いったんここまで!