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

如何通过Google Sheets App Script向Telegram发送带自定义参数的Poll投票

实现方案

需求1:设置1天投票开放时长

Telegram Bot API的open_period参数单位为秒,1天对应86400秒,直接替换原有值即可,该参数合法范围为5秒~30天,符合使用要求。

需求2:按钮形式选择投票答案

Telegram原生sendPoll接口仅支持列表形式的选项展示,无法直接配置为按钮样式。若要实现按钮选择,需要改用sendMessage接口配合InlineKeyboardMarkup内联按钮实现,该方案需要额外开发回调处理逻辑(接收用户按钮点击事件、自行统计投票结果),无法复用原生Poll的自动统计能力。

需求3:从单元格读取JSON格式投票选项

你可以在B2单元格写入标准JSON格式的选项数组,示例:["✌️ VOY", "NO PUEDO IR", "POSIBLEMENTE SI VAYA"],然后通过JSON.parse()解析单元格内容即可替换硬编码配置,注意读取单个单元格内容用getValue()而非返回二维数组的getValues()。


完整修改后代码(保留原生Poll实现,已适配需求1、3)

function sendPoll() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("DATA");
  var question = sheet.getRange("B1").getValue();
  // 从B2单元格读取JSON格式的选项数组
  var answers = JSON.parse(sheet.getRange("B2").getValue());
  var bot = sheet.getRange("B3").getValue();
  var chatId = sheet.getRange("B4").getValue();

  var payload = {
    "method": 'sendPoll',
    "chat_id": String(chatId),
    "question": String(question),
    "parse_mode": 'HTML',
    "options": JSON.stringify(answers),
    "is_anonymous": false,
    "type": 'regular',
    "allows_multiple_answers": false,
    // 1天对应86400秒
    "open_period": 86400
  }
  var data = {
    "method": "post",
    "payload": payload,
    "muteHttpExceptions":true
  };

  var response = UrlFetchApp.fetch('https://api.telegram.org/bot' + bot + '/', data);
  Logger.log(response);
};

可选:按钮式投票核心配置参考(需自行开发回调逻辑)

如果你需要按钮形式的投票,可参考如下payload配置,替换原有sendPoll相关逻辑:

// 构造内联按钮数组
var inlineKeyboard = answers.map(answer => [{
  text: answer,
  callback_data: "vote_" + answer // 自定义回调数据标识,用于后续统计
}])

var payload = {
  "method": 'sendMessage',
  "chat_id": String(chatId),
  "text": String(question),
  "parse_mode": 'HTML',
  "reply_markup": JSON.stringify({
    inline_keyboard: inlineKeyboard
  })
}

内容的提问来源于stack exchange,提问作者Carlos Hernández Quiñones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:36:03