从Google表格向Google Chat/Spaces发送数据遇400错误求助
问题:Google Apps Script 向 Google Chat 发送表格数据时返回400错误
正常工作的代码(发送纯文本消息)
以下代码可正常向Google Chat/Spaces发送文本消息:
function myFunction() { var WebWhooklink = "Sample_URL" var message = { text: "Hello"}; var payload = JSON.stringify(message); var options = { method: 'POST', contentType: 'application/json', payload: payload }; var response = UrlFetchApp.fetch(WebWhooklink, options ).getContentText(); }
修改后出错的代码(读取表格数据发送)
尝试从名为Emailer的表格中Email工作表读取B3:D5范围的数据并发送时,出现400错误,修改后的代码:
function myFunction() { var sheet = SpreadsheetApp.getActive().getSheetByName("Email"); var dataGrid = sheet.getRange(3, 2, 3, 3).getValues(); var WebWhooklink = "Sample_URL" var message = {dataGrid}; var payload = JSON.stringify(message); var options = { method: 'POST', contentType: 'application/json', payload: payload }; var response = UrlFetchApp.fetch(WebWhooklink, options ).getContentText(); }
错误信息
Exception: Request failed for https://chat.googleapis.com returned code 400. Truncated server response: {
"error": {
"code": 400,
问题原因
Google Chat的Webhook接口要求请求必须包含符合规范的消息字段,其中text是发送纯文本消息的必填字段。修改后的代码中,message = {dataGrid}生成的结构是{dataGrid: [[单元格数据]]},完全不符合Google Chat的消息格式要求,因此接口返回400参数错误。
解决办法
将读取到的二维表格数据转换为可读性强的文本格式,再放入text字段中构造合法的消息结构,修正后的代码如下:
function myFunction() { // 获取目标工作表及指定范围的数据 var sheet = SpreadsheetApp.getActive().getSheetByName("Email"); var dataGrid = sheet.getRange(3, 2, 3, 3).getValues(); // 将二维数组转换为易读的文本:每行单元格用制表符分隔,行与行用换行符分隔 var messageText = dataGrid.map(row => row.join("\t")).join("\n"); var WebWhooklink = "Sample_URL"; // 构造符合Google Chat要求的消息结构,必填text字段 var message = { text: messageText }; var payload = JSON.stringify(message); var options = { method: 'POST', contentType: 'application/json', payload: payload }; var response = UrlFetchApp.fetch(WebWhooklink, options).getContentText(); }
代码说明
dataGrid.map(row => row.join("\t")):将每一行的单元格数据用制表符分隔,保证列对齐join("\n"):将处理后的每行数据用换行符连接,形成完整的表格文本- 消息结构必须包含
text字段,这是Google Chat Webhook接收纯文本消息的强制要求
如果需要更美观的展示形式,可进一步使用Google Chat的卡片消息格式(如添加表头、分隔线等),但上述代码已解决基础的400错误问题。
内容的提问来源于stack exchange,提问作者mis996
相关产品推荐
相关产品推荐

