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

如何解决Telegram机器人向多Chat ID发送广播消息失败问题?

问题解决:Telegram机器人批量发送消息失败

问题根源

bot.send_message() 的 chat_id 参数仅支持单个聊天ID,不能直接传入ID列表,这是导致你无法批量发送的核心原因。

修正方案

需要遍历获取到的 users 列表,逐个调用 send_message 发送消息。同时优化代码细节,避免不必要的错误:

完整修正代码

@bot.message_handler(commands=['cast'])
def send_cast(message):
    # 处理命令参数,防止无消息内容时报错
    try:
        msg = message.text.split(None, 1)[1]
    except IndexError:
        bot.send_message(message.chat.id, text="请输入要发送的消息内容,格式:/cast 你的消息", parse_mode="Markdown")
        return

    user = message.from_user.id
    # 数据库操作:查询用户ID,读操作无需commit
    conn = connect_to_db()
    cursor = conn.cursor()
    db_users = "select user_id from UFM_USERS where type ='ORD'"
    cursor.execute(db_users)
    u = cursor.fetchall()
    users = [row[0] for row in u]
    # 查询操作不需要commit,直接关闭连接即可
    cursor.close()
    conn.close()

    try:
        if user not in m.admin:
            bot.send_message(message.chat.id, text=f"You require admin permission to do this ‼️", parse_mode="Markdown")
        else:
            success_count = 0
            fail_count = 0
            # 遍历每个用户ID发送消息
            for chat_id in users:
                try:
                    bot.send_message(chat_id=chat_id, text=msg, parse_mode="Markdown")
                    success_count += 1
                except Exception as send_err:
                    # 记录单个用户发送失败的情况,不中断整体流程
                    print(f"发送给 {chat_id} 失败: {str(send_err)}")
                    fail_count += 1
            # 给管理员发送批量发送结果反馈
            bot.send_message(
                message.chat.id,
                text=f"✅ 成功发送 {success_count} 条消息\n❌ 失败 {fail_count} 条消息",
                parse_mode="Markdown"
            )
    except Exception as e:
        bot.send_message(
            message.chat.id,
            f'*Oooops... Something went wrong.*\n错误信息:{str(e)}',
            parse_mode="Markdown"
        )

关键修改点

  • 遍历用户列表:用for chat_id in users循环,逐个调用send_message
  • 添加单用户发送异常处理:避免某个用户发送失败导致整个批量任务中断
  • 数据库操作优化:查询操作不需要conn.commit(),用完后关闭游标和连接
  • 参数校验:处理用户未输入消息内容的情况,防止split报错
  • 结果反馈:给管理员返回批量发送的成功/失败统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:14:59