Node.js Microsoft Botframework提示。选项未获得验证响应

Node.js Microsoft Botframework提示。选项未获得验证响应,node.js,botframework,Node.js,Botframework,我正在使用chatconnector将我的机器人连接到前端聊天应用程序,并将机器人的响应写入我自己的数据库。问题是,当我验证一个提示时,bot会做出响应,但没有API让我获取验证响应 bot.dialog('/', [ function (session) { builder.Prompts.choice(session, "Which color?", "red|green|blue"); }, function (session, results, next) { //aft

我正在使用
chatconnector
将我的机器人连接到前端聊天应用程序,并将机器人的响应写入我自己的数据库。问题是,当我验证一个提示时,bot会做出响应,但没有API让我获取验证响应

bot.dialog('/', [
function (session) {
    builder.Prompts.choice(session, "Which color?", "red|green|blue");

},
function (session, results, next) {
   //after the user respond, the bot validates the input, if it's not 
   //one of the choices, this next function in the waterfall doesn't
   //even run, therefore I have no way to write the bot response 
   //into my own chat database and render it for the user 

}])
我是否可以获取机器人对失败验证的响应?

简短回答:否

详细回答:这不是SDK当前的一项功能。如果对选择提示的输入响应与提供的任何选项(也称为“意图”)不匹配,则瀑布式对话框不会继续执行步骤2,因为没有匹配响应。系统设计是警告用户,并等待他们输入所提供的选项中的一个(根据频道的不同)名称或编号。如果答案与任何选项都不匹配,框架将提示用户“我不明白。请从列表中选择一个选项”,直到输入有效选项


黑客回答:您需要修改SDK以满足此场景中的需要,然后使用自定义版本的SDK部署bot。您要查找的文件是

我编写了一个自定义识别器,允许将选择提示配置为可选。也就是说,如果用户没有单击按钮,而是输入了与给定选项不匹配的文本,您的瀑布式对话框将继续,您可以单独处理给定的用户输入

看看这个:

提供的代码段不可编译或运行,我从生产代码中将它们复制在一起。但它应该足以让您为您的机器人应用解决方案

工作原理:

自定义选项选项: 启动选项提示时,在选项中传递一个名为“可选”的新布尔标志

可选提示识别器: 在bot初始化时注册的全局识别器。它正在查找响应带有此可选标志的提示的消息。如果找到一个,它将向您发送一个低分数的虚拟对话框。低分数很重要,因此其他识别器可以击败它。例如,LUIS识别器或实际选择识别器,如果用户实际点击选择按钮,将返回1.0分。 如果没有声称分数合理的识别器,我们的识别器将被视为最佳选项,因此会触发我们的虚拟对话框

可选选择调度程序: 虚拟对话框除了创建一个伪PromptChoiceResult之外什么也不做,该PromptChoiceResult具有索引-1和一个保存实际用户输入的实体。然后,该结果将传递到对话框堆栈,这意味着您的下一步可以处理它。 由于索引为-1,可以识别这种情况


玩得开心

你解决过这个问题吗?有没有办法摆脱这个验证循环,我被卡住了,因为我的提示选项没有正确呈现,我现在被困在这个循环中