通过Google Apps Script将Trello Webhook接入Google Sheet时遇302错误
解决Trello Webhook连接Google Apps Script Web App返回302的问题
核心原因
Trello创建Webhook时会先发送验证请求到回调URL,要求URL返回200状态码;如果你的Web App存在权限设置问题、未正确处理验证请求,或者部署URL异常,就会触发302重定向,导致验证失败。
解决方案
1. 重新检查Web App部署配置
- 打开Google Apps Script编辑器,点击右上角「部署」→「管理部署」
- 点击现有部署的「编辑」按钮:
- 执行权限:必须设为**「任何人,甚至匿名」**(Trello的请求是匿名的,权限不足会触发重定向)
- 部署类型:选择「Web应用」
- 保存后生成新的部署URL,替换代码中的
webAppUrl(旧URL可能因权限变更失效)
2. 确保Web App正确处理Trello的验证请求
Trello创建Webhook时会发送GET请求,携带callback参数,你的Web App必须返回该参数的值才能通过验证。添加以下代码:
// 处理Trello的GET验证请求 function doGet(e) { if (e.parameter.callback) { // 返回Trello要求的验证值 return ContentService.createTextOutput(e.parameter.callback) .setMimeType(ContentService.MimeType.TEXT); } // 正常访问返回OK return ContentService.createTextOutput("OK").setMimeType(ContentService.MimeType.TEXT); } // 处理Trello发送的Webhook事件(POST请求) function doPost(e) { // 解析Trello发送的事件数据 const eventData = JSON.parse(e.postData.contents); // 在这里编写将数据写入Google Sheet的逻辑 // 示例:打开指定表格并写入数据 const sheet = SpreadsheetApp.openById(spreadSheetId).getActiveSheet(); sheet.appendRow([new Date(), JSON.stringify(eventData)]); // 必须返回200状态码的响应 return ContentService.createTextOutput("OK").setMimeType(ContentService.MimeType.TEXT); }
3. 修改Webhook创建请求的参数格式
原代码用JSON格式发送payload,Trello API对form-urlencoded格式的兼容性更好,修改setWebhookTrello函数:
function setWebhookTrello() { let data = { 'key': trelloKey, 'token': trelloToken, 'callbackURL': webAppUrl, 'idModel': trelloBoard, 'description': 'Trello→Google Sheet集成Webhook' // 可选,用于标识Webhook }; const params = { 'method': 'POST', 'payload': data // 直接传对象,Google会自动转换为form-urlencoded格式 }; UrlFetchApp.fetch('https://api.trello.com/1/webhooks', params); }
4. 验证Web App的响应状态
- 直接在浏览器中访问你的Web App URL,确认返回的是「OK」且状态栏码为200
- 如果仍有重定向,检查部署时是否勾选了「允许任何人访问」,确保没有权限拦截
内容的提问来源于stack exchange,提问作者Dmitriy Brilyov
相关产品推荐
相关产品推荐

