如何在Telegram Bot中实现x-callback跳转至其他应用如VLC?
问题根因
Telegram 平台出于安全限制,对可识别的链接协议做了白名单限制:
- 仅支持
http/https/tg等少数官方认可的协议,自定义协议(比如你用到的vlc-x-callback://)会被直接过滤,无法被识别为可点击链接 - InlineKeyboardButton 的
url参数会在服务端做协议校验,非白名单协议会直接返回BadRequest: Inline keyboard button url is invalid报错
可行解决方案
方案1:使用HTTPS中间跳转页(最稳妥,全平台兼容)
你只需要开发一个极简的静态HTML页面,部署到任意支持HTTPS的静态资源服务器上,页面加载时自动重定向到你的x-callback链接即可。
示例中间页代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>跳转到VLC</title> </head> <body> <p>正在跳转到VLC播放器,若未自动跳转请点击下方按钮</p> <button id="jumpBtn">手动跳转至VLC</button> <script> const vlcCallback = 'vlc-x-callback://x-callback-url/stream?url=' + decodeURIComponent(new URLSearchParams(window.location.search).get('video_url')) // 自动跳转 window.location.href = vlcCallback // 绑定手动跳转按钮 document.getElementById('jumpBtn').addEventListener('click', () => { window.location.href = vlcCallback }) </script> </body> </html>
使用时把你要跳转的视频地址编码后作为参数传给中间页即可,比如你的示例视频对应的中间页地址为:https://你的域名/vlc-jump.html?video_url=https%3A%2F%2Fsample-videos.com%2Fvideo123%2Fmp4%2F720%2Fbig_buck_bunny_720p_1mb.mp4
把这个HTTPS地址放到Telegram的富文本链接或者InlineKeyboardButton的url参数里即可正常跳转。
方案2:引导用户手动操作
如果不想额外部署页面,可以直接在消息中提示用户:复制x-callback链接到系统浏览器(Safari/Chrome等)打开,即可正常唤起VLC。
内容的提问来源于stack exchange,提问作者vbastianpc
相关产品推荐
相关产品推荐

