如何让Google App Script为数组每一行推送webhook,解决重复通知问题
错误原因
- 空的
forEach循环未执行任何有效逻辑,没有遍历处理表格内的每一行人员数据 buildAlert函数固定取全表第一行的人员ID和链接data[0][0]、data[0][1],导致生成的payload永远是同一个人的信息- 全表仅生成了一次payload、触发一次发送请求,没有为每个用户单独调用发送逻辑
修复后可运行代码
function buildReport() { const ss = SpreadsheetApp.getActive(); // 读取B2到C列的所有数据 let data = ss.getSheetByName('Team').getRange("B2:C").getValues(); // 遍历每一行数据 data.forEach(function(row) { // 跳过空行,避免无效请求 if (!row[0] || !row[1]) return; // 为当前行生成专属payload let payload = buildAlert(row); // 发送当前用户的专属消息 sendAlert(payload); }) }; // 入参调整为单一行数据,而非全表数据 function buildAlert(row) { let id = row[0]; let link = row[1]; let payload = { "blocks": [ { "id": id, "link": link } ] }; return payload; } function sendAlert(payload) { const webhook = "https://hooks.zapier.com/hooks/catch/9909120/xxxxxxx/"; var options = { "method": "post", "contentType": "application/json", "muteHttpExceptions": true, "payload": JSON.stringify(payload) }; try { UrlFetchApp.fetch(webhook, options); } catch(e) { Logger.log(e); } }
补充说明
- 代码新增了空行判断逻辑,如果表格内存在ID或链接为空的行,会自动跳过不发送
- 你可以根据实际需求调整Zapier接收的payload字段结构,适配Slack的消息发送格式要求
- 测试时建议先拿2-3行有效数据做验证,确认发送正常后再全量运行
内容的提问来源于stack exchange,提问作者Shay Bittencourt
相关产品推荐
相关产品推荐

