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

基于Dialogflow实现自定义输入决策树的功能需求及导航问题咨询

解决Dialogflow中决策树流程导航(Hops)的实现方案

Hey there, I’ve tackled similar Dialogflow workflow hurdles before, so let’s walk through exactly how to build your custom decision tree—including handling gold/silver routing, loops, multi-step flows, and that tricky "hops" navigation you’re stuck on.

1. 核心思路:用Contexts + Fulfillment实现流程跳转

Dialogflow原生的意图/上下文系统单独用可能会觉得跨流程跳转受限,但把输出上下文和** fulfillment webhook**结合起来,就是实现灵活流程导航的关键:

  • 输出上下文相当于"状态标记",用来追踪用户当前处于哪个流程分支;
  • Fulfillment(后端钩子)可以让你根据用户输入或当前状态,动态设置上下文、触发意图,直接实现流程间的跳转。

2. 分步实现指南

2.1 基础搭建:定义核心意图与上下文

先搭好基础模块:

  • 根意图:命名为credit_card_start,触发词可以是"我想办信用卡"这类用户启动流程的语句;
  • 分支意图:创建gold_card_intent(触发词"gold")、silver_card_intent(触发词"silver");
  • 上下文标记:创建gold_flow_active、silver_flow_active、main_menu_active这几个上下文,用来标记当前的流程状态。

2.2 构建4-5步长流程(以金卡为例)

我们把金卡流程拆成5步,用上下文来控制流程推进:

  1. 第一步:用户输入"gold"后,设置gold_flow_active上下文(生命周期设为5,足够覆盖整个流程),回复:"很棒的选择!你在我们这里已有账户吗?(是/否)"
  2. 第二步:如果用户说"是",触发gold_existing_account意图(仅当gold_flow_active上下文存在时生效),回复:"太好了!你想直接关联现有账户,还是提交新的申请?(关联/新申请)"
  3. 第三步:用户选"关联"后,回复:"请输入你的8位账户编号:"
  4. 第四步:通过Fulfillment验证账户编号有效性,验证通过后回复:"账户关联成功!你想先查看申请详情还是直接提交?(查看/提交)"
  5. 第五步:用户选"提交"后,确认申请完成,然后重置上下文,回复:"你的金卡申请已提交!想继续了解其他卡种还是结束对话?(继续/退出)"

2.3 实现流程循环与跨流程跳转(Hops)

这部分全靠Fulfillment来实现。比如用户在金卡流程里想切换到银卡,或者回到主菜单:

  • 添加导航意图:创建navigate_back意图,触发词包括"返回"、"切换到银卡"、"主菜单";
  • 在Fulfillment中处理逻辑:
    1. 先检查当前活跃的上下文(比如gold_flow_active);
    2. 如果用户说"切换到银卡",清除gold_flow_active,设置silver_flow_active上下文,回复:"好的!我们切换到银卡流程。你在我们这里已有账户吗?(是/否)"
    3. 如果用户说"主菜单",清除所有流程上下文,设置main_menu_active,回复:"欢迎回来!你想了解金卡还是银卡?(gold/silver)"

2.4 Fulfillment代码示例(Node.js)

下面是一段处理上下文管理和导航的代码片段:

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });

  // 处理金卡流程启动
  function handleGoldStart(agent) {
    agent.context.set({ name: 'gold_flow_active', lifespan: 5 });
    agent.add("Great choice! Do you have an existing account with us? (yes/no)");
  }

  // 处理从金卡切换到银卡
  function handleSwitchToSilver(agent) {
    agent.context.delete('gold_flow_active');
    agent.context.set({ name: 'silver_flow_active', lifespan: 5 });
    agent.add("Got it! Let's switch to the Silver card flow. Do you have an existing account with us? (yes/no)");
  }

  // 处理回到主菜单
  function handleMainMenu(agent) {
    agent.context.delete('gold_flow_active');
    agent.context.delete('silver_flow_active');
    agent.context.set({ name: 'main_menu_active', lifespan: 1 });
    agent.add("Welcome back! Would you like to explore Gold or Silver credit cards? (gold/silver)");
  }

  // 意图与处理函数映射
  const intentMap = new Map();
  intentMap.set('gold_card_intent', handleGoldStart);
  intentMap.set('navigate_back.switch_silver', handleSwitchToSilver);
  intentMap.set('navigate_back.main_menu', handleMainMenu);
  agent.handleRequest(intentMap);
});

2.5 确保流程循环

要让对话能循环进行直到用户退出:

  • 完成任何一个流程(比如提交申请)后,一定要重置到主菜单上下文,并提示用户选择继续或退出;
  • 添加exit_intent意图,触发词为"退出"、"结束",回复感谢语后结束对话。

3. 避坑关键提示

  • 上下文生命周期:合理设置生命周期——太短会丢失流程状态,太长会导致旧上下文意外生效;
  • 意图优先级:让导航意图(比如"返回")的优先级高于流程特定意图,确保用户想跳转时能触发正确的意图;
  • 状态追踪:如果需要更复杂的跳转(比如从金卡第三步跳到银卡第二步),可以在Fulfillment中记录当前流程的步骤,再根据记录调整上下文和回复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:18:59