提示不等待用户输入
Prompt not waiting for user input
我目前正在尝试使用 Microsoft 的 Bot Framework 编写聊天机器人。我想使用选择提示,但它不会等待 me/the 用户选择一个选项。甚至 here 中的示例代码也不适合我。请参阅此工作示例:
var restify = require('restify');
var builder = require('botbuilder');
var botbuilder_azure = require("botbuilder-azure");
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword,
openIdMetadata: process.env.BotOpenIdMetadata
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var bot = new builder.UniversalBot(connector);
bot.set('storage', new builder.MemoryBotStorage());
var luisAppId = process.env.LuisAppId;
var luisAPIKey = process.env.LuisAPIKey;
var luisAPIHostName = process.env.LuisAPIHostName || 'westus.api.cognitive.microsoft.com';
var LuisModelUrl = 'https://' + luisAPIHostName + '/luis/v2.0/apps/' + `enter code here`luisAppId + '?subscription-key=' + luisAPIKey;
/**
* RECOGNIZERS
*/
var recognizer = new builder.LuisRecognizer(LuisModelUrl);
bot.recognizer(recognizer);
/**
* DIALOG SECTION
*/
var intents = new builder.IntentDialog({ recognizers: [recognizer] });
bot.dialog('/', intents);
intents.onDefault([
function(session){
session.send('I am sorry but I don`t know that.');
}
]);
intents.matches('City' ,[
function(session, args) {
session.beginDialog('getLocationDialog');
session.endDialog();
}
]);
var locationLabels = {
City1: 'City 1',
City2: 'City 2',
City3: 'City 3'
};
bot.dialog('getLocationDialog', [
function (session) {
builder.Prompts.choice(session, "Choose a city", locationLabels
, { listStyle: builder.ListStyle.button },{
maxRetries: 3,
retryPrompt: 'This is not a valid option. Choose one of the options listed above.' });
},
function (session, results) {
console.log(results.response.entity);
if (results.response){
var location = locationLabels[results.response.entity];
session.send('You are interested in %s', location);
session.endDialog();
}
else {
session.send('Okay.');
session.endDialog();
}
}
]);
带提示的对话框是这部分(使用LUIS匹配意图):
intents.matches('City' ,[
function(session, args) {
session.beginDialog('getLocationDialog');
session.endDialog();
}
]);
var locationLabels = {
City1: 'City 1',
City2: 'City 2',
City3: 'City 3'
};
bot.dialog('getLocationDialog', [
function (session) {
builder.Prompts.choice(session, "Choose a city", locationLabels
, { listStyle: builder.ListStyle.button },{
maxRetries: 3,
retryPrompt: 'This is not a valid option. Choose one of the options listed above.' });
},
function (session, results) {
console.log(results.response.entity);
if (results.response){
var location = locationLabels[results.response.entity];
session.send('You are interested in %s', location);
session.endDialog();
}
else {
session.send('Okay.');
session.endDialog();
}
}
]);
查看此代码的实际操作
机器人不会等我选择选项。有人能说出问题出在哪里吗?
请尝试下面列出的代码。我做了一些改变,让它在我这边工作。首先,删除 'City' 意图匹配中的 session.EndDialog() 调用。该调用导致对话在原始对话完成之前重新开始。
其次,您将 locationLabels 变量设置为 key/value 对。这需要是一个简单的数组。如果您需要使用 key/value 对,请考虑使用 iChoice。
第三,你的location变量只需要赋值results.response.entity。由于 locationLabels 是一个简单的数组,您不再需要尝试匹配它。
希望对您有所帮助。
史蒂夫。
var intents = new builder.IntentDialog({ recognizers: [recognizer] });
bot.dialog('/', intents);
intents.onDefault([
function(session){
session.send('I am sorry but I don`t know that.');
}
]);
intents.matches('City' ,[
function(session, args) {
session.beginDialog('getLocationDialog');
// session.endDialog();
}
]);
var locationLabels = ['City 1', 'City 2', 'City 3'];
bot.dialog('getLocationDialog', [
function (session) {
builder.Prompts.choice(session, "Choose a city", locationLabels, { listStyle: builder.ListStyle.button });
},
function (session, results) {
console.log(results.response.entity);
var location = results.response.entity;
if (results.response){
session.send('You are interested in %s', location);
session.endDialog();
}
else {
session.send('Okay.');
session.endDialog();
}
}
]);
我目前正在尝试使用 Microsoft 的 Bot Framework 编写聊天机器人。我想使用选择提示,但它不会等待 me/the 用户选择一个选项。甚至 here 中的示例代码也不适合我。请参阅此工作示例:
var restify = require('restify');
var builder = require('botbuilder');
var botbuilder_azure = require("botbuilder-azure");
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword,
openIdMetadata: process.env.BotOpenIdMetadata
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var bot = new builder.UniversalBot(connector);
bot.set('storage', new builder.MemoryBotStorage());
var luisAppId = process.env.LuisAppId;
var luisAPIKey = process.env.LuisAPIKey;
var luisAPIHostName = process.env.LuisAPIHostName || 'westus.api.cognitive.microsoft.com';
var LuisModelUrl = 'https://' + luisAPIHostName + '/luis/v2.0/apps/' + `enter code here`luisAppId + '?subscription-key=' + luisAPIKey;
/**
* RECOGNIZERS
*/
var recognizer = new builder.LuisRecognizer(LuisModelUrl);
bot.recognizer(recognizer);
/**
* DIALOG SECTION
*/
var intents = new builder.IntentDialog({ recognizers: [recognizer] });
bot.dialog('/', intents);
intents.onDefault([
function(session){
session.send('I am sorry but I don`t know that.');
}
]);
intents.matches('City' ,[
function(session, args) {
session.beginDialog('getLocationDialog');
session.endDialog();
}
]);
var locationLabels = {
City1: 'City 1',
City2: 'City 2',
City3: 'City 3'
};
bot.dialog('getLocationDialog', [
function (session) {
builder.Prompts.choice(session, "Choose a city", locationLabels
, { listStyle: builder.ListStyle.button },{
maxRetries: 3,
retryPrompt: 'This is not a valid option. Choose one of the options listed above.' });
},
function (session, results) {
console.log(results.response.entity);
if (results.response){
var location = locationLabels[results.response.entity];
session.send('You are interested in %s', location);
session.endDialog();
}
else {
session.send('Okay.');
session.endDialog();
}
}
]);
带提示的对话框是这部分(使用LUIS匹配意图):
intents.matches('City' ,[
function(session, args) {
session.beginDialog('getLocationDialog');
session.endDialog();
}
]);
var locationLabels = {
City1: 'City 1',
City2: 'City 2',
City3: 'City 3'
};
bot.dialog('getLocationDialog', [
function (session) {
builder.Prompts.choice(session, "Choose a city", locationLabels
, { listStyle: builder.ListStyle.button },{
maxRetries: 3,
retryPrompt: 'This is not a valid option. Choose one of the options listed above.' });
},
function (session, results) {
console.log(results.response.entity);
if (results.response){
var location = locationLabels[results.response.entity];
session.send('You are interested in %s', location);
session.endDialog();
}
else {
session.send('Okay.');
session.endDialog();
}
}
]);
查看此代码的实际操作
机器人不会等我选择选项。有人能说出问题出在哪里吗?
请尝试下面列出的代码。我做了一些改变,让它在我这边工作。首先,删除 'City' 意图匹配中的 session.EndDialog() 调用。该调用导致对话在原始对话完成之前重新开始。
其次,您将 locationLabels 变量设置为 key/value 对。这需要是一个简单的数组。如果您需要使用 key/value 对,请考虑使用 iChoice。
第三,你的location变量只需要赋值results.response.entity。由于 locationLabels 是一个简单的数组,您不再需要尝试匹配它。
希望对您有所帮助。
史蒂夫。
var intents = new builder.IntentDialog({ recognizers: [recognizer] });
bot.dialog('/', intents);
intents.onDefault([
function(session){
session.send('I am sorry but I don`t know that.');
}
]);
intents.matches('City' ,[
function(session, args) {
session.beginDialog('getLocationDialog');
// session.endDialog();
}
]);
var locationLabels = ['City 1', 'City 2', 'City 3'];
bot.dialog('getLocationDialog', [
function (session) {
builder.Prompts.choice(session, "Choose a city", locationLabels, { listStyle: builder.ListStyle.button });
},
function (session, results) {
console.log(results.response.entity);
var location = results.response.entity;
if (results.response){
session.send('You are interested in %s', location);
session.endDialog();
}
else {
session.send('Okay.');
session.endDialog();
}
}
]);