JAVAでLINEのプッシュメッセージを送る

JavaでLINEのプッシュメッセージを送る簡単なサンプルを作りました。

推奨としてはLINE公式サイトにある「Java SDK for Messaging API BOT」のLineMessagingClientを利用になります。

上記を設定するのは面倒くさいので、推奨していない方法でLINE Messaging APIを利用してメッセージを送ります。(非推奨ではない、と思っています)

 

今回は細かい説明は省略します。

 

前提

・LINE Developerでテスト用のチャネルを作成済

・そのチャネルで友だち追加済

・LINEメッセージ送信に必要な情報を入手済

 ⇒ チャネルアクセストークンとユーザーID

Javaの開発環境でLombok、jacksonは設定済

・LINE Messaging APIは以下を利用する

 https://api.line.me/v2/bot/message/push

 

ソース

①LINEメッセージを送信するクラス

public class LineMsgSample {

// LINEプッシュメッセージAPIURL
private static final String LINE_MSG_API_URL = "https://api.line.me/v2/bot/message/push";
// LINEプッシュメッセージ送信タイプ
private static final String LINE_MSG_TYPE_TEXT = "text";

/**
 * LINEメッセージを送信する。
 *
 * @throws AppRuntimeException
 */
public void sendLineMsg() {

	// 送信先のユーザーID
	String userId = "U00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
	// チャネルアクセストークン
	String accessToken = "rWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
	// 送信するメッセージ
	String lineMsg = "メッセージを送信しました。";

	try {
		// HttpClientを生成
		HttpClient client = HttpClient.newBuilder()
			.connectTimeout(Duration.ofSeconds(10L)) // 接続タイムアウト(10秒)
			.build();

		// LINEメッセージをJSONに変換
		String sendJson = setJsonString(userId, lineMsg);

		// ビルダーを使用してHttpRequestを生成
		HttpRequest request = HttpRequest.newBuilder()
			.timeout(Duration.ofSeconds(10L))	 // 応答タイムアウト(10秒)
			.uri(URI.create(LINE_MSG_API_URL))	 // 送信先を設定
			.POST(BodyPublishers.ofString(sendJson)) // POST送信でJSON文字列をBodyに設定
			.setHeader("Content-Type", "application/json; charset=UTF-8")
			.setHeader("Authorization", "Bearer " + accessToken)
			.build();

		// LINEメッセージリクエストを送信
		HttpResponse response =client.send(request, BodyHandlers.ofString());

		// LINEAPIのステータスコード取得
		int statusCode = response.statusCode();

		// ステータスコードの判定は省略(200以外はエラー)

	} catch (Exception e) {
		// 例外処理を入れる
	}
}

/**
 * LINE送信メッセージをJSONに変換する
 *
 * @param userId ユーザーID
 * @param lineMsg 送信するメッセージ
 * @return LINE送信メッセージ(JSON形式)
 * @throws JsonProcessingException
 */
private String setJsonString(String userId, String msg) throws JsonProcessingException
{
	// Beanにデータを設定
	LineMsgObjBean lineMsgobj = new LineMsgObjBean(LINE_MSG_TYPE_TEXT, msg);
	List lineMsgObjList = new ArrayList<>();
	lineMsgObjList.add(lineMsgobj);
	LinePushMsgMainBean linePushMsgMain = new LinePushMsgMainBean(userId, lineMsgObjList);

	// JSONに変換
	String sendJson = new ObjectMapper().writeValueAsString(linePushMsgMain);

	return sendJson;
}

}

 

②LINEプッシュメッセージのメインBean(JSON変換用)

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"to", "messages"})
public class LinePushMsgMainBean {
	/** 送信先のID */
	@JsonProperty("to")
	private String userId;

	/** LINEメッセージオブジェクト */
	@JsonProperty("messages")
	private List lineMsgObjList;
}

 

③LINEメッセージオブジェクトBean(JSON変換用)

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"type", "text"})
public class LineMsgObjBean {
	/** メッセージタイプ */
	private String type;

	/** 送信するメッセージ */
	@JsonProperty("text")
	private String lineMsg;
}


結果

LINEのトーク上の送信されたプッシュメッセージ

 

以上になります。

今回はテキストのみ対応のメッセージとなります。

初めて送信できたときは少し嬉しくなりました♪