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

Telethon库:手机号授权会话能否发送带按钮的消息?

普通Telegram账号能否发送带按钮的消息?

普通账号可以发送带按钮的消息,但和机器人账号存在关键限制差异:

核心限制区别

  • 机器人账号:支持完整的InlineKeyboardMarkup功能,包括带callback_data的回调按钮、任意外部链接跳转等。
  • 普通用户账号:
    • 可使用ReplyKeyboardMarkup(底部常驻键盘按钮),无特殊限制。
    • 可使用InlineKeyboardMarkup(消息内嵌入式按钮),但仅支持有限的按钮类型:
      • 指向自身账号控制的资源(比如自己的频道、私聊链接)
      • switch_inline_query类型的按钮(唤起内联搜索)
    • 不能使用callback_data类型的按钮(这是机器人专属的回调触发功能)
    • 若按钮内容涉及外部非可控资源,Telegram可能会屏蔽按钮显示或直接拦截消息。

Telethon代码示例(普通账号)

from telethon import TelegramClient
from telethon.tl.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

# 初始化普通用户会话
client = TelegramClient('user_session', YOUR_API_ID, YOUR_API_HASH)

async def send_button_messages():
    # 发送底部常驻键盘按钮
    reply_keyboard = ReplyKeyboardMarkup(
        [[KeyboardButton("打开我的私聊")]],
        resize_keyboard=True
    )
    await client.send_message('目标对话ID/用户名', '带底部按钮的消息', reply_markup=reply_keyboard)

    # 发送消息内嵌入式按钮(仅支持自身可控链接)
    inline_keyboard = InlineKeyboardMarkup(
        [[InlineKeyboardButton("访问我的频道", url="https://t.me/你的频道ID")]]
    )
    await client.send_message('目标对话ID/用户名', '带内联按钮的消息', reply_markup=inline_keyboard)

with client:
    client.loop.run_until_complete(send_button_messages())

常见失败原因排查

  • 尝试发送带callback_data的按钮:普通账号不支持该类型,需改用机器人账号。
  • 按钮链接指向外部非可控资源:Telegram会拦截这类按钮,需换成自身账号控制的链接。
  • 触发反垃圾机制:短时间内大量发送带按钮的消息可能被限制,需降低发送频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:17:16