Bot Framework对接多渠道:用无标题文本Hero Card替代builder.prompts.choice可行吗?
实现仅含按钮的Hero Card(无文本/标题)完全可行
当然可以实现仅包含按钮、没有文本和标题的Hero Card,而且这种方式正好能解决你用builder.Prompts.choice时遇到的对话逻辑冲突问题——毕竟你的对话流是由Watson单独处理的,不需要Bot Framework的内置prompt来接管输入控制权。
具体实现代码示例
你可以直接创建HeroCard实例,只配置按钮,然后发送给用户:
// 创建仅包含按钮的Hero Card const heroCard = new builder.HeroCard(session) .buttons([ builder.CardAction.imBack(session, "ratios", "Ratios"), builder.CardAction.imBack(session, "chart", "Chart"), builder.CardAction.imBack(session, "more", "More"), builder.CardAction.imBack(session, "add", "Add") ]); // 将卡片包装为消息附件发送 const cardMessage = new builder.Message(session) .addAttachment(heroCard); session.send(cardMessage);
为什么这比builder.Prompts.choice更适合你的场景
builder.Prompts.choice的核心问题是它会让Bot Framework进入等待用户输入的会话状态,接管对话的控制权,这就和你用Watson单独处理对话逻辑的架构冲突了。而直接发送Hero Card的方式:
- 不会改变Bot Framework的会话状态,只是单纯推送一条带按钮的消息
- 用户点击按钮后,对应的消息(比如"ratios"或"chart")会像普通用户输入一样发送给Watson,由Watson来处理后续的对话逻辑,完全符合你的架构设计
注意事项
- 主流渠道(Microsoft Teams、Facebook Messenger、Web Chat等)都支持无文本/标题仅按钮的Hero Card,但少数小众渠道可能会显示空白占位,建议在目标渠道做简单测试
- 按钮类型选择:
imBack会把按钮文本(或你指定的value)作为用户可见消息发送,适合Watson识别意图;如果需要传递隐藏的payload,可以用postBack,但要确保Watson能正确解析postBack的消息内容
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

