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

如何在Dialogflow的Fulfillment中控制对话流程并跳转指定意图?

嘿,你的需求完全可以通过Dialogflow的Fulfillment配合**上下文(Contexts)**来实现,我给你梳理具体的实现思路和代码示例:

核心实现思路

Dialogflow的流程跳转本质是靠上下文来控制意图匹配优先级的。你需要在Fulfillment里根据数据库查询结果,手动设置或清除上下文,引导Dialogflow匹配到你想要的意图:

  • 当查询到不存在的文档类型时,激活Intent1对应的上下文,强制回到输入文档类型的状态
  • 当查询到存在的文档类型时,激活Intent3对应的上下文,让后续对话匹配Intent3
具体代码示例(Node.js版本)

假设你用的是Dialogflow的Firebase Fulfillment,以下是实现逻辑的代码:

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

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

  // 处理Intent2的逻辑
  async function handleDocumentType(agent) {
    // 获取用户输入的Document Type参数
    const docType = agent.parameters['Document Type'];
    // 连接Firebase Realtime Database查询数据
    const dbRef = admin.database().ref('documents').child(docType);
    const snapshot = await dbRef.once('value');

    if (!snapshot.exists()) {
      // 情况1:文档类型不存在,回到Intent1
      agent.add('该内容不在数据库中');
      // 清除所有现有上下文,避免干扰Intent1的匹配
      agent.clearContexts();
      // 激活Intent1的输入上下文,确保后续对话优先匹配Intent1
      agent.setContext({
        name: 'waiting_for_doc_type',
        lifespan: 5, // 上下文生命周期,可按需调整
        parameters: {}
      });
    } else {
      // 情况2:文档类型存在,跳转到Intent3
      agent.add('请输入获取时间?');
      // 清除Intent1的上下文,防止再次匹配Intent1
      agent.clearContext('waiting_for_doc_type');
      // 设置Intent3的输入上下文,同时传递文档类型参数给Intent3
      agent.setContext({
        name: 'waiting_for_time',
        lifespan: 5,
        parameters: { 'Document Type': docType }
      });
    }
  }

  // 将处理函数绑定到Intent2
  const intentMap = new Map();
  intentMap.set('Intent2', handleDocumentType); // 替换成你的Intent2名称
  agent.handleRequest(intentMap);
});
关键配置注意事项
  • 给Intent1配置输入上下文:在Intent1的设置里,添加waiting_for_doc_type作为输入上下文,这样只有当这个上下文活跃时,Dialogflow才会优先匹配Intent1。
  • 给Intent3配置输入上下文:在Intent3的设置里,添加waiting_for_time作为输入上下文,确保当这个上下文活跃时,后续用户输入会优先匹配Intent3。
  • 参数传递:如果Intent3需要用到之前的文档类型参数,可以通过上下文的parameters传递,这样Intent3就能直接获取到该参数,无需用户重复输入。
  • 上下文生命周期:lifespan值代表上下文会持续多少轮对话,一般设为3-5就足够覆盖用户的后续输入,避免过早失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:02:44