如何使用嵌套数组制作聊天机器人,根据您的响应发送消息



我正在尝试用JavaScript制作一个简单的聊天机器人,它可以根据用户的输入通过输入字段发送消息。如果机器人识别出用户的正确响应,我如何使其将对话移动到下一个数组?

例如,如果您用pizza进行响应,它将继续使用story2。但如果你用salads来回应,它会选择story3

对话应该是线性的,所以如果你在story1时用medium回应,你就不能突然跳到story4

var story1 = [
{ m: 'Hello!'},
{ m: 'Should I eat pizza or salads?'}, 
{ options: [
{ response: 'pizza', next: story2},
{ response: 'salads', next: story3},
]},
];
var story2 = [
{ m: 'Pizza it is!'},
{ m: 'What size pizza do you want?'},
{ options: [
{ response: 'medium', next: story4},
{ response: 'large', next: story5},
]},
];
var story3 = [
{ m: 'Salad it is!'},
];
var story4 = [
{ m: 'Ok! Medium pizza!'},
];
var story5 = [
{ m: 'Ok! Large pizza!'},
];

我认为使用对象将比数组更容易。。。试试这个


const response = userAnswer;

你会这样检索:obj[response].m或你想要的


const obj = {
pizza: {
key: 'story1,'
m: 'Should I eat pizza or salads?', 
options: [
{response: 'pizza', next: story2},
{response: 'salads', next: story3},
],
},
salads: {
key: 'story3',
m: 'Salad it is!',
}
}

也许是这样的:

const step = 0
const stories = [
story1,
story2,
story3,
...
]
function triggerStepAction(e) {
const currentStory = stories[step];
const userInput = e.value;
// Compare user input to possible responses
// Trigger matching response and set step to next key story index
}

您的消息结构可以进一步简化,以更好地匹配该方法。例如;bot消息";在一组消息中,将options键添加到对象的顶层,并使故事成为对象,如下所示:

const story = {
messages: ['Hello!'],
options: {
"pizza": 2,
"salads": 3 // Index of next story
}
}

这样,您可以通过循环messages数组轻松打印出消息,并使用currentStory.options[userInput]选择所选选项。

最新更新