You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Google Chat推送时的Invalid JSON payload错误

问题解决:Google Form推送Google Chat报400错误

错误原因

报错提示Unknown name "content",说明你构建的卡片JSON结构不符合Google Chat Webhook的API规范,大概率是未提供的buildCard函数在组装widgets时出现了结构错误,或是某个表单响应的格式(比如多选的数组)未正确处理。

修正方案

1. 补全符合规范的buildCard函数

替换或添加正确的buildCard函数,确保卡片结构完全匹配Google Chat的要求:

function buildCard(title, emailRespondent, widgets, formUrl) {
  return {
    "cardsV2": [
      {
        "cardId": "form-response-card",
        "card": {
          "header": {
            "title": title,
            "subtitle": "提交者邮箱:" + (emailRespondent || "未提供")
          },
          "sections": [
            {
              "widgets": widgets
            },
            {
              "widgets": [
                {
                  "buttonList": {
                    "buttons": [
                      {
                        "text": "查看表单响应",
                        "onClick": {
                          "openLink": {
                            "url": formUrl
                          }
                        }
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      }
    ]
  };
}

2. 处理表单响应的数组格式

如果表单包含多选类问题,item.getResponse()会返回数组,直接传入keyValue的content会导致JSON格式异常,需要将数组转为字符串:
修改循环中的widgets构建代码:

for(var i = 0; i < items.length; i++) {
  var item = items[i];
  var response = item.getResponse();
  // 处理数组类型的响应(如多选)
  var displayResponse = Array.isArray(response) ? response.join("\n") : response;
  widgets.push({
    "keyValue": {
      "topLabel": item.getItem().getTitle(),
      "content": displayResponse,
      "contentMultiline": true
    }
  });
}

3. 调试建议

如果仍报错,添加muteHttpExceptions: true获取完整错误信息,方便定位:

var options = {
  method : "post",
  contentType : "application/json; charset=UTF-8",
  payload : JSON.stringify(card),
  muteHttpExceptions: true // 添加这行
};
var response = UrlFetchApp.fetch(URL_WEBHOOK, options);
Logger.log(response.getContentText()); // 查看完整错误日志

完整修正后的脚本

function pushToHangoutsChat(e) {
  var URL_WEBHOOK = "webhookurlgoeshere";
  var form = e.source;
  var emailRespondent = e.response.getRespondentEmail();
  var title = form.getTitle();
  var formUrl = form.getSummaryUrl().replace("viewanalytics","edit#responses")
  var items = e.response.getItemResponses();
  var widgets = [];
  for(var i = 0; i < items.length; i++) {
    var item = items[i];
    var response = item.getResponse();
    var displayResponse = Array.isArray(response) ? response.join("\n") : response;
    widgets.push({
      "keyValue": {
        "topLabel": item.getItem().getTitle(),
        "content": displayResponse,
        "contentMultiline": true
      }
    });
  }
  var card = buildCard(title, emailRespondent, widgets, formUrl);
  var options = {
    method : "post",
    contentType : "application/json; charset=UTF-8",
    payload : JSON.stringify(card),
    muteHttpExceptions: true
  };
  var response = UrlFetchApp.fetch(URL_WEBHOOK, options);
  Logger.log(response.getContentText());
}

function buildCard(title, emailRespondent, widgets, formUrl) {
  return {
    "cardsV2": [
      {
        "cardId": "form-response-card",
        "card": {
          "header": {
            "title": title,
            "subtitle": "提交者邮箱:" + (emailRespondent || "未提供")
          },
          "sections": [
            {
              "widgets": widgets
            },
            {
              "widgets": [
                {
                  "buttonList": {
                    "buttons": [
                      {
                        "text": "查看表单响应",
                        "onClick": {
                          "openLink": {
                            "url": formUrl
                          }
                        }
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      }
    ]
  };
}

内容的提问来源于stack exchange,提问作者Scott Stevenson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:20:43