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

