gpt4 book ai didi

node.js - 对话更新事件未获取用户输入

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:55 24 4
gpt4 key购买 nike

当用户第一次连接时,我使用以下方法通过机器人提问。但是,在用户回答问题后,机器人不会进入下一步,而是进入新对话框。

这适用于模拟器,但不适用于直接 API。

bot.on('conversationUpdate', function (message) {
if (message.membersAdded) {
message.membersAdded.forEach(function (identity) {
if (identity.id === message.address.bot.id) {
bot.beginDialog(message.address, '/startConversation');
}
});
}
});

bot.dialog('/startConversation', [
function (session) {
builder.Prompts.text(session, 'I\'m the SPF VA Assistant. How may I address you?');
},
function (session, results) {
session.userData.name = results.response;
session.send('Hi, %s, Please choose one of the options below to lodge a Police report.', session.userData.name);
var cards = getReportsAsCards();
var reportOptions = new builder.Message(session)
.attachmentLayout(builder.AttachmentLayout.carousel)
.attachments(cards);
session.send(reportOptions).endDialog();
}
]);

最佳答案

发送问题“请选择以下选项之一...”后,您将调用 endDialog()。这就是导致它像您所说的那样进入新对话框的原因。

如果你想prompt the user for input ,使用Choice Prompt ,并在 waterfall 对话框中添加另一个步骤来处理用户的选择输入。

例如,要获取用户的姓名,请首先使用文本提示提出问题,然后在 waterfall 对话框的步骤 2 中处理用户的响应。用户的响应文本将在第 2 步的 results.response 对象中提供。

bot.dialog('greetings', [
// Step 1
function (session) {
builder.Prompts.text(session, 'Hi! What is your name?');
},
// Step 2
function (session, results) {
session.endDialog('Hello %s!', results.response);
}
]);

要提示用户进行一系列选择,请使用 waterfall 对话框与 builder.Prompts.choice() 调用相结合。例如:

var noiseComplaintName = "Noise Complaint";
var trashDumpingName = "Trash Dumping";
var weirdSmellName = "Weird Smell";
var trafficSignalName = "Traffic Signal";

var reportTypes = [
noiseComplaintName,
trashDumpingName,
weirdSmellName,
trafficSignalName
];

bot.dialog('pick-report-type', [
function(session) {
session.send('Choice prompt example:');

var promptOptions = {
listStyle: builder.ListStyle.button
};

builder.Prompts.choice(session, "What do you want to report?", reportTypes, promptOptions);
},
function (session, results) {
// handle response from choice prompt
var selectedReportType = results.response.entity;

switch (selectedReportType) {
case noiseComplaintName:
// handle response here
break;
case trashDumpingName:
// handle response here
break;
case weirdSmellName:
// handle response here
break;
case trafficSignalName:
// handle response here
break;
default
// handle response here
break;
}
}
]);

有关将提示与Rich Cards相结合的更详细示例,查看示例代码:BotBuilder-Samples/Node/cards-RichCards在 GitHub 上。

关于node.js - 对话更新事件未获取用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44996411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com