轮询(Poll)是Telegram中最受欢迎的群组互动方式之一,从活动投票到产品调研,都能快速收集成员意见。当你在群组中手动创建轮询时,是否想过让机器人自动发起投票?本文将带你全面掌握Telegram机器人发送轮询消息的方法,无需复杂的编程基础,只需跟随步骤即可完成。
一、什么是Telegram轮询消息?
Telegram的轮询消息支持单题单选、多选、匿名投票以及测验模式,可在群组、频道和私聊中发送。通过机器人发送轮询,你可以实现定时投票、自动汇总结果等进阶玩法,为社群运营和决策提供极大便利。
二、准备工作:创建机器人和获取Token
只需三步:
- 在Telegram中搜索@BotFather,发送
/newbot创建机器人。 - 按照提示设置机器人昵称和用户名(用户名必须以
bot结尾)。 - 创建成功后,BotFather会返回一段API Token,形如
123456:AABBCCDD...,请妥善保存。
三、调用sendPoll方法发送轮询消息
Telegram Bot API的 sendPoll 方法用于发送轮询。最基本的请求包含 chat_id(目标会话ID)、question(问题文本)和 options(选项列表)。以下用Python示例演示:
import requests
TOKEN = "你的BOT_TOKEN"
chat_id = "-1001234567890" # 群组ID
url = f"https://api.telegram.org/bot/sendPoll"
data = {
"chat_id": chat_id,
"question": "你最喜欢的编程语言是什么?",
"options": '["Python", "JavaScript", "Go", "Rust"]'
}
resp = requests.post(url, data=data)
print(resp.json())
注意:options 参数必须是以JSON格式编码的字符串数组。如果使用requests库,也可以直接传一个Python列表,设置 data 为字典,requests会自行编码,但官方要求是UTF-8字符串。
关键参数详解
| 参数 | 说明 |
|---|---|
| chat_id | 会话ID,可为正整数(私聊/频道)、负整数(群组) |
| question | 轮询问题,1~255个字符 |
| options | 选项数组,最多10个,每个1~100字符 |
| is_anonymous | 是否匿名,默认True |
| allows_multiple_answers | 是否允许多选,默认False |
| type | 轮询类型:regular(常规)或quiz(测验) |
| correct_option_id | 测验模式下正确选项的索引(从0开始) |
四、发送匿名投票与多选轮询
在发起投票时,设置 is_anonymous 为 false 可以显示投票者,allows_multiple_answers 为 true 则允许成员选择多个选项。注意:测验模式(quiz)不支持匿名和多选。
{
"chat_id": chat_id,
"question": "请选择你使用的设备(可多选)",
"options": ["手机", "平板", "电脑"],
"allows_multiple_answers": true,
"is_anonymous": false
}
五、创建知识测验轮询
如果想在群组里做小测验,请设置 type 为 quiz,并指定 correct_option_id。
{
"chat_id": chat_id,
"question": "Telegram诞生于哪一年?",
"options": ["2012", "2013", "2014", "2015"],
"type": "quiz",
"correct_option_id": 0
}
官方要求测验轮询至少要有一个正确答案,且 correct_option_id 不能超出选项范围。
六、发送本地化/自定义轮询
通过 question_entities 和 option_entities 你可以对问题/选项中的部分文字进行格式处理,例如加粗、斜体或插入链接。利用 open_period 参数还可以设置投票的持续时间(秒),或通过 close_date 指定关闭投票的Unix时间戳。
七、常见问题与排错
1. 发送轮询返回400错误
最常见原因是 options 不是合法的JSON数组,或选项数量超过10个。请检查是否多加了转义字符。
2. 机器人无法在群组中发送轮询
确保机器人已被提升为群组管理员,否则部分受限权限会阻止发送。另外,检查群组设置中是否禁用了“匿名投票”功能。
3. 轮询结果如何获取?
机器人可以通过 poll_answer 更新对象接收用户的投票行为,需要设置Webhook或长轮询来捕获更新。
总结
本文从基础到进阶,完整演示了Telegram机器人发送轮询消息的流程。掌握 sendPoll 接口,你就能在群组中自动发起投票、测验,甚至根据用户投票结果执行后续动作。快去试试让机器人帮你收集群友的意见吧!