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
相关产品推荐
相关产品推荐

