Skip to content

Commit 4208e78

Browse files
committed
fix(chatbot): possibilité d'utiliser une action "clic" sur un bouton de réponse, dans le paramètre "actions" dans l'URL pour initialiser le chatbot avec une série d'actions
1 parent 23a4c62 commit 4208e78

3 files changed

Lines changed: 41 additions & 6 deletions

File tree

app/js/core/chatbot/initialize.mjs

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { markdownToHTML } from "../../markdown/parser.mjs";
2-
import { createVector } from "../../utils/nlp.mjs";
2+
import { createVector, removeAccents } from "../../utils/nlp.mjs";
33
import { processMessageWithChoiceOptions } from "../interactions/helpers/choiceOptions.mjs";
44
import { createMessage } from "../messages/createMessage.mjs";
55
import { controlEvents } from "../interactions/controlEvents.mjs";
@@ -69,6 +69,8 @@ export function initializeChatbot(chatbotData, yaml, params) {
6969
},
7070
};
7171

72+
controlEvents(chatbot);
73+
7274
// On récupère le contenu du message initial
7375
const initialMessageContent = initialMessage.content
7476
.join("\n")
@@ -104,7 +106,7 @@ export function initializeChatbot(chatbotData, yaml, params) {
104106
const actionData = action.slice(separator + 1);
105107
const isLast = index === actions.length - 1;
106108

107-
// Si l'action consiste à entrer à un message dans la zone de texte
109+
// Si l'action consiste à entrer un message dans la zone de texte
108110
if (actionType == "e") {
109111
// On affiche ce message
110112
const userMessage = actionData;
@@ -118,8 +120,41 @@ export function initializeChatbot(chatbotData, yaml, params) {
118120
});
119121
}
120122
}
123+
124+
// Si l'action consiste à cliquer sur un bouton de réponse
125+
if (actionType == "c") {
126+
// On récupère les boutons de réponse
127+
const choiceOptions = document.querySelectorAll(".messageOptions li a");
128+
// On met la liste dans le sens inverse pour pouvoir chercher en premier dans les dernières options affichées
129+
const choiceArray = Array.from(choiceOptions).reverse();
130+
// On recherche le bouton de réponse (en partant des derniers) qui contient le contenu du texte à chercher
131+
// On fait la recherche sans prendre en compte les accents et les majuscules
132+
const actionDataNormalized = removeAccents(actionData.toLowerCase());
133+
const selectedChoiceOption = choiceArray.find((option) =>
134+
removeAccents(option.innerHTML.toLowerCase()).includes(
135+
actionDataNormalized,
136+
),
137+
);
138+
// Si on a trouvé un bouton de réponse qui correspond
139+
if (selectedChoiceOption) {
140+
// On récupère le message à afficher
141+
const messageToDisplay = selectedChoiceOption.innerHTML;
142+
// Et le message à envoyer au chatbot
143+
const messageToChatbot = selectedChoiceOption
144+
.getAttribute("href")
145+
.replace("#", "");
146+
// On affiche le message à afficher côté utilisateur
147+
createMessage(chatbot, messageToDisplay, { isUser: true });
148+
// On récupère puis affiche la répones du chatbot
149+
const response = getChatbotResponse(chatbot, messageToChatbot);
150+
if (response) {
151+
createMessage(chatbot, response, {
152+
isUser: false,
153+
disableTypewriter: !isLast,
154+
});
155+
}
156+
}
157+
}
121158
});
122159
}
123-
124-
controlEvents(chatbot);
125160
}

app/script.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/script.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)