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.
Analyse natürlicher Sprache, Deep Learning, RNN, Chat BOT usw. sind keine fortgeschrittenen Geschichten.
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.
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;
}
}
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);
}
}
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");
}
}
}
Recommended Posts