Interagieren Sie mit der LINE Message API mit Lambda (Java)

Service verwendet

Entwicklungsumgebung usw.

Zweck

Was in diesem Artikel weggelassen wird

Verfahren

  1. LINE Message API

  2. Eröffnen Sie ein Konto

  3. Webhook-URL-Einstellung

  4. AWS API Gateway

  5. Ressourcenerstellung

  6. Verknüpfen Sie die erstellte Ressource mit der Lambda-Funktion

  7. Lambda Function

3.1 Erstellen Sie eine Eingabeklasse, um JSON von POJO zu empfangen 3.2. Ausgabeklasse erstellen 3.3. ReplyToken und Text von Input abrufen und in Output speichern. Außerdem werden die für die Antwortnachricht erforderlichen Informationen festgelegt. 3.4. Konvertieren Sie die Ausgabe in JSON 3.5 Generieren und senden Sie eine Anfrage 3.6. Ganzer Code

3.1 Erstellen Sie eine Eingabeklasse, um JSON von POJO zu empfangen

Das folgende JSON-Objekt wird gesendet. Erstellen Sie daher die Eingabeklasse entsprechend.

{
  "events": [
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "message",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U206d25c2ea6bd87c17655609a1c37cb8"
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "Hello, world"
      }
    },
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "follow",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U206d25c2ea6bd87c17655609a1c37cb8"
      }
    }
  ]
}

Input.java


package jp.linebot;

import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Input {
	
	private Events[] events;
	
}

Events.java


package jp.linebot;

import org.joda.time.DateTime;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Events {
	private String replyToken;
	private String type;
	private Long timestamp;
	private Source source;
	private Message message;	
}

Source.java


package jp.linebot;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Source {
	private String type;
	private String userId;
}

Message.java


package jp.linebot;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {
	private String id;
	private String type;
	private String text;	
}

3.2. Ausgabeklasse erstellen

Output.java


package jp.linebot;

import java.util.ArrayList;
import java.util.List;

import lombok.Data;

@Data
public class Output {

	private String replyToken;
	private List<Messages> messages = new ArrayList<>();
}

Messages.java


package jp.linebot;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Messages {

	private String type;
	private String text;
}

3.3. ReplyToken und Text von Input abrufen und in Output speichern. Außerdem werden die für die Antwortnachricht erforderlichen Informationen festgelegt.

Output output = new Output();
output.setReplyToken(input.getEvents()[0].getReplyToken());
Messages outMessage = new Messages();
outMessage.setType("text");
outMessage.setText(input.getEvents()[0].getMessage().getText() + "?");
output.getMessages().add(outMessage);

3.4. Konvertieren Sie die Ausgabe in JSON

Gson gson = new Gson();
context.getLogger().log(gson.toJson(output));

3.5 Generieren und senden Sie eine Anfrage

httpPost = new HttpPost("https://api.line.me/v2/bot/message/reply");
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Authorization", "Bearer " + "{Channel Access Token}");
StringEntity entity = new StringEntity(gson.toJson(output), StandardCharsets.UTF_8);
httpPost.setEntity(entity);

try (CloseableHttpClient client = HttpClients.createDefault();
     CloseableHttpResponse resp = client.execute(httpPost);
     BufferedReader br = new BufferedReader(new InputStreamReader(resp.getEntity().getContent(), StandardCharsets.UTF_8)))
{
        int statusCode = resp.getStatusLine().getStatusCode();
        switch (statusCode) {
        case 200:
            br.readLine();
            break;
        default:
        }
    } catch (final ClientProtocolException e) {
    } catch (final IOException e) {
}
return null;

3.6. Ganzer Code

LambdaFunctionHandler.java


package jp.linebot;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.google.gson.Gson;

public class LambdaFunctionHandler implements RequestHandler<Input, Object> {

	@Override
	public Object handleRequest(Input input, Context context) {
		// TODO Auto-generated method stub

		context.getLogger().log("token : " + input.getEvents()[0].getReplyToken());
		context.getLogger().log("text : " + input.getEvents()[0].getMessage().getText());
		
		Output output = new Output();
		output.setReplyToken(input.getEvents()[0].getReplyToken());
		Messages outMessage = new Messages();
		outMessage.setType("text");
		outMessage.setText(input.getEvents()[0].getMessage().getText() + "?");
		output.getMessages().add(outMessage);

		HttpPost httpPost = new HttpPost("https://api.line.me/v2/bot/message/reply");
		httpPost.setHeader("Content-Type", "application/json");
		httpPost.setHeader("Authorization", "Bearer " + "{Channel Access Token}");

		Gson gson = new Gson();
		context.getLogger().log(gson.toJson(output));
		StringEntity entity = new StringEntity(gson.toJson(output), StandardCharsets.UTF_8);
		httpPost.setEntity(entity);
		try (CloseableHttpClient client = HttpClients.createDefault();
                CloseableHttpResponse resp = client.execute(httpPost);
                BufferedReader br = new BufferedReader(new InputStreamReader(resp.getEntity().getContent(), StandardCharsets.UTF_8)))
        {
            int statusCode = resp.getStatusLine().getStatusCode();
            switch (statusCode) {
            case 200:
                br.readLine();
                break;
            default:
            }
        } catch (final ClientProtocolException e) {
        } catch (final IOException e) {
        }
		return null;
	}
	
}

Referenzlink

Recommended Posts

Interagieren Sie mit der LINE Message API mit Lambda (Java)
Verwendung der Java-API mit Lambda-Ausdrücken
Verwenden Sie Lambda-Ebenen mit Java
Verwenden von Mapper mit Java (Spring)
Behandeln Sie Ausnahmen kühl mit Java 8-Lambda-Ausdrücken und der Stream-API
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
Exportieren Sie ein Problem mithilfe der Java-API von JIRA
Versuchen Sie es mit Redis mit Java (jar)
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Java8 Stream API zu verwenden
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
HTML5-Entwicklung von Java mit TeaVM
[Java] LINE-Integration mit Spring Boot
Verwenden des Proxy-Dienstes mit Java-Crawling
Beispiel für die Verwendung der Bulk-API von Salesforce vom Java-Client mit PK-Chunking
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Verwenden von Java mit AWS Lambda-Implementation-Check CloudWatch-Argumenten
Implementieren Sie API Gateway Lambda Authorizer in Java Lambda
Datenverarbeitung mit der Stream-API von Java 8
API-Integration von Java mit Jersey Client
Verwenden von Java mit AWS Lambda-Implementierung-Stop / Launch EC2
Versuchen Sie es mit der Stream-API in Java
Verwenden von JupyterLab + Java mit WSL unter Windows 10
Heutzutage Java Lambda Expressions und Stream API
Versuchen Sie es mit der JSON-Format-API in Java
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Spieleentwicklung mit zwei Personen mit Java 2
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Spieleentwicklung mit zwei Personen mit Java 1
Beim Aufrufen der API mit Java tritt eine javax.net.ssl.SSLHandshakeException auf
Behandeln Sie große JSON mit Java Lambda
Spieleentwicklung mit zwei Personen mit Java 3
Versuchen Sie es mit der Wii-Fernbedienung in Java
Erstellen Sie eine API mit Retrofit2, Okhttp3 und Gson (Java).
ChatWork4j für die Verwendung der ChatWork-API in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse
Verwendung des Java-Frameworks mit AWS Lambda! ??
Geben Sie ClassPath an, wenn Sie jupyter + Java mit WSL verwenden
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Machen Sie Java Stream Zeilenumbrüche mit Eclipse schön
Erstellen Sie mit Gradle mit VSCode Java → Ausführen
[Java] Holen Sie sich Bilder mit der Google Custom Search API
Docker Container Operations mit Docker-Client API für Java
Einfacher LINE BOT mit Java Servlet
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Java Stream API
Hallo Java Lambda
[Java] Lambda-Ausdruck
Java Lambda Ausdruck
Verwenden von Java 8 mit Bluemix (auf Liberty Runtime & DevOps Service)
Erste Schritte mit Java-Programmen mit Visual Studio Code
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[Java] Sortieren Sie die Liste mit Streams und Lambda-Ausdrücken
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Erstellen Sie zwei oder mehr Liniendiagramme mit MPAndroidChart [Java]
Implementieren Sie den API-Client mit nur Anmerkungen unter Verwendung von Feign (OpenFeign).