You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Microsoft Bot Framework开发聊天机器人:Choice-Prompt不等待用户输入问题

解决Bot Framework中Choice Prompt不等待用户选择的问题

嘿,我之前在Bot Framework v3里也碰到过Choice Prompt不等待用户输入的坑,大概率是对话流程配置或者依赖版本的问题,咱们一步步来排查解决:

1. 先检查瀑布对话的完整配置

你给出的代码看起来不完整,很可能是没把Choice Prompt放在完整的瀑布步骤里。如果只发送了Prompt但没有后续步骤接收结果,对话会直接结束,自然不会等用户选择。

给你补全一个能正常运行的示例:

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);
});

// 创建聊天连接器
var connector = new builder.ChatConnector({
    appId: process.env.MicrosoftAppId,
    appPassword: process.env.MicrosoftAppPassword
});

// 监听用户消息
server.post('/api/messages', connector.listen());

// 创建机器人实例
var bot = new builder.UniversalBot(connector);

// 核心:完整的瀑布对话流程
bot.dialog('/', [
    // 第一步:发送Choice Prompt
    function (session) {
        builder.Prompts.choice(
            session,
            '请选择一个选项:',
            ['选项A', '选项B', '选项C'],
            { listStyle: builder.ListStyle.button } // 可选,用按钮展示选项
        );
    },
    // 第二步:接收用户选择并处理
    function (session, results) {
        if (results.response) {
            session.send(`你选了:${results.response.entity}`);
        } else {
            session.send('你没有选择任何选项哦');
        }
    }
]);

重点是必须有第二个瀑布步骤来接收results,这样机器人才会等待用户的输入。

2. 检查依赖版本兼容性

你用的是Bot Framework v3的包,要确保botbuilderbotbuilder-azure的版本匹配,版本不兼容很容易导致各种奇怪的问题。

可以先查看当前版本:

npm list botbuilder botbuilder-azure

如果版本不一致,安装一套兼容的稳定版本:

npm install botbuilder@3.15.0 botbuilder-azure@3.0.0 --save

3. 排查中间件或连接器问题

如果你加了自定义中间件,要确保中间件没有提前调用next()或者终止对话流程。比如有些日志中间件如果写得有问题,会跳过后续的对话步骤。

另外,本地测试时可以暂时注释掉非必要的中间件,看看是否恢复正常,逐步排查。

4. 用Bot Framework Emulator辅助排查

测试的时候一定要用Bot Framework Emulator,它能显示详细的日志和报错信息。如果Prompt发送失败或者对话流程异常,Emulator里的日志会明确告诉你哪里出了问题,比如权限错误、配置缺失之类的。

如果按照上面的步骤还是解决不了,把完整的代码和Emulator里的错误日志贴出来,这样能更快定位问题~

内容的提问来源于stack exchange,提问作者Lyndra

火山引擎 最新活动