如何通过Python获取Telegram频道chat id:仅持邀请链接/名称的实现方案
实现通过Telegram频道名称获取Chat ID的方案
前置条件
- 目标频道必须是公开频道,且已设置公开用户名(即显示为@xxx格式的频道名称),未设置公开用户名的私有频道无法仅通过名称查询ID
- 你使用的Bot必须已经被添加为该频道的管理员,至少拥有查看频道信息的权限
核心实现方法
使用pyTelegramBotAPI内置的get_chat()方法,直接传入带@前缀的频道公开名称,即可获取频道完整信息,提取返回结果中的id字段就是需要的chat_id。
完整可运行代码示例
import os import telebot API_KEY = os.environ['API_KEY'] bot = telebot.TeleBot(API_KEY) def get_channel_id_by_name(channel_name): # channel_name 格式为@+频道公开用户名,例如@my_public_channel try: chat_info = bot.get_chat(channel_name) return chat_info.id except Exception as e: print(f"获取频道ID失败,错误原因:{e}") return None # 业务逻辑调用 if __name__ == "__main__": input("编辑message.txt内的发送内容,完成后按回车继续") target_channel_name = "@你要查询的频道公开名称" channel_id = get_channel_id_by_name(target_channel_name) if channel_id: # 修正原代码读取文件的错误:需要读取文件内容为字符串再传入接口 with open("message.txt", "r", encoding="utf-8") as f: msg_content = f.read() bot.send_message(chat_id=channel_id, text=msg_content) print("消息发送成功")
常见错误说明
- 接口返回
Chat not found:请检查频道名称拼写是否正确、Bot是否已经加入目标频道并获得对应权限、目标频道是否为未设置公开用户名的私有频道 - 原代码问题:原有代码直接将文件对象传入
send_message是错误用法,需要先读取文件内容为字符串再传入,读取消息文件建议用r只读模式而非a+追加模式
内容的提问来源于stack exchange,提问作者AX EL
相关产品推荐
相关产品推荐

