Telegram公开频道:新订阅者欢迎消息及管理员通知实现求助
Telegram频道新订阅者自动欢迎与通知实现方案
一、功能可行性结论
这个功能是可以实现的,但受限于Telegram的隐私规则和API限制,部分场景下存在约束。
二、机器人方案的局限性
- 机器人确实无法主动给未发起过对话的用户发消息,这是Telegram的API硬限制,因此纯机器人方案无法直接给新订阅者发欢迎消息。但如果频道所有者已经和机器人发起过对话,机器人可以给所有者发送新订阅通知。
三、Telethon的正确实现方式
你之前用Telethon失败,大概率是事件监听逻辑或权限配置有误,以下是正确步骤:
- 账号权限要求:使用的Telegram账号必须是频道的管理员,且开启「查看成员」权限。
- 监听正确事件:需监听
ChatAction事件中的ChannelParticipantJoined动作,而非普通消息事件。 - 处理用户隐私限制:
- 若新订阅者设置了「拒绝陌生人私信」,任何账号(包括频道管理员)都无法主动给对方发私信,这是Telegram的隐私保护规则,无法绕过。
- 若用户允许陌生人发消息,即可通过Telethon发送私信欢迎。
- 简化版示例代码:
from telethon import TelegramClient, events from telethon.tl.types import ChannelParticipantJoined # 替换为你的API信息 api_id = 123456 api_hash = 'your_api_hash_here' client = TelegramClient('channel_bot_session', api_id, api_hash) # 替换为你的频道ID(用户名或数字ID) TARGET_CHANNEL = '@your_public_channel' # 替换为频道所有者的账号ID OWNER_USER_ID = 987654321 @client.on(events.ChatAction(chats=TARGET_CHANNEL)) async def handle_new_member(event): # 判断是否为新成员加入动作 if isinstance(event.action_message.action, ChannelParticipantJoined): user = await event.get_user() # 给所有者发送订阅通知 await client.send_message(OWNER_USER_ID, f"新成员:{user.first_name or '匿名用户'}(ID:{user.id})已加入频道") # 尝试发送欢迎私信 try: await client.send_message(user.id, "欢迎加入我们的频道!") except Exception as e: # 捕获隐私限制导致的发送失败,通知所有者 await client.send_message(OWNER_USER_ID, f"无法给{user.first_name}发送欢迎消息:{str(e)}") client.start() client.run_until_disconnected()
四、替代方案(绕过隐私限制)
如果无法给用户发私信,可以在频道内@新成员发送公开欢迎消息,这种方式不受用户隐私设置影响:
# 在频道内@新用户发送公开欢迎 await client.send_message(TARGET_CHANNEL, f"@{user.username or user.id} 欢迎加入我们的频道!")
五、关键注意事项
- 首次运行Telethon脚本需扫码登录,确保会话文件正常保存。
- 避免短时间内批量发送消息,否则可能触发Telegram反垃圾机制导致账号受限。
内容的提问来源于stack exchange,提问作者getgsg
相关产品推荐
相关产品推荐

