忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12

Slack の Bot に標準ライブラリだけで Java から発言させる

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Slack の Bot に標準ライブラリだけで Java から発言させる

Webhock だけでもアレなので Bot に発言をさせてみようとする。Slack Bot の token は次のような形式である。
xoxb-000000000000-000000000000-17afdxySLsIgJkUMu0eJHGMq

Bot は Slack api の Your Apps のページから作る。Add features and functionality から Bots を設定し、 OAuth & Permissions から token を取得する。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class SlackTokenNotificationClient {
	private final String token;
	private final String userName;
	public SlackTokenNotificationClient (String token, String userName) {
		this.token = token;
		this.userName = userName;
	}
	public void sendNotify(String message, String channelName) throws IOException {
		HttpURLConnection con = null;
		try {
			String baseUrl = String.format("https://slack.com/api/chat.postMessage?token=%s&channel=%s&text=%s&username=%s",
					token,
					channelName,
					URLEncoder.encode(message.replaceAll(" ", "%20"), "UTF-8").replaceAll("%2520", "%20").replaceAll("%7E", "~"),
					URLEncoder.encode(userName.replaceAll(" ", "%20"), "UTF-8").replaceAll("%2520", "%20").replaceAll("%7E", "~")
				);
			URL url = new URL(baseUrl);
			con = (HttpURLConnection) url.openConnection();
			con.setDoOutput(true);
			con.setRequestMethod("GET");
			con.getOutputStream();
			if(con.getResponseCode() != HttpURLConnection.HTTP_OK) {
				StringBuilder sb = new StringBuilder();
				try(InputStream is = con.getInputStream()) {
					String encoding = con.getContentEncoding();
					if( encoding == null ) {
						encoding = "UTF-8";
					}
					try(	InputStreamReader isReader = new InputStreamReader(is, encoding);
							BufferedReader bufReader = new BufferedReader(isReader); ) {
						String line = null;
						while((line = bufReader.readLine()) != null) {
							sb.append(line);
						}
					}
				}
				throw new IOException("Failed to access :" + con.getResponseCode() + " / Result: " + sb.toString());
			}
		} catch (IOException ioe) {
			throw ioe;
		}
	}
}
SlackTokenNotificationClient client = new SlackTokenNotificationClient (
    // 上述の手順で取得した token
    "xoxb-000000000000-000000000000-17afdxySLsIgJkUMu0eJHGMq",
    // 発言する名前
    "My Notification Bot" );

// 第二引数は発言するチャネル
client.sendNotify("発言だよー発言だよー", "notification");
PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R