JavaでLINEのプッシュメッセージを送る簡単なサンプルを作りました。
推奨としてはLINE公式サイトにある「Java SDK for Messaging API BOT」のLineMessagingClientを利用になります。
上記を設定するのは面倒くさいので、推奨していない方法でLINE Messaging APIを利用してメッセージを送ります。(非推奨ではない、と思っています)
今回は細かい説明は省略します。
前提
・LINE Developerでテスト用のチャネルを作成済
・そのチャネルで友だち追加済
・LINEメッセージ送信に必要な情報を入手済
⇒ チャネルアクセストークンとユーザーID
・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メッセージリクエストを送信 HttpResponseresponse =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 ListlineMsgObjList; }
③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のトーク上の送信されたプッシュメッセージ
以上になります。
今回はテキストのみ対応のメッセージとなります。
初めて送信できたときは少し嬉しくなりました♪