Interagir avec l'API de message LINE à l'aide de Lambda (Java)

Service utilisé

Environnement de développement, etc.

Objectif

Ce qui est omis dans cet article

procédure

  1. LINE Message API

  2. Ouvrez un compte

  3. Paramètre d'URL du Webhook

  4. AWS API Gateway

  5. Création de ressources

  6. Liez la ressource créée à la fonction Lambda

  7. Lambda Function

3.1. Créer une classe d'entrée pour recevoir JSON par POJO 3.2. Créer une classe de sortie 3.3 Récupérer le jeton de réponse et le texte de Input et stocker dans Output. En outre, les informations requises pour le message de réponse sont également définies. 3.4. Convertir la sortie en JSON 3.5. Générer et envoyer une demande 3.6. Code entier

3.1. Créer une classe d'entrée pour recevoir JSON par POJO

L'objet JSON suivant sera envoyé, créez donc la classe Input en conséquence.

{
  "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. Créer une classe de sortie

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 Récupérer le jeton de réponse et le texte de Input et stocker dans Output. En outre, les informations requises pour le message de réponse sont également définies.

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. Convertir la sortie en JSON

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

3.5. Générer et envoyer une demande

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. Code entier

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;
	}
	
}

Lien de référence

Recommended Posts

Interagir avec l'API de message LINE à l'aide de Lambda (Java)
Comment utiliser l'API Java avec des expressions lambda
Utiliser des couches Lambda avec Java
Utilisation de Mapper avec Java (Spring)
Gérez les exceptions avec fraîcheur avec les expressions lambda Java 8 et l'API Stream
Créer un SlackBot avec AWS lambda et API Gateway en Java
Expression lambda Java apprise avec Comparator
Exporter un problème à l'aide de l'API Java de JIRA
Essayez d'utiliser Redis avec Java (jar)
J'ai essayé d'interagir avec Java
J'ai essayé d'utiliser l'API Java8 Stream
Utilisation de Java avec AWS Lambda-Eclipse Préparation
Développement HTML5 par Java avec TeaVM
[Java] Intégration LINE avec Spring Boot
Utilisation du service proxy avec l'exploration Java
Exemple d'utilisation de l'API Bulk de Salesforce à partir d'un client Java avec PK-chunking
J'ai essayé d'utiliser l'API Elasticsearch en Java
Utilisation de Java avec des arguments CloudWatch AWS Lambda-Implementation-Check
Implémenter l'autorisation API Gateway Lambda dans Java Lambda
Traitement des données à l'aide de l'API de flux de Java 8
Intégration API de Java avec Jersey Client
Utilisation de Java avec AWS Lambda-Implementation-Stop / Launch EC2
Essayez d'utiliser l'API Stream en Java
Utilisation de JupyterLab + Java avec WSL sous Windows 10
De nos jours, les expressions Java Lambda et l'API de flux
Essayez d'utiliser l'API au format JSON en Java
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Développement de jeux avec deux personnes utilisant java 2
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
Développement de jeux avec deux personnes utilisant java 1
Lors de l'appel de l'API avec java, javax.net.ssl.SSLHandshakeException se produit
Gérez d'énormes JSON avec Java Lambda
Développement de jeux avec deux personnes utilisant java 3
Essayez d'utiliser la télécommande Wii en Java
Créer une API à l'aide de Retrofit2, Okhttp3 et Gson (Java)
ChatWork4j pour l'utilisation de l'API ChatWork en Java
[Java] Création d'API à l'aide de Jerjey (Jax-rs) avec eclipse
Comment utiliser le framework Java avec AWS Lambda! ??
Spécifiez ClassPath lors de l'utilisation de jupyter + Java avec WSL
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Rendre la ligne Java Stream agréable avec Eclipse
En utilisant Gradle avec VSCode, compilez Java → exécutez
[Java] Obtenez des images avec l'API Google Custom Search
Opérations de conteneur Docker avec l'API Docker-Client pour Java
Facile à créer LINE BOT avec Java Servlet
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
API Java Stream
Bonjour Java Lambda
[Java] Expression Lambda
Expression lambda Java
Utilisation de Java 8 avec Bluemix (sur Liberty Runtime & DevOps Service)
Prise en main des programmes Java à l'aide de Visual Studio Code
Comment déployer Java sur AWS Lambda avec Serverless Framework
[Java] Trier la liste à l'aide de flux et d'expressions lambda
Utiliser des expressions Java lambda en dehors de l'API Stream
Créer deux graphiques linéaires ou plus à l’aide de MPAndroidChart [Java]
Implémenter le client API avec juste des annotations à l'aide de Feign (OpenFeign)