如何取消Telegram Bot链接点击时弹出的「打开此链接」确认框
这个弹窗和parse_mode配置没有任何关系,是Telegram官方客户端内置的硬编码安全拦截机制:针对内网IP、非HTTPS链接、未完成归属验证的第三方链接,默认弹出打开确认提示,官方Bot API没有提供任何关闭该弹窗的全局参数,不用在文档里浪费时间查找。以下方案按适配你本地个人智能家居场景的优先级排序:
优先选:用回调按钮替换URL跳转按钮
你现在配URL按钮,本质是点击后唤起浏览器访问本地地址触发智能家居操作,完全可以换成callback_data类型的内联按钮:用户点击按钮后,请求会直接发送到你部署在树莓派上的Bot服务,直接在服务端执行对应的智能家居操作逻辑,全程不需要唤起浏览器,从根源上不会触发链接确认弹窗,操作路径比跳网页更短。
改造步骤非常简单:- 把内联键盘配置里的
url字段换成callback_data,值设为对应操作的短标识字符串即可,比如触发测试操作就填trigger_test - 给Bot新增CallbackQuery请求处理逻辑,收到对应标识的回调时,直接执行原来
test.php里的业务代码,还可以调用answerCallbackQuery接口给用户弹个操作成功的轻提示,体验更好。
顺便提一句,你贴的代码里有基础语法bug:URL配置值少了结尾的单引号,也没加HTTP协议头,就算不解决弹窗问题,这个配置本身也会出问题,正确写法应该是'url' => 'http://192.168.1.1/test.php'。
- 把内联键盘配置里的
不想改代码就选:换带弹窗开关的第三方Telegram客户端
如果你不想动现有Bot逻辑,就想保留点击跳本地网页的交互,直接换第三方Telegram客户端就行,比如Nekogram、Telegram FOSS这类客户端,设置里都自带「跳过链接打开确认」的开关,手动开启后点任何链接都不会弹确认,反正你是个人本地使用,没有合规方面的顾虑。官方客户端没有开放这个配置项,不用在设置里翻找。性价比极低不推荐:给本地服务配已验证的HTTPS域名
如果你非要坚持用官方客户端、又不想改按钮逻辑,也可以给本地服务绑定一个公网域名、配置合法HTTPS证书,再完成Telegram平台的域名归属校验把域名绑定到你的Bot下,这类经过平台验证的HTTPS域名链接点击时不会弹确认。但这个方案需要额外买域名、做内网穿透、配置证书,对于本地自用的智能家居场景来说完全没必要。
别尝试在消息正文里直接插入链接绕过弹窗:不管是用HTML还是Markdown格式插入的普通链接,只要属于被拦截的链接类型,官方客户端一样会弹确认,没有任何区别。
内容的提问来源于stack exchange,提问作者Holger

