如何用Google Script通过多个Slack webhook发DM并解决参数报错
问题修复方案
报错的核心原因是:
UrlFetchApp.fetch()仅支持单次传入1个合法的Slack webhook URL,你当前将多个URL拼接成了带方括号的字符串传入,属于非法参数。同时代码中直接拼接二维数组格式的linkticket变量,也会导致消息展示异常。
修改后完整可运行代码
function sendSlackDMMultiUsers() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ji = ss.getSheetByName('Mailer'); // 调整为纯数组格式存储所有目标用户的webhook地址 var webhookList = [ "https://hooks.slack.com/services/XXXXX", "https://hooks.slack.com/services/YYYYY" ]; var total_ticket = ji.getRange("C2").getValue(); var status = ji.getRange("C1").getValue(); // 格式化链接数据为Slack支持的markdown格式,避免输出数组结构 var linkticket = ji.getRange(3,4,ji.getLastRow()-2,1).getValues() .flat() .map(link => `<${link}|Ticket Link>`) .join(", "); var payload = { "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":bell: *Pending Ticket* :bell:" } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "Hi Leaders,\n\n"+ "There are " + total_ticket + " tickets pending. Kindly check these tickets: " + linkticket } } ] }; var params = { "method": "post", "contentType": "application/json", "payload": JSON.stringify(payload) }; if(status == 'Yes') { // 普通循环逐个发送,逻辑简单易调试 webhookList.forEach(hookUrl => { UrlFetchApp.fetch(hookUrl, params); }); // 【可选更高性能方案】批量发送,替换上面的循环即可 // var requests = webhookList.map(hookUrl => ({...params, url: hookUrl})); // UrlFetchApp.fetchAll(requests); } }
核心修改说明
- 将多个webhook地址存为纯数组格式,而非带方括号的字符串
- 对
linkticket做格式化处理,转换成Slack支持的markdown链接格式,避免输出异常的数组结构内容 - 遍历webhook数组逐个发送请求,也可以选择
fetchAll批量发起请求,提升运行效率 - 补充了函数定义,避免代码运行时找不到入口的问题
内容的提问来源于stack exchange,提问作者verawatayyy
相关产品推荐
相关产品推荐

