当用户第一次连接时,我使用以下方法通过bot询问问题。但是在用户回答问题后,而不是进入下一步,bot会转到新的对话框。
这适用于模拟器,但不适用于directline api。
.footer
{
position: fixed;
bottom: 0;
left: 0;
display: none;
width: 100%;
height: 200px;
text-align: center;
z-index: 999;
}
答案 0 :(得分:0)
发送问题"请选择以下选项之一..."你打电话给endDialog()
。这就是导致它像你说的那样进入新对话框的原因。
如果您想要prompt the user for input,请使用Choice Prompt,然后在瀑布式对话框中添加另一个步骤来处理用户的选择输入。
例如,要获取用户名,首先使用文本提示询问问题,然后在瀑布对话框的第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);
}
]);
要通过一系列选项提示用户,请使用瀑布式对话框并结合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结合使用的更详细示例,请在GitHub上查看示例代码:BotBuilder-Samples/Node/cards-RichCards。