You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bot Framework [Node.js]:bot.customAction处理QnA对象匹配异常问题

解决bot.customAction匹配带问号QnA的问题

看起来你在使用bot.customAction处理QnA匹配时踩了两个小坑,我来帮你梳理下问题所在,再给你一个靠谱的解决方案。

首先拆解你的两种方案问题:

  • 第一种方案(仅识别不带问号的内容):应该是你用了精确字符串匹配,比如直接把matches设成"Fine and you"这种纯字符串。这种情况下,Bot会严格对比用户输入和字符串是否完全一致,带问号的输入自然就匹配不上了。
  • 第二种方案(无响应直接走瀑布流):大概率是你的匹配规则写错了(比如正则没转义问号),或者customAction的定义顺序不对——如果它被放在瀑布流对话之后,Bot会优先触发瀑布流,根本不会走到这个自定义动作。

正确的实现方式:用正则表达式匹配

要实现匹配带问号的多种句式,你需要用正则表达式来定义matches,这样可以灵活覆盖所有目标句式。直接上代码:

// 注意:一定要定义在瀑布流对话之前!!
bot.customAction({
  // 正则匹配三种开头+带问号的句子,忽略大小写
  matches: /^(Fine|Well|Good) and you\?$/i,
  onSelectAction: (session, args, next) => {
    session.send("I'm wonderful as always, but thanks for asking!");
  }
});

正则规则解释:

  • ^ 和 $:确保匹配整个用户输入,避免只匹配部分内容
  • (Fine|Well|Good):匹配三个可选的开头词
  • and you\?:这里的\?是转义后的问号(因为问号在正则里是特殊字符,默认表示“匹配前面字符0次或1次”,必须转义才能匹配实际的问号)
  • i:忽略大小写,比如用户输入fine and you?也能匹配成功

额外优化建议:

如果想让匹配更宽松(比如用户输入前后有空格、单词间多打了空格),可以调整正则为:

matches: /^\s*(Fine|Well|Good)\s+and\s+you\?\s*$/i
  • \s*:允许输入前后有任意空格
  • \s+:允许单词之间有一个或多个空格

最后记得把customAction定义在你的瀑布流对话之前,这样Bot会优先检查这个自定义匹配规则,匹配成功就直接回复,不会触发瀑布流了。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:09:03