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

Dialogflow Fulfillment 0.6.1版本下Nodemailer运行崩溃如何解决?

问题原因

故障核心是dialogflow-fulfillment 0.6.x版本的机制变更,和异步操作的处理逻辑直接相关。

两个版本核心差异

  • 0.5.0版本:未对意图处理函数做异步返回强制要求,即使函数内部有异步任务未完成,框架会默认等待所有事件循环清空后再返回响应,因此你的回调式Nodemailer调用可以正常执行完成。
  • 0.6.1版本:重构了请求处理逻辑,agent.handleRequest会强制要求异步处理函数返回Promise,否则会在处理函数的同步代码执行完成后立刻返回响应,终止云函数实例运行。你的sendMail是异步IO操作,还没执行完就被云函数提前回收进程,直接触发崩溃。
修复方案

修改sendEmail处理函数,使用Nodemailer的Promise API并返回异步操作的Promise即可,修改后的代码如下:

function sendEmail(agent){
  const email = agent.parameters.email;
  const name = agent.parameters.name;
  const cls = agent.parameters.cls;
  const message = agent.parameters.message;
  
  const mailOptions = {
    from: 'SENDER EMAIL',
    to: 'EMAIL',
    cc: email,
    subject: "ABC",
    text: "MESSAGE:" + 
    '\n\n Name: ' + name + 
    '\n\n Class: ' + cls + 
    '\n\n Email: ' + email +
    '\n\n Message: ' + message
  };
  // 改用Promise写法并返回,告知框架等待异步操作完成
  return transporter.sendMail(mailOptions)
    .then(info => {
      console.log('Email sent: ' + info.response);
      // 可自定义正常返回给用户的提示
      agent.add('你的咨询已经提交成功,我们会尽快回复你');
    })
    .catch(error => {
      console.log(error);
      // 可自定义异常返回给用户的提示
      agent.add('提交失败,请稍后重试');
    });
}
额外说明

不需要新增其他适配代码,只要确保所有包含异步操作的意图处理函数都返回对应Promise即可适配0.6.1版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:05