Apps Script实现WhatsApp自动回复:日期时间写入Google Sheet问题排查
WhatsApp自动回复脚本日期写入问题分析与修复
你的脚本存在几个可能导致日期无法正确写入Google Sheet的问题,同时还有潜在bug需要修复:
主要问题点
错误的请求数据解析方式
你通过JSON.stringify(e).replace(...)手动处理请求数据的方式非常脆弱,极易破坏JSON结构导致解析失败,使代码无法执行到日期写入步骤。正确做法是直接解析e.postData.contents——它本身就是标准JSON格式字符串,无需额外转义处理。未定义变量引发的执行中断
回复消息中的${nama}变量未在脚本中定义,会直接导致脚本报错终止,后续日期写入逻辑也无法执行。根据你的消息解析逻辑,这里应该使用ulp变量(即用户输入的名称)。低效的单元格写入逻辑
逐个调用getRange().setValue()会降低脚本执行效率,高请求量下容易触发执行超时。建议使用appendRow()批量写入数据,同时自动定位到表格最后一行。时区与单元格格式隐患
虽然new Date()能生成正确的Date对象,但如果Google Sheet的F列未设置为「日期时间格式」,日期会显示为时间戳数字;另外Apps Script默认时区可能与你所在时区不一致,需显式指定时区保证日期准确性。
修复后的完整脚本
function doPost(e) { // 打开目标表格 const sheetUrl = "你的Google Sheet链接"; const file = SpreadsheetApp.openByUrl(sheetUrl); const sheet = file.getSheetByName("Sheet1"); try { // 正确解析请求数据 const reqJson = JSON.parse(e.postData.contents); const senderMessage = reqJson.postData.contents.senderMessage; // 拆分并提取消息内容 const parsedMessage = senderMessage.split("#"); const ulp = parsedMessage[1].trim(); const kategori = parsedMessage[2].trim(); const catatan = parsedMessage[3].trim().slice(0, -1); // 显式指定时区(示例为印尼时区,可根据需求调整) const datetime = new Date(new Date().toLocaleString("en-US", { timeZone: "Asia/Jakarta" })); // 生成注册ID const prefixIdPendaftar = 220000; const nextRow = sheet.getLastRow() + 1; const idPendaftar = `B-${prefixIdPendaftar + nextRow - 1}`; // 批量写入数据(数组第5位留空对应原脚本的E列,第6位为日期写入F列) sheet.appendRow([idPendaftar, ulp, kategori, catatan, "", datetime]); // 构造正确的回复消息 const response = { data: [ { message: `Terima kasih, ananda ${ulp} berhasil terdaftar dengan ID ${idPendaftar}.` } ] }; return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON); } catch (error) { // 错误捕获与友好提示 const errorResponse = { data: [ { message: "Maaf, terjadi kesalahan saat memproses permintaan Anda." } ] }; return ContentService.createTextOutput(JSON.stringify(errorResponse)).setMimeType(ContentService.MimeType.JSON); } }
额外注意事项
- 给Google Sheet的F列设置日期时间格式:选中F列 → 格式 → 数字 → 日期时间,选择适配的显示样式。
- 验证请求数据结构:确认
reqJson.postData.contents.senderMessage确实是你需要的字符串,若请求结构不同,需对应调整解析逻辑。 - 脚本部署权限:确保Apps Script部署时选择了「任何人,甚至匿名」的访问权限,否则无法接收WhatsApp的Webhook请求。
内容的提问来源于stack exchange,提问作者Fajar Ardiansyah
相关产品推荐
相关产品推荐

