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

如何无需遍历聊天记录获取Telegram机器人创建的全部投票ID?

如何无需遍历所有聊天记录获取Telegram机器人创建的所有投票ID

目前Telegram官方Bot API没有提供直接获取机器人创建的所有投票ID的内置方法(不存在你提到的get_polls接口),但可以通过以下方案实现需求:

  • 主动记录投票ID(推荐方案)
    在机器人调用sendPoll创建投票时,直接从返回的消息对象中提取投票ID并持久化存储(比如数据库、本地文件)。后续需要整理列表时,直接从存储中读取即可,完全不需要遍历聊天记录。

    以Python的python-telegram-bot库为例,简单实现代码如下:

    import sqlite3
    from telegram import Update
    from telegram.ext import ContextTypes
    
    # 初始化SQLite数据库,用于存储投票ID
    conn = sqlite3.connect('bot_polls.db')
    cursor = conn.cursor()
    cursor.execute('CREATE TABLE IF NOT EXISTS bot_polls (poll_id TEXT PRIMARY KEY)')
    conn.commit()
    
    # 发送投票并记录ID的处理函数
    async def send_poll(update: Update, context: ContextTypes.DEFAULT_TYPE):
        # 发送投票
        poll_msg = await context.bot.send_poll(
            chat_id=update.effective_chat.id,
            question="你喜欢哪种编程语言?",
            options=["Python", "JavaScript", "Go"]
        )
        # 提取并存储投票ID
        poll_id = poll_msg.poll.id
        cursor.execute('INSERT OR IGNORE INTO bot_polls (poll_id) VALUES (?)', (poll_id,))
        conn.commit()
        await update.message.reply_text(f"投票已创建,ID: {poll_id}")
    
    # 获取所有已记录的投票ID
    def get_all_bot_poll_ids():
        cursor.execute('SELECT poll_id FROM bot_polls')
        return [item[0] for item in cursor.fetchall()]
    
  • 补录历史投票ID(仅适用于未记录的旧投票)
    如果之前创建的投票没有留存ID,只能通过遍历机器人发送的消息来收集,但可以通过过滤消息发送者为机器人自身ID,缩小遍历范围,提升效率:

    1. 调用getChatHistory接口,指定目标聊天范围
    2. 过滤message.from_user.id等于机器人自身ID的消息
    3. 从符合条件的消息中提取poll.id(仅当消息包含poll对象时)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:04