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

GAS开发Telegram Bot doPost报postData未定义错误修复

报错原因

Cannot read property 'postData' of undefined 是Google Apps Script Web开发的常见问题,触发逻辑非常明确:

  • 直接在脚本编辑器手动运行doPost函数时,平台不会传入HTTP请求对应的事件对象,形参search为undefined,读取属性直接报错
  • Web应用部署权限配置错误时,Telegram的webhook请求无法被正常处理,也会出现事件对象为空的情况

另外原代码还存在三个隐藏bug:

  1. 没有判断非文本消息场景,用户发送贴纸、图片、群通知等无text字段的消息时,会触发二次报错
  2. sendText的replymarkup是可选参数,不传时JSON.stringify(undefined)会导致接口请求异常
  3. doPost没有返回合法HTTP响应,Telegram会重复推送同一条消息
修复步骤

1. 替换原有doPost代码

增加空值兜底、字段合法性校验,补全响应返回:

function doPost(search) {
  // 非法请求直接返回
  if (!search || !search.postData) return ContentService.createTextOutput("ok");
  
  const updates = JSON.parse(search.postData.getDataAsString());
  // 仅处理带文本的普通消息
  if (updates.message && updates.message.text) {
    const searchResult = SearchIDSheet(updates.message.text);
    sendText(updates.message.chat.id, searchResult);
  }
  // 返回200响应告知Telegram已收到消息,避免重复推送
  return ContentService.createTextOutput(JSON.stringify({code:0}));
}

2. 替换原有sendText代码

补全可选参数兜底:

function sendText(chatid, text, replymarkup) {
  const requestData = {
    method: "post",
    payload: {
      method: "sendMessage",
      chat_id: String(chatid),
      text: text,
      parse_mode: "HTML",
      reply_markup: JSON.stringify(replymarkup || {})
    }
  };
  UrlFetchApp.fetch('https://api.telegram.org/bot' + BotToken + '/', requestData);
}

3. 正确部署Web应用

重新部署时按以下选项选择,否则webhook无法正常工作:

  • 执行身份:选择你自己的账号
  • 访问权限:选择「任何人(包括匿名用户)」

部署完成后将生成的Webhook URL配置到Telegram机器人即可,不要手动在编辑器里运行doPost函数——该函数仅能被HTTP请求触发,手动运行不会传入事件对象,必然报错。

如果需要调试逻辑,单独写测试函数模拟事件对象即可:

// 调试专用,正式上线可删除
function test() {
  const mockEvent = {
    postData: {
      getDataAsString: () => JSON.stringify({
        message: {
          chat: {id: 替换为你自己的Telegram chatID},
          text: "测试搜索关键词"
        }
      })
    }
  };
  doPost(mockEvent);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:45:31