Javascript Rivescript:在条件响应中使用关键字触发器

Javascript Rivescript:在条件响应中使用关键字触发器,javascript,chatbot,rivescript,Javascript,Chatbot,Rivescript,我正在使用Rivescript开发聊天机器人,并尝试在条件响应中使用关键字触发器 在网站上,有人解释说你可以使用 [*]忽略部分消息的选项 这在初始提示+[*]you[*]中运行良好,但当我尝试使用此方法捕获任何包含yes或no的响应作为条件响应的一部分时,它似乎会破坏它?我没有得到错误代码,但它只是默认为-因此,回到手头的问题…作为响应 + [*] you [*] - Oh, so we're talking about me now? + * % oh so we are

我正在使用Rivescript开发聊天机器人,并尝试在条件响应中使用关键字触发器

在网站上,有人解释说你可以使用

[*]
忽略部分消息的选项

这在初始提示
+[*]you[*]
中运行良好,但当我尝试使用此方法捕获任何包含
yes
no
的响应作为条件响应的一部分时,它似乎会破坏它?我没有得到错误代码,但它只是默认为
-因此,回到手头的问题…
作为响应

  + [*] you [*]
  - Oh, so we're talking about me now?

  + *
  % oh so we are talking about me now
  * <star> == [*] no [*]  => Whatever...
  * <star> == [*] yes [*] => This should be fun.{topic=myself}
  - So, back to the matter at hand...
那么,有没有任何方法可以在没有显式用户输入的情况下使用条件响应?而是一个只包含某个响应的响应?我想在两个实例中使用
*
会出现问题,这两个实例都是
[*]
,但无法在框架内找到解决方案?也许我错过了什么?我也尝试过使用
*yes*
*no*

更新:


也许,这是我使用的条件运算符的问题?当我只是想知道一个值是否包含在另一个值中时,
==
可能不是比较两个值的正确方法?我在这里找到了,但也没有运气…

好的,所以我找到了一个使用对象宏的解决方案-但它不是很优雅

此解决方案返回用户对
args
变量中的
test
对象宏的完整响应(所有单词都变为小写–以数组分隔)。此数组中的项目被枚举,以查看它们是否与
正片
负片
数组中的项目相匹配(实际上是rivescript“大脑”中已经存在的重复替换)

如果存在匹配项,则
操作
变量将更新为
,循环将中断,如果不存在匹配项,则
操作
变量将保持
未定义
。然后,此
操作
变量返回到条件响应,并由rivescript计算,以查看它是否符合任何条件

> object test javascript
    let positives = ['yes', 'yeah', 'yep', 'yup', 'yh', 'ya', 'y', 'sure'];
    let negatives = ['no', 'nope', 'na', 'nah', 'pass'];
    var action = 'undefined';
    for (var i = 0; i < args.length; i++) {
      if (positives.indexOf(args[i]) !== -1) {
        action = 'yes'
        break;
      } else if (negatives.indexOf(args[i]) !== -1){
        action = 'no'
        break;
      } else {

      }
    }
    return action;
< object

// In the topic/main section

+ [*] you [*]
- Oh, so we're talking about me now?

+ *
% oh so we are talking about me now
* <call>test <lowercase></call> == no        => Whatever...
* <call>test <lowercase></call> == yes       => This should be fun.{topic=myself}
* <call>test <lowercase></call> == undefined => So, back to the matter at hand...
- So, back to the matter at hand...
对象测试javascript 让正数=[‘是’、‘是’、‘是’、‘是’、‘yh’、‘是’、‘y’、‘当然’]; 让否定为['no','nope','na','nah','pass']; var action=‘未定义’; 对于(变量i=0;i无论什么。。。 *测试==是=>这应该很有趣。{topic=我自己} *test==undefined=>那么,回到手头的事情上。。。 -所以,回到手头的事情上。。。 这似乎工作得很好,但我确信一定有更好的解决方案,即使只是清理对象宏本身(也许有办法将替换引入对象宏??)


我接受这个答案,但如果有人有任何其他建议/解决方案,我仍然很乐意听到

因此,我设法与Rivescript的工作人员取得了联系,他们非常友好地抽出时间纠正了我的理解:

+ [*] you [*]
- So you are talking about me now?

+ [*] (yes|no) [*]
% so you are talking about me now
* <star> == yes => yes answer
* <star> == no => no answer
- default, shouldn't happen answer
+[*]您[*]
-你现在是在说我?
+[*](是|否)[*]
%你现在是在说我
*==是=>是的回答
*==否=>没有回答
-默认情况下,不应发生回答
出于某种原因,我想我假设我不能在条件触发器中使用触发器替换——毕竟有一个更优雅的解决方案

我现在就接受这个答案,把这段小小的旅程留给任何可能正在挣扎的人

+ [*] you [*]
- So you are talking about me now?

+ [*] (yes|no) [*]
% so you are talking about me now
* <star> == yes => yes answer
* <star> == no => no answer
- default, shouldn't happen answer