Telethon报ButtonUrlInvalidError错误,请求排查解决
问题描述
展示特定广告时触发错误,报错提示telethon.errors.rpcerrorlist.ButtonUrlInvalidError: Button URL invalid (caused by SendMediaRequest)。相关逻辑为根据luckyButtonNews是否为空构建包含Button.url的键盘,即使已将按钮文本和URL转为字符串,问题仍未解决。
相关代码
if (luckyButtonNews != None): print("AAAAA",luckyButtonNews[0][0]) print("BBBBBBB",luckyButtonNews[0][1]) # keyboard = [[Button.url(luckyButtonNews[0][0],luckyButtonNews[0][1])]] keyboard = [[Button.url(str(luckyButtonNews[0][0]),str(luckyButtonNews[0][1]))]] else: keyboard = [[Button.url('Advertise your project here 📞', "https://t.me/contractchecker")]] chat = await BOT.get_entity(chatId) await BOT.send_file(chat, 'giphy.gif', caption= text,buttons=keyboard, parse_mode = 'HTML') else: print("Waiting for the next update")
报错信息
telethon.errors.rpcerrorlist.ButtonUrlInvalidError: Button URL invalid (caused by SendMediaRequest)
排查方向与解决办法
- 检查URL格式合法性:Telegram要求按钮URL必须以
http://或https://开头,不能是无协议的网址(如t.me/xxx)、相对路径,也不能包含空格、换行符、制表符等非法字符。 - 打印URL原始字符:把打印语句改成
print("BBBBBBB", repr(luckyButtonNews[0][1])),repr()会显示所有隐藏字符,排查是否存在肉眼不可见的非法内容。 - 验证URL有效性:将
luckyButtonNews[0][1]的内容复制到浏览器测试能否正常访问;也可以用代码解析验证:from urllib.parse import urlparse url = str(luckyButtonNews[0][1]) parsed = urlparse(url) # 正常URL需满足scheme为http/https,且域名不为空 print(parsed.scheme in ['http', 'https'], parsed.netloc) - 排除空值/空白字符:确认
luckyButtonNews[0][1]不是空字符串、仅含空格的字符串,这类内容会被判定为无效URL。
内容的提问来源于stack exchange,提问作者Bartu Bozkurt
相关产品推荐
相关产品推荐

