Telegram机器人发送轮询消息完整指南:从API调用到群组互动

手把手教你通过Telegram Bot API发送轮询消息,覆盖创建机器人、参数配置、匿名投票、测验模式等核心功能,助你提升群组互动率。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

轮询(Poll)是Telegram中最受欢迎的群组互动方式之一,从活动投票到产品调研,都能快速收集成员意见。当你在群组中手动创建轮询时,是否想过让机器人自动发起投票?本文将带你全面掌握Telegram机器人发送轮询消息的方法,无需复杂的编程基础,只需跟随步骤即可完成。

一、什么是Telegram轮询消息?

Telegram的轮询消息支持单题单选、多选、匿名投票以及测验模式,可在群组、频道和私聊中发送。通过机器人发送轮询,你可以实现定时投票、自动汇总结果等进阶玩法,为社群运营和决策提供极大便利。

二、准备工作:创建机器人和获取Token

只需三步:

  1. 在Telegram中搜索@BotFather,发送 /newbot 创建机器人。
  2. 按照提示设置机器人昵称和用户名(用户名必须以 bot 结尾)。
  3. 创建成功后,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_anonymousfalse 可以显示投票者,allows_multiple_answerstrue 则允许成员选择多个选项。注意:测验模式(quiz)不支持匿名和多选。

{
    "chat_id": chat_id,
    "question": "请选择你使用的设备(可多选)",
    "options": ["手机", "平板", "电脑"],
    "allows_multiple_answers": true,
    "is_anonymous": false
}

五、创建知识测验轮询

如果想在群组里做小测验,请设置 typequiz,并指定 correct_option_id

{
    "chat_id": chat_id,
    "question": "Telegram诞生于哪一年?",
    "options": ["2012", "2013", "2014", "2015"],
    "type": "quiz",
    "correct_option_id": 0
}

官方要求测验轮询至少要有一个正确答案,且 correct_option_id 不能超出选项范围。

六、发送本地化/自定义轮询

通过 question_entitiesoption_entities 你可以对问题/选项中的部分文字进行格式处理,例如加粗、斜体或插入链接。利用 open_period 参数还可以设置投票的持续时间(秒),或通过 close_date 指定关闭投票的Unix时间戳。

七、常见问题与排错

1. 发送轮询返回400错误

最常见原因是 options 不是合法的JSON数组,或选项数量超过10个。请检查是否多加了转义字符。

2. 机器人无法在群组中发送轮询

确保机器人已被提升为群组管理员,否则部分受限权限会阻止发送。另外,检查群组设置中是否禁用了“匿名投票”功能。

3. 轮询结果如何获取?

机器人可以通过 poll_answer 更新对象接收用户的投票行为,需要设置Webhook或长轮询来捕获更新。

总结

本文从基础到进阶,完整演示了Telegram机器人发送轮询消息的流程。掌握 sendPoll 接口,你就能在群组中自动发起投票、测验,甚至根据用户投票结果执行后续动作。快去试试让机器人帮你收集群友的意见吧!

FAQ

Telegram官方客户端选择

常见问题

如何让机器人发送匿名轮询?

在sendPoll请求中设置is_anonymous参数为true(默认就是true),即可开启匿名模式。若要显示投票者,将其设为false。

轮询可以设置几个选项?

Telegram Bot API限制选项数量为2到10个,每个选项长度1-100字符。

发送轮询时如何设置定时关闭?

你可以使用open_period参数设定投票开启的秒数,或使用close_date指定Unix时间戳来自动关闭轮询。

机器人能收到用户投票结果吗?

可以。机器人可以通过PollAnswer更新或调用getPoll方法获取实时投票数据,需要启用Webhook或长轮询。