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

Google Apps Script Telegram机器人内联键盘回调监听失效排查

解决Telegram机器人内联按钮回调失效问题

问题分析

你当前的doPost函数仅处理Telegram的普通消息更新(比如/start命令),完全未处理内联按钮触发的回调查询(callback_query),这就是按钮点击后无响应的核心原因。

完整解决方案

1. 升级doPost函数,兼容两种更新类型

修改后的doPost需要先判断Telegram推送的更新类型,分别处理普通消息和回调请求:

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  
  // 处理普通消息(比如/start命令)
  if (contents.message) {
    var chat_id = contents.message.from.id; 
    var fname = contents.message.from.first_name;
    var text = `${fname}, 此机器人仅用于通知,请通过我们网站上的表单提交申请。`; 
    sendMessage(chat_id, text);
  }
  
  // 处理内联按钮回调查询
  else if (contents.callback_query) {
    var callbackData = contents.callback_query.data;
    var chatId = contents.callback_query.message.chat.id;
    var messageId = contents.callback_query.message.message_id;
    
    // 匹配delete_message回调指令
    if (callbackData === "delete_message") {
      // 删除原通知消息
      deleteMessage(chatId, messageId);
      // 发送交易完成提示
      sendMessage(chatId, "交易已完成");
      // 回调查询,避免按钮一直转圈
      answerCallbackQuery(contents.callback_query.id);
    }
  }
  
  // 返回空响应,符合Telegram Webhook要求
  return ContentService.createTextOutput(JSON.stringify({"status":"ok"})).setMimeType(ContentService.MimeType.JSON);
}

2. 添加辅助函数

新增两个函数处理Telegram API的删除消息和回调响应请求:

删除消息函数

function deleteMessage(chatId, messageId) {
  var telegramUrl = "https://api.telegram.org/bot<你的机器人Token>";
  var url = `${telegramUrl}/deleteMessage?chat_id=${chatId}&message_id=${messageId}`;
  UrlFetchApp.fetch(url);
}

响应回调查询函数

function answerCallbackQuery(callbackQueryId) {
  var telegramUrl = "https://api.telegram.org/bot<你的机器人Token>";
  var url = `${telegramUrl}/answerCallbackQuery?callback_query_id=${callbackQueryId}`;
  UrlFetchApp.fetch(url);
}

3. 确保通知消息的内联键盘格式正确

发送带按钮的通知时,要保证内联键盘的JSON格式规范(无需额外单引号包裹):

// 示例:表单提交时发送带按钮的交易通知
function sendTransactionNotification(chatId, transactionInfo) {
  var telegramUrl = "https://api.telegram.org/bot<你的机器人Token>";
  var text = `新交易申请:\n${transactionInfo}`;
  var inlineKeyboard = {
    "inline_keyboard": [[{"text":"标记完成","callback_data":"delete_message"}]]
  };
  
  var payload = {
    "chat_id": chatId,
    "text": text,
    "reply_markup": inlineKeyboard
  };
  
  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  
  UrlFetchApp.fetch(telegramUrl + "/sendMessage", options);
}

注意事项

  • 替换所有代码中的<你的机器人Token>为实际的Telegram机器人Token
  • 确保Google Apps Script的Web App已部署为任何人,甚至匿名可访问(否则Telegram无法推送回调请求)
  • 重新调用setWebhook函数,确保最新代码生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:41:10