Dialogflow:在给定的上下文中强制某些意图无效

Dialogflow: Forcing certain intents to be invalid given context

我想使用 dialogflow 制作敲门笑话,但我发现我可以从另一个笑话的上下文中触发一个敲门笑话。例如我有以下意图:

如果 bot 回复 annie,我可以回复 orange who 并得到笑话的橙色妙语。我怎样才能防止这种情况发生?我只希望当来自其意图的响应为橙色时能够调用橙色妙语。

我认为您需要了解如何通过 fulfilment/webhook 发送响应以及上下文如何工作。在您的 whosthere 意图中,您可以通过 fulfillment 发送响应并适当地设置上下文。例如:如果您使用 "annie" 回答,请设置特定于安妮的上下文(例如 punchline-annie-context)并将 punchline-annie-context 设置为 punchline-annie 意图的输入上下文。通过这种方式,您可以确保 punchline-annie 只能在 whosthere 响应为 "annie".

时被激活

感谢@andreas030241 提供的信息。通过学习如何使用 fulfillment,我弄清楚了如何让逻辑起作用。我在内联编辑器中设置了 knockknock-whosethere 意图的响应,并创建了一个关联的上下文名称,然后我将其用作我希望有效的任何妙语意图的输入上下文。示例代码如下。非常感谢!

  function punchline(agent) {
    var names = [`Annie`,`Orange`,`Lena`,`Quiche`,`Wa`,`A little old lady`];
    var context_names = ['annie-punchline','orange-punchline','lena-punchline','quiche-punchline','wa-punchline','alittleoldlady-punchline'];
    var number = Math.floor(Math.random() * names.length);
    agent.add(names[number]);
    agent.setContext({
        name: context_names[number],
        lifespan: 1,
        });
  }

  let intentMap = new Map();
  intentMap.set('knockknock-whosethere', punchline);
  agent.handleRequest(intentMap);