Je souhaite créer un LINE BOT qui a quelque chose comme l'état de la conversation (contexte) côté serveur (comme une session d'application Web?) Et la réponse change en conséquence.
L'image ressemble à ceci.
L'analyse du langage naturel, le Deep Learning, le RNN, le chat BOT, etc. ne sont pas des histoires avancées.
J'ai décidé de créer une carte avec l'ID utilisateur comme clé et la classe qui recueille les valeurs à enregistrer comme valeur.
De plus, l'implémentation de la partie qui répond au message est sample-spring-boot-kitchensink Je me suis référé à (méthode replyText). Le langage est Java.
En fait, s'il existe une méthode de route plus royale (≒ bibliothèque, framework), merci de nous le faire savoir.
Status.java
public class Status {
private String context = "0";//statut
private String place = "";//endroit
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();
//Pour les nouveaux utilisateurs, saisissez une valeur dans la carte
if (Objects.isNull(PseudoSession.getStatus(userId))) {
PseudoSession.putStatus(userId, new Status());
}
if(PseudoSession.readContext(userId).equals("0")) {
if (text.equals("Dites-moi la météo")) {
this.replyText(replyToken,"Où est le temps?");
PseudoSession.updateContext(userId,"1");
} else {
this.replyText(replyToken,"Entrez "Dites-moi la météo"!");
}
}else if (PseudoSession.readContext(userId).equals("1")) {
if (!("Toyama".equals(text))&&!("Ishikawa".equals(text))) {
this.replyText(replyToken,"Je ne connais que Toyama ou Ishikawa");
} else {
this.replyText(replyToken,"Quel temps fait-il?");
PseudoSession.updatePlace(userId,text);
PseudoSession.updateContext(userId,"2");
}
}else if (PseudoSession.readContext(userId).equals("2")) {
if (!("aujourd'hui".equals(text))&&!("demain".equals(text))) {
this.replyText(
replyToken,"Je sais seulement aujourd'hui ou demain");
} else {
String answer = text + "de"
+ PseudoSession.readPlace(userId) + "de"
+ "Le temps est ensoleillé.";
this.replyText(replyToken,answer);
PseudoSession.updatePlace(userId,"");
PseudoSession.updateContext(userId,"0");
}
}
}
Recommended Posts