在Microsoft Bot Framework中,我已经开始进行对话并正在运行一些意图,例如说“登录”,但是当我向用户询问用户名或密码时,他可能会说“取消”或“取消登录”,我如何获得这个意图:“取消”,以及如何通过取消当前对话框来处理它?</ p>
// Login Dialog
bot.dialog('login', [
(session:Builder.Session) => {
Builder.Prompts.text(session, 'What\'s your account email?');
},
(session:Builder.Session, results: any) => {
session.dialogData.email = results.response;
Builder.Prompts.text(session, 'What\'s your password?');
},
(session:Builder.Session, results: any) => {
session.dialogData.passWord = results.response;
CheckAccountLogin(session, session.dialogData.email,session.dialogData.passWord)
.then((result:boolean)=>{
if(result === true){
session.send('Login Successful');
session.userData.loginSuccessful = true;
session.userData.email = session.dialogData.email;
}else{
session.userData.loginSuccessful = false;
}
session.endDialog();
});
},
]);
答案 0 :(得分:1)
您基本上可以注册一个CancelIntent
识别器,该识别器将使对话转发您想要的对话框,然后触发该对话框。例如:
bot.recognizer(new builder.RegExpRecognizer(
"CancelIntent",
{ en_us: /^(cancel|nevermind)/i, ja_jp: /^(キャンセル)/ })
);
这使用一个正则表达式来检测用户何时想要取消,并且取消当前对话框的一种方法就是结束对话:
bot.dialog('CancelDialog', function (session) {
session.endConversation("Ok, cancelling loggin.");
}).triggerAction({ matches: 'CancelIntent' });
请注意,上面的代码告诉bot框架结束对话,因此登录对话框将结束,从而取消操作。
以下也是一些有用的示例:https://github.com/Microsoft/BotBuilder-Samples/blob/master/Node/intelligence-LUIS/app.js
修改
要设置Luis意向识别器,您首先需要删除以前注册的RegexRecognizer,然后通过执行以下操作来创建LuisRecognizer的新实例:
// Make sure you add code to validate these fields
var luisAppId = process.env.LuisAppId;
var luisAPIKey = process.env.LuisAPIKey;
var luisAPIHostName = process.env.LuisAPIHostName || 'westus.api.cognitive.microsoft.com';
const LuisModelUrl = 'https://' + luisAPIHostName + '/luis/v2.0/apps/' + luisAppId + '?subscription-key=' + luisAPIKey;
// Create a recognizer that gets intents from LUIS, and add it to the bot
var recognizer = new builder.LuisRecognizer(LuisModelUrl);
然后使用以下命令注册Luis识别器:
bot.recognizer(recognizer);
您的CancelDialog应该看起来一样,它将与triggerAction.matches
相匹配:
bot.dialog('CancelDialog', function (session) {
session.endConversation("Ok, cancelling loggin.");
}).triggerAction({ matches: 'CancelIntent' });
设置完成后,在Luis应用中创建CancelIntent
,向其中添加一些示例语音(至少三个),一旦检测到CancelIntent,对话应自动转发到CancelDialog。
答案 1 :(得分:0)
另一种方法是使用内置的cancel事件。路易斯仍然会工作。这是基于哈维尔的答案:
var format = "pdf";
using (var fileStream = File.OpenRead(BaseTestContext.GetDataDir(this.convertFolder) + "test_uploadfile.docx"))
{
var request = new PutConvertDocumentRequest(fileStream, format);
var result = this.WordsApi.PutConvertDocument(request);
}