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

App Script基于时间触发器无法向Telegram发送提醒问题排查

问题排查与修复建议

针对你的Google Apps Script代码执行后Telegram Bot未收到提醒的问题,结合代码细节,以下是几个关键排查点和修复方案:

1. 隐式全局变量引发的作用域冲突

代码中dateCols、dateCol、peopleList、i、am等多个变量未用let/const声明,属于隐式全局变量。这类变量容易被外部代码意外覆盖,或因作用域冲突导致逻辑异常。

修复:
为所有变量添加声明:

function reminder() {
  const returnFormattedDate = (date) =>
    Utilities.formatDate(date, "GMT+8", "dd/MM/yyyy");
  const dateCols = paradeStateSheet
    .getRange(1, 4, 1, 62)
    .getValues()
    .flat()
    .filter((date) => date != "")
    .map(returnFormattedDate);
  let dateCol = dateCols.indexOf(correctedDate) * 2 + 4;

  const peopleList = paradeStateSheet.getRange(3, 2, totalSheetUsers, 2).getValues();
  const paradeStates = paradeStateSheet
    .getRange(3, dateCol, totalSheetUsers, 2)
    .getValues();
  
  let startTime = Date.now();
  for (let i = 0; i < totalSheetUsers; i++) {
    const am = paradeStates[i][0];
    const pm = paradeStates[i][1];
    let message = "";
    // 后续代码保持不变

2. 逻辑运算符使用错误

判断am和pm均为空时,误用了位运算符&而非逻辑与&&。位运算符会对数值进行位运算,虽在布尔场景下可能偶然得到正确结果,但不符合逻辑判断语义,易引发意外行为。

修复:
替换运算符为&&:

if ((am == "") && (pm == "")) {
  message = "Please input your AM parade state, followed by your PM parade state ASAP";
}

3. 空消息无效发送问题

当am和pm均不为空时,message会保持空字符串,此时调用sendMessage发送空内容,Telegram Bot不会显示该消息,且属于无效请求。

修复:
添加非空判断,仅发送有效提醒:

if (message) {
  try {
    sendMessage(peopleList[i][0], message, STATUS_KB);
    startTime = Date.now();
  } catch (e) {
    Logger.log(`发送消息给用户${peopleList[i][0]}失败: ${e}`);
  }
}

4. 错误吞灭导致无法排查问题

try-catch的catch块为空,导致sendMessage执行出错时无法获取错误信息,无法定位问题根源(如用户ID错误、Telegram API调用异常等)。

修复:
在catch中添加日志记录:

try {
  sendMessage(peopleList[i][0], message, STATUS_KB);
  startTime = Date.now();
} catch (e) {
  Logger.log(`发送消息失败,用户ID: ${peopleList[i][0]},错误信息: ${e}`);
}

5. 日期索引匹配验证

确认correctedDate的格式与returnFormattedDate返回的dd/MM/yyyy完全一致(无多余空格、格式严格匹配)。若dateCols.indexOf(correctedDate)返回-1,会导致dateCol = 2,进而获取错误列的paradeStates数据,最终无符合条件的提醒消息。

验证方法:
添加日志查看索引值:

const dateIndex = dateCols.indexOf(correctedDate);
Logger.log(`日期匹配索引: ${dateIndex}`);
let dateCol = dateIndex * 2 + 4;

6. 依赖变量初始化验证

确认外部依赖项均正确初始化:

  • paradeStateSheet是否为有效Sheet对象(如通过SpreadsheetApp.openById(SheetID).getSheetByName("SheetName")获取);
  • totalSheetUsers是否为正确的用户数量,避免循环范围错误;
  • sendMessage函数是否正确实现Telegram API调用,参数传递无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:55:36