使用Google Apps Script触发Zendesk Webhook时认证失败求助
问题分析与修复方案
你的代码核心错误是HTTP请求头的Basic Auth格式完全不符合标准,Zendesk无法识别你自定义的嵌套authentication结构。以下是具体问题和修复步骤:
1. 错误的认证头格式
你在headers里定义的嵌套authentication对象不是HTTP协议要求的Basic Auth格式。标准Basic Auth的正确实现逻辑是:
- 将
用户名:密码拼接成单个字符串 - 用Base64编码该字符串
- 在请求头中添加
Authorization字段,值为Basic 编码后的字符串
2. 额外注意事项
- 若使用Zendesk API Token而非账户密码,用户名需写成
你的邮箱地址/token,密码填写API Token - 不要手动指定工单
id字段,创建工单时Zendesk会自动生成ID,手动指定可能导致冲突 - 建议开启
muteHttpExceptions: true,方便查看完整错误响应信息
修复后的代码
var ENDPOINT_URL = "https://myDevelopmentDomain.zendesk.com/api/v2/tickets.json"; function testhook() { // 构造标准Basic Auth认证字符串 var username = "zendeskWebhookUsername"; // 用API Token的话改为"你的邮箱/token" var password = "zendeskWebhookPassword"; // 用API Token的话填写你的Token var authHeader = "Basic " + Utilities.base64Encode(username + ":" + password); var options = { 'method': "post", 'contentType': "application/json", 'headers': { "Authorization": authHeader // 正确的认证头格式 }, 'payload': JSON.stringify({ "ticket": { // 移除手动指定的id,由Zendesk自动分配 "priority": "high", "status": "open", "subject": "Help, my printer is on fire!", "description": "The fire is very colorful.", "tags": [ "enterprise", "other_tag" ] } }), 'muteHttpExceptions': true, // 开启后可捕获完整错误响应 }; var response = UrlFetchApp.fetch(ENDPOINT_URL, options); Logger.log(response.getContentText()); // 打印响应内容,方便排查问题 }
验证步骤
- 确认Zendesk账户的用户名/密码(或API Token)拥有创建工单的权限
- 执行修复后的代码,查看日志输出的响应内容
- 若仍报错,检查Zendesk域名是否正确,以及账户是否启用了API访问权限
内容的提问来源于stack exchange,提问作者Ian Hyzy
相关产品推荐
相关产品推荐

