Zapier Zap触发测试正常但开启后未按预期运行问题咨询
Zap新增线索触发失败修复方案
问题根因
- 去重ID生成逻辑错误
Zap正式运行时会通过返回数据的id字段判断是否为新增条目,重复id的内容会直接被判定为旧数据忽略。当前代码中如果线索本身无id字段,会直接使用单轮请求内的循环索引i赋值,不同批次请求中同索引位置的线索会被判定为重复,导致新增线索被误判为旧数据。测试环节的load more功能会跳过去重校验,因此可以正常拉取到新数据。 - 查询时间范围限制不合理
当前请求参数固定只查询当日数据,若Zap轮询间隔跨天,会导致跨天时段产生的线索无法被拉取。 - 换行符处理逻辑错误
代码中charArr[j] === /\n/是将字符与正则对象直接对比,永远返回false,无法完成预期的换行符替换,会提升后续JSON解析报错的概率。
修复代码
// 调整查询时间范围为最近3天,避免跨天漏数据 const currentDate = new Date(); const threeDaysAgo = new Date(currentDate.getTime() - 3 * 24 * 60 * 60 * 1000); const year = threeDaysAgo.getFullYear(); const month = threeDaysAgo.getMonth() + 1; const day = threeDaysAgo.getDate(); const options = { url: 'api_url', method: 'GET', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'x-api-key': bundle.authData['api-key'], 'client_id': bundle.authData['client_id'] }, params: { 'year': year, 'month': month, 'day': day, 'page_size': '1000' } } return z.request(options) .then((response) => { response.throwForStatus(); const results = response.json; // 按时间戳倒序排列,最新线索放在最前 results.data.sort((a,b) => Number(b.time) - Number(a.time)); for(let i = 0; i < results.data.length; i++){ // 用时间戳+索引生成全局唯一id,避免去重误判 if(typeof results.data[i].id === 'undefined'){ results.data[i].id = `${results.data[i].time}_${i}`; } // 修正换行符替换逻辑 const pageUrlStr = results.data[i].page_url_list.replace(/[\n\r]/g, ' '); const jsonObj = JSON.parse(pageUrlStr); const URLS = []; for(let k = 0; k < jsonObj.pages.length; k++){ URLS.push(jsonObj.pages[k].page_url + "\n"); } results.data[i].page_url_list = URLS.toString(); // 格式化时间戳 results.data[i].time = new Date(Number(results.data[i].time)); } return results.data; });
验证步骤
修改完成后先执行触发测试确认数据拉取正常,再开启Zap,新增一条测试线索即可验证自动触发逻辑是否恢复正常。
内容的提问来源于stack exchange,提问作者SenseiShizo
相关产品推荐
相关产品推荐

