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

如何用Aiogram让Telegram Bot主动给未对话过的新频道用户发消息?

解决Telegram Bot无法给未互动用户发私聊消息的问题

核心原因是Telegram Bot API的隐私限制:Bot无法主动向未发起过对话的用户发送私聊消息,这是平台为避免垃圾消息骚扰用户设定的机制。以下是可行的解决办法:

1. 引导用户主动与Bot互动

在频道的欢迎提示(或自动回复)中明确告知用户需要先和Bot开启对话,比如:

欢迎加入频道!请先点击 @你的Bot用户名 发送任意消息或/start,之后会收到专属欢迎指引~

用户完成互动后,Bot就能获得会话权限,后续可正常发送私聊消息。

2. 改为在频道内@用户发送公开欢迎消息

如果不需要私聊,直接在频道内@用户发送公开欢迎消息,无需用户提前互动:

# 替换成你的频道ID
CHANNEL_ID = -100XXXXXXXXX

async def send_channel_welcome(user_id, username):
    # 优先使用用户名,无用户名则显示用户ID
    mention = f'@{username}' if username else f'用户{user_id}'
    await support_bot.send_message(
        chat_id=CHANNEL_ID,
        text=f'{mention} 欢迎加入我们的频道!'
    )

3. 实现「强制互动后加入」的逻辑

将Bot设置为频道管理员,开启「审核加入请求」功能,逻辑如下:

  • 用户申请加入频道时,Bot拦截请求并回复用户(此时用户主动发起申请,Bot可正常回复)
  • 用户回复Bot后,Bot自动批准其加入频道,并发送欢迎消息
    示例代码片段:
# 处理用户加入请求
@router.chat_join_request()
async def handle_join_request(request: ChatJoinRequest):
    # 回复用户触发会话权限
    await support_bot.send_message(
        chat_id=request.from_user.id,
        text='请发送任意消息确认,即可加入频道~'
    )

# 处理用户回复
@router.message()
async def handle_user_reply(message: Message):
    # 验证用户是否有待处理的加入请求(省略数据库查询逻辑)
    if has_pending_request:
        # 批准加入
        await support_bot.approve_chat_join_request(
            chat_id=CHANNEL_ID,
            user_id=message.from_user.id
        )
        # 发送欢迎消息
        await support_bot.send_message(
            chat_id=message.from_user.id,
            text='欢迎加入频道!这是为你准备的专属内容...'
        )

4. 捕获异常并给出提示

如果坚持要发私聊消息,捕获「chat not found」异常,在频道内提示用户调整设置或互动:

async def send_private_welcome(user_id, username):
    try:
        await support_bot.send_message(user_id, 'Welcome to the channel!')
    except Exception as e:
        if 'chat not found' in str(e).lower():
            await support_bot.send_message(
                chat_id=CHANNEL_ID,
                text=f'@{username} 无法给你发送私聊消息,请先点击 @你的Bot用户名 发送任意消息开启对话~'
            )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:10:25