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

Dialogflow中如何获取前序意图参数实现出生日期校验

Dialogflow跨字段出生日期校验实现方案

1. 核心问题答疑

  • 必须使用Dialogflow的**上下文(Contexts)**实现跨意图传值,不需要额外配置followup intents,上下文是Dialogflow跨会话步骤存储临时数据的标准实现
  • 处理出生日期天数的独立js文件可以通过读取上下文存储的参数,拿到用户之前输入的月份值

2. 完整实现步骤

第一步:Dialogflow端上下文配置

在采集出生月份的意图配置页,找到Output contexts配置项,新增自定义上下文,命名为dob-collection,有效期设置为5(保证后续采集日、年的意图都能读取到该上下文即可)。
同时在采集出生日期天数的意图配置页,找到Input contexts配置项,填入dob-collection,保证只有采集完月份后该意图才会被触发,避免用户跳步访问。

第二步:出生月份意图存储参数示例(对应你处理月份的intent.js)

假设你用官方dialogflow-fulfillment库处理webhook请求,代码参考如下:

// 处理出生月份的intent.js
module.exports = (agent) => {
  const inputMonth = agent.parameters.dobmonth;
  // 你已实现的月份校验逻辑
  const parsedMonth = parseInt(inputMonth);
  const isValidMonth = parsedMonth >= 1 && parsedMonth <= 12;
  
  if (!isValidMonth) {
    agent.add('请输入1-12范围内的有效月份');
    return;
  }

  // 校验通过后将合法月份存入上下文
  agent.context.set({
    name: 'dob-collection',
    lifespan: 5,
    parameters: {
      confirmedMonth: parsedMonth
    }
  });
  agent.add('请输入您的出生日期天数?');
}

第三步:出生日期天数意图校验逻辑示例(对应你处理天数的intent.js)

// 处理出生日期天数的intent.js
module.exports = (agent) => {
  const inputDay = parseInt(agent.parameters.dobday);
  // 从上下文中读取之前存储的用户输入月份
  const dobContext = agent.context.get('dob-collection');
  const confirmedMonth = dobContext.parameters.confirmedMonth;

  // 各月最大天数字典,2月后续可结合采集到的年份补充闰年判断逻辑
  const monthMaxDays = {
    1:31, 2:28, 3:31, 4:30, 5:31, 6:30,
    7:31, 8:31, 9:30, 10:31, 11:30, 12:31
  };
  const maxValidDay = monthMaxDays[confirmedMonth];

  // 天数校验
  if (inputDay < 1 || inputDay > maxValidDay) {
    agent.add('抱歉,这是无效的出生日期,请重新输入天数');
    // 重置上下文有效期避免过期
    agent.context.set({
      name: 'dob-collection',
      lifespan: 5,
      parameters: { confirmedMonth }
    });
    return;
  }

  // 校验通过后可把天数也存入上下文,后续年份校验/最终组装数据时可直接读取
  dobContext.parameters.confirmedDay = inputDay;
  agent.context.set(dobContext);
  agent.add('请输入您的出生年份?');
}

3. 未使用官方库的适配方案

如果你直接解析原生webhook请求体,可从req.body.queryResult.outputContexts数组中找到名称为dob-collection的对象,直接读取其parameters.confirmedMonth字段即可拿到之前存储的月份值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:09:03