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

Telegram公开频道:新订阅者欢迎消息及管理员通知实现求助

Telegram频道新订阅者自动欢迎与通知实现方案

一、功能可行性结论

这个功能是可以实现的,但受限于Telegram的隐私规则和API限制,部分场景下存在约束。

二、机器人方案的局限性

  • 机器人确实无法主动给未发起过对话的用户发消息,这是Telegram的API硬限制,因此纯机器人方案无法直接给新订阅者发欢迎消息。但如果频道所有者已经和机器人发起过对话,机器人可以给所有者发送新订阅通知。

三、Telethon的正确实现方式

你之前用Telethon失败,大概率是事件监听逻辑或权限配置有误,以下是正确步骤:

  1. 账号权限要求:使用的Telegram账号必须是频道的管理员,且开启「查看成员」权限。
  2. 监听正确事件:需监听ChatAction事件中的ChannelParticipantJoined动作,而非普通消息事件。
  3. 处理用户隐私限制:
    • 若新订阅者设置了「拒绝陌生人私信」,任何账号(包括频道管理员)都无法主动给对方发私信,这是Telegram的隐私保护规则,无法绕过。
    • 若用户允许陌生人发消息,即可通过Telethon发送私信欢迎。
  4. 简化版示例代码:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:39:56