如何在Zapier的Run Javascript中输出BMI计算结果并传递至Manychat
解决Zapier中BMI计算的JS输出问题
我明白你的困扰——刚接触Zapier的JS动作确实容易踩坑,尤其是把网页端的代码直接搬过来用的时候。你的核心问题是原代码依赖浏览器DOM环境,不适合Zapier的Node.js运行环境,而且输出方式不对,导致Manychat收到异常内容。下面是修改后的完整代码,以及关键修改点的解释:
修改后的代码
// 保留你原本的BMI提示信息逻辑(无需修改) function getBMImsg(bmi) { var bmiTable = [{bmi: 10, msg: "você deve esta com inanição"}, {bmi: 15, msg: "você está muito abaixo do peso"}, {bmi: 18.5, msg: "você está um pouco abaixo do peso ideal"}, {bmi: 25, msg: "você está saudável!"}, {bmi: 30, msg: "você está acima do peso ideal"}, {bmi: 40, msg: "você está obeso!"}, {bmi: 50, msg: "você está com obesidade mórbida!"}]; var i; var text = bmiTable[0].msg; for (i = 0; i < bmiTable.length; i++) { if (bmi < bmiTable[i].bmi) { text = bmiTable[i].msg; break; } } return text; } // 保留BMI计算逻辑(无需修改) function calcBMI(height, weight) { var bmi = 0; if (height > 0 && weight > 0) { bmi = Math.round((weight / Math.pow(height/100, 2)) * 10) / 10; } return bmi; } // 核心修改:适配Zapier环境的执行逻辑 // 1. 从Zapier的inputData中获取Manychat传递的身高和体重(注意转成数字) const height = Number(inputData.height); const weight = Number(inputData.weight); // 2. 计算BMI和对应提示信息 const bmiValue = calcBMI(height, weight); const bmiMessage = getBMImsg(bmiValue); // 3. 正确返回输出对象——Zapier会把这些字段传递给下一个动作 return { bmi: bmiValue, result_message: bmiMessage };
关键修改点解释
- 移除DOM相关代码:原代码里的
document.getElementById、addEventListener都是浏览器网页端的API,Zapier的JS运行环境是Node.js,没有这些对象,所以必须删掉。 - 获取输入参数:Zapier会把上游(Manychat)传递的参数放在
inputData对象里,你只需要通过inputData.height、inputData.weight获取,记得转成数字(因为默认是字符串)。 - 正确返回输出:Zapier的Run Javascript动作要求你return一个对象,而不是像你之前那样把函数赋值给
output。返回的对象里的字段(比如这里的bmi和result_message)会自动出现在下一个动作的可用变量列表里,你在Manychat里直接引用这些变量就行。
测试一下这个代码:用你提供的测试值(身高175,体重81),计算出来的BMI是26.4,对应的提示信息是você está acima do peso ideal,Zapier会把这两个值正确传递给Manychat。
内容的提问来源于stack exchange,提问作者Querini
相关产品推荐
相关产品推荐

