我正在尝试用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]
选择所选选项。