如何通过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
相关产品推荐
相关产品推荐

