Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bot框架:如何在Node.js SDK中创建菜单?_Node.js_Botframework_Azure Bot Service_Qnamaker - Fatal编程技术网

Bot框架:如何在Node.js SDK中创建菜单?

Bot框架:如何在Node.js SDK中创建菜单?,node.js,botframework,azure-bot-service,qnamaker,Node.js,Botframework,Azure Bot Service,Qnamaker,我正在使用Bot框架和Node.js开发一个聊天机器人。我的目的是用菜单指导用户。我想象用户打开机器人,它会自动提示:“嗨,我是你的机器人你在找什么?-选项1-选项2” 一旦用户点击其中一个选项,他可以问我几个与该选项相关的问题,我想我会附上一个特定的QnA Maker知识库 我尝试在网上搜索,并在Github上查找发布的示例,但没有太大帮助。谁能帮我举个实际的例子? 提前感谢。您可以使用。这将为用户提供每个选项的按钮-用户可以单击按钮或键入响应 所以,如果你有一个明确的 var recogni

我正在使用Bot框架和Node.js开发一个聊天机器人。我的目的是用菜单指导用户。我想象用户打开机器人,它会自动提示:“嗨,我是你的机器人你在找什么?-选项1-选项2”

一旦用户点击其中一个选项,他可以问我几个与该选项相关的问题,我想我会附上一个特定的QnA Maker知识库

我尝试在网上搜索,并在Github上查找发布的示例,但没有太大帮助。谁能帮我举个实际的例子? 提前感谢。

您可以使用。这将为用户提供每个选项的按钮-用户可以单击按钮或键入响应

所以,如果你有一个明确的

var recognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: 'set your kbid here', 
    subscriptionKey: 'set your subscription key here'});

var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
    recognizers: [recognizer],
    defaultMessage: 'No match! Try changing the query terms!',
    qnaThreshold: 0.3
});

bot.dialog('/QnAMakerDialogue', basicQnAMakerDialog);
根据用户选择的内容,您可以使用切换到此对话框

function (session, results) {
     builder.Prompts.choice(session, "Hi I'm your bot you what are you looking for?", ["Ask a question", "Other cool stuff"], {listStyle: builder.ListStyle.button});
},
function (session, results) {
     if(results.response) {
          switch (results.response.entity) {
                case 'Ask a question':
                   session.replaceDialog('/QnAMakerDialogue');
                case 'Other cool stuff':
                   session.replaceDialog('/CoolStuffDialog');
                default:
                    session.send("Something went horribly wrong");
                    return;
          }
     } 
}
如果您的用户回答他们想提问,您需要提示该问题。为了做到这一点,我有时会使用包装器对话QnAPromptDialogue

function (session,args,next) {
    //if the user just entered 'ask question' or similar, prompt for the actual question
    var regex  = new RegExp("^ask .*");
    if(regex.test(session.message.text)) {
        builder.Prompts.text(session, "Go ahead, what is your question?");
    } else {
        next();
    }  
},
function (session, results) {
    session.replaceDialog('/QnAMakerDialogue');
}
可能不适用于所有人,但包括在有帮助的情况下。

您可以使用。这将为用户提供每个选项的按钮-用户可以单击按钮或键入响应

所以,如果你有一个明确的

var recognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: 'set your kbid here', 
    subscriptionKey: 'set your subscription key here'});

var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
    recognizers: [recognizer],
    defaultMessage: 'No match! Try changing the query terms!',
    qnaThreshold: 0.3
});

bot.dialog('/QnAMakerDialogue', basicQnAMakerDialog);
根据用户选择的内容,您可以使用切换到此对话框

function (session, results) {
     builder.Prompts.choice(session, "Hi I'm your bot you what are you looking for?", ["Ask a question", "Other cool stuff"], {listStyle: builder.ListStyle.button});
},
function (session, results) {
     if(results.response) {
          switch (results.response.entity) {
                case 'Ask a question':
                   session.replaceDialog('/QnAMakerDialogue');
                case 'Other cool stuff':
                   session.replaceDialog('/CoolStuffDialog');
                default:
                    session.send("Something went horribly wrong");
                    return;
          }
     } 
}
如果您的用户回答他们想提问,您需要提示该问题。为了做到这一点,我有时会使用包装器对话QnAPromptDialogue

function (session,args,next) {
    //if the user just entered 'ask question' or similar, prompt for the actual question
    var regex  = new RegExp("^ask .*");
    if(regex.test(session.message.text)) {
        builder.Prompts.text(session, "Go ahead, what is your question?");
    } else {
        next();
    }  
},
function (session, results) {
    session.replaceDialog('/QnAMakerDialogue');
}

可能不适用于所有人,但包括在有帮助的情况下。

一般来说,您可以创建多个QnAmaker服务,并在您的bot应用程序中使用不同的
kb
定义多个
QNamakerRecogniter
,然后利用bot瀑布中的
QNamakerRecogniter
来匹配问题,根据你自己的情况

对于快速示例:

var recognizer1 = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: <knowledgeBaseId>,
    subscriptionKey: <subscriptionKey>
});
var recognizer2 = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: <knowledgeBaseId>,
    subscriptionKey: <subscriptionKey>
});
let QNARecognizer;
bot.dialog('/', [(session, args) => {
        var msg = new builder.Message(session)
            .text("Select a choice")
            .suggestedActions(
                builder.SuggestedActions.create(
                    session, [
                        builder.CardAction.imBack(session, "option1", "option1"),
                        builder.CardAction.imBack(session, "option2", "option2"),
                    ]
                )
            );
        builder.Prompts.choice(session, msg, ["option1", "option2"]);
    }, (session, results,next) => {
        console.log(results);
        session.userData.kb = results.response.entity;
        switch (results.response.entity) {
            case 'option1':
            QNARecognizer = recognizer1;
                break;
            case 'option2':
            QNARecognizer = recognizer2;
                break;
            default:
                session.endDialog('not matched');
        }
        builder.Prompts.text(session,'please ask your quesion');
    }, (session, results) => {
        QNARecognizer.recognize(session,(err,result)=>{
            session.send(result.answers[0].answer);
        })
    }
])
var recognizer1=new cognitiveservices.QnAMakerRecognizer({
知识库ID:,
订阅密钥:
});
var recognizer2=新的认知服务。QnAMakerRecognizer({
知识库ID:,
订阅密钥:
});
让QNARecognizer;
bot.dialog(“/”,[(会话,参数)=>{
var msg=new builder.Message(会话)
.text(“选择一个选项”)
.建议的行动(
builder.SuggestedActions.create(
会议[
builder.CardAction.imBack(会话“选项1”、“选项1”),
builder.CardAction.imBack(会话,“选项2”、“选项2”),
]
)
);
builder.Prompts.choice(session,msg,[“option1”,“option2]”);
},(会话、结果、下一步)=>{
控制台日志(结果);
session.userData.kb=results.response.entity;
开关(results.response.entity){
案例“选项1”:
QNARecognizer=recognizer1;
打破
案例“选项2”:
QNARecognizer=recognizer2;
打破
违约:
session.endDialog(“不匹配”);
}
builder.Prompts.text(会话,“请询问您的问题”);
},(会话、结果)=>{
识别(会话,(错误,结果)=>{
session.send(result.answers[0].answer);
})
}
])

一般来说,您可以创建多个QnAmaker服务,并在您的bot应用程序中使用不同的
kb
定义多个
QnAMakerRecognizer
,然后根据您自己的条件利用bot瀑布中的
QnAMakerRecognizer
来匹配问题

对于快速示例:

var recognizer1 = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: <knowledgeBaseId>,
    subscriptionKey: <subscriptionKey>
});
var recognizer2 = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: <knowledgeBaseId>,
    subscriptionKey: <subscriptionKey>
});
let QNARecognizer;
bot.dialog('/', [(session, args) => {
        var msg = new builder.Message(session)
            .text("Select a choice")
            .suggestedActions(
                builder.SuggestedActions.create(
                    session, [
                        builder.CardAction.imBack(session, "option1", "option1"),
                        builder.CardAction.imBack(session, "option2", "option2"),
                    ]
                )
            );
        builder.Prompts.choice(session, msg, ["option1", "option2"]);
    }, (session, results,next) => {
        console.log(results);
        session.userData.kb = results.response.entity;
        switch (results.response.entity) {
            case 'option1':
            QNARecognizer = recognizer1;
                break;
            case 'option2':
            QNARecognizer = recognizer2;
                break;
            default:
                session.endDialog('not matched');
        }
        builder.Prompts.text(session,'please ask your quesion');
    }, (session, results) => {
        QNARecognizer.recognize(session,(err,result)=>{
            session.send(result.answers[0].answer);
        })
    }
])
var recognizer1=new cognitiveservices.QnAMakerRecognizer({
知识库ID:,
订阅密钥:
});
var recognizer2=新的认知服务。QnAMakerRecognizer({
知识库ID:,
订阅密钥:
});
让QNARecognizer;
bot.dialog(“/”,[(会话,参数)=>{
var msg=new builder.Message(会话)
.text(“选择一个选项”)
.建议的行动(
builder.SuggestedActions.create(
会议[
builder.CardAction.imBack(会话“选项1”、“选项1”),
builder.CardAction.imBack(会话,“选项2”、“选项2”),
]
)
);
builder.Prompts.choice(session,msg,[“option1”,“option2]”);
},(会话、结果、下一步)=>{
控制台日志(结果);
session.userData.kb=results.response.entity;
开关(results.response.entity){
案例“选项1”:
QNARecognizer=recognizer1;
打破
案例“选项2”:
QNARecognizer=recognizer2;
打破
违约:
session.endDialog(“不匹配”);
}
builder.Prompts.text(会话,“请询问您的问题”);
},(会话、结果)=>{
识别(会话,(错误,结果)=>{
session.send(result.answers[0].answer);
})
}
])

这个想法应该是创建另一个“var识别器2”,我在其中将第二个知识库的数据放入QnA,对吗?查看第二个代码段,我尝试将代码复制并粘贴到我的代码段中,但它会生成错误,因此我尝试如下操作:'bot.dialog('/',[function(session,result){builder.Prompts.choice(session,“Hi I'm your bot your what you Looking?”,[Ask a question”,“Other cool stuff”],{listStyle:builder.listStyle.button};}但是,如果我想使用QnA知识库,我的“/QNAMAKERDIALOGE”对话框是什么样子的?我想当我点击我进入一个规范知识库时,为了结合QnA Maker和LUIS,工作得非常好,你应该能够查看回购并运行。我在上面添加了一个编辑,以回答你的第二个问题。这个想法应该是创建另一个“var识别器2”其中我把第二个k的数据