[JAVA] Verwaltung des Gesprächsstatus (Kontext) (Sitzungsverwaltung?) Mit LINE BOT

Was du machen willst

Ich möchte einen LINE BOT erstellen, der auf der Serverseite so etwas wie einen Konversationsstatus (Kontext) hat (wie eine Web-App-Sitzung?). Die Antwort ändert sich entsprechend.

Das Bild sieht so aus. image.png

Analyse natürlicher Sprache, Deep Learning, RNN, Chat BOT usw. sind keine fortgeschrittenen Geschichten.

Realisierungsmethode

Ich habe beschlossen, eine Karte mit der Benutzer-ID als Schlüssel und der Klasse zu erstellen, die die zu speichernden Werte als Wert sammelt.

Darüber hinaus lautet die Implementierung des Teils, der auf die Nachricht antwortet, sample-spring-boot-kitchensink. Ich bezog mich auf (replyText-Methode). Die Sprache ist Java.

In der Tat, wenn es eine königliche Straßenmethode gibt (≒ Bibliothek, Framework), lassen Sie es uns bitte wissen.

Klasse zum Speichern des Status

Status.java


public class Status {

	private String context = "0";//Status
	private String place = "";//Ort

	public String getContext() {
		return context;
	}
	public void setContext(String context) {
		this.context = context;
	}

	public String getPlace() {
		return place;
	}
	public void setPlace(String place) {
		this.place = place;
	}

}

Karte

PseudoSession.java


public class PseudoSession {

	private static Map<String,Status> statusMap = new HashMap<>();

	public static Status getStatus(String userId) {
		return PseudoSession.statusMap.get(userId);
	}

	public static void putStatus(String userId, Status status) {
		PseudoSession.statusMap.put(userId, status);
	}

	public static String readContext(String userId) {
		return PseudoSession.statusMap.get(userId).getContext();
	}

	public static String readPlace(String userId) {
		return PseudoSession.statusMap.get(userId).getPlace();
	}

	public static void updateContext(String userId, String context) {
		Status newStatus = PseudoSession.statusMap.get(userId);
		newStatus.setContext(context);
		PseudoSession.statusMap.put(userId, newStatus);
	}

	public static void updatePlace(String userId, String place) {
		Status newStatus = PseudoSession.statusMap.get(userId);
		newStatus.setPlace(place);
		PseudoSession.statusMap.put(userId, newStatus);
	}

}

Hauptverarbeitung

Controller.java


	private void handleTextContent(String replyToken, Event event, TextMessageContent content)
			throws Exception {
		final String text = content.getText();
		final String userId = event.getSource().getUserId();

        //Geben Sie für Erstbenutzer einen Wert in die Karte ein
		if (Objects.isNull(PseudoSession.getStatus(userId))) {
			PseudoSession.putStatus(userId, new Status());
		}

		if(PseudoSession.readContext(userId).equals("0")) {

			if (text.equals("Sag mir das Wetter")) {
				this.replyText(replyToken,"Wo ist das Wetter?");
				PseudoSession.updateContext(userId,"1");
			} else {
				this.replyText(replyToken,"Geben Sie "Sag mir das Wetter"!");
			}

		}else if (PseudoSession.readContext(userId).equals("1")) {

			if (!("Toyama".equals(text))&&!("Ishikawa".equals(text))) {
				this.replyText(replyToken,"Ich kenne nur Toyama oder Ishikawa");
			} else {
				this.replyText(replyToken,"Wann ist das wetter");
				PseudoSession.updatePlace(userId,text);
				PseudoSession.updateContext(userId,"2");
			}

		}else if (PseudoSession.readContext(userId).equals("2")) {

			if (!("heute".equals(text))&&!("Morgen".equals(text))) {
				this.replyText(
						replyToken,"Ich weiß es nur heute oder morgen");
			} else {
				String answer = text + "von"
						+ PseudoSession.readPlace(userId) + "von"
						+ "Das Wetter ist sonnig.";
				this.replyText(replyToken,answer);
				PseudoSession.updatePlace(userId,"");
				PseudoSession.updateContext(userId,"0");
			}
		}
	}

Ergebnis

image.png

Recommended Posts

Verwaltung des Gesprächsstatus (Kontext) (Sitzungsverwaltung?) Mit LINE BOT
[Schienen] Getriebe mit LINE Bot schieben
Linienbot
Ich habe einen LINE Bot mit Rails + Heroku gemacht
Einfacher LINE BOT mit Java Servlet
Stellen Sie Line Bot mit Rails5 + Docker + Heroku Note bereit
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1