1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINE Messaging API SDKを使用せずにJavaでテキストリンクアクションを実装する方法

Posted at

メッセージ内のテキストをタップしてポストバックを実行する方法は、LINEの「テキストリンクアクション」を使用する

LINE Messaging API SDKを使用せずに、JavaでHTTP通信を直接行ってテキストリンクアクションを含むFlex Messageを送信する方法を説明します。この例では、Java標準のHTTPクライアントとJSONライブラリ(org.json)を使用します。

まず、必要なライブラリをプロジェクトに追加してください:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

以下は、テキストリンクアクションを含むFlex Messageを作成し、LINEのAPIエンドポイントに送信するJavaコードです:

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.json.JSONObject;
import org.json.JSONArray;

public class LineMessageSender {

    private static final String LINE_MESSAGING_API = "https://api.line.me/v2/bot/message/push";
    private static final String CHANNEL_ACCESS_TOKEN = "YOUR_CHANNEL_ACCESS_TOKEN";

    public static void sendTextLinkMessage(String userId) throws Exception {
        URL url = new URL(LINE_MESSAGING_API);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json");
        con.setRequestProperty("Authorization", "Bearer " + CHANNEL_ACCESS_TOKEN);
        con.setDoOutput(true);

        JSONObject flexMessage = createFlexMessage();
        JSONObject body = new JSONObject();
        body.put("to", userId);
        body.put("messages", new JSONArray().put(flexMessage));

        try(OutputStream os = con.getOutputStream()) {
            byte[] input = body.toString().getBytes(StandardCharsets.UTF_8);
            os.write(input, 0, input.length);
        }

        int responseCode = con.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        con.disconnect();
    }

    private static JSONObject createFlexMessage() {
        JSONObject flexMessage = new JSONObject();
        flexMessage.put("type", "flex");
        flexMessage.put("altText", "テキストリンクの例");

        JSONObject contents = new JSONObject();
        contents.put("type", "bubble");

        JSONObject body = new JSONObject();
        body.put("type", "box");
        body.put("layout", "vertical");

        JSONObject text = new JSONObject();
        text.put("type", "text");
        text.put("text", "ここをタップしてください");

        JSONObject action = new JSONObject();
        action.put("type", "postback");
        action.put("label", "ポストバック");
        action.put("data", "action=tapped");
        action.put("displayText", "テキストがタップされました");

        text.put("action", action);

        body.put("contents", new JSONArray().put(text));
        contents.put("body", body);
        flexMessage.put("contents", contents);

        return flexMessage;
    }

    public static void main(String[] args) {
        try {
            sendTextLinkMessage("USER_ID");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

このコードでは以下の主要な部分があります:

  1. createFlexMessage()メソッドで、テキストリンクアクションを含むFlex Messageを作成します。
  2. sendTextLinkMessage()メソッドで、作成したメッセージをLINE Messaging APIに送信します。
  3. HTTPリクエストのヘッダーにAuthorizationを設定し、Channel Access Tokenを指定します。
  4. リクエストボディにJSON形式でメッセージデータを設定します。

使用する際は、CHANNEL_ACCESS_TOKENを自分のチャンネルのアクセストークンに、USER_IDを送信先のユーザーIDに置き換えてください。

このコードを実行すると、指定したユーザーに対してテキストリンクを含むFlex Messageが送信されます。ユーザーがテキストをタップすると、"テキストがタップされました"というメッセージが表示され、同時に"action=tapped"というデータがサーバーに送信されます。


Perplexity の Eliot より: pplx.ai/share

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?