Telegram聊天机器人展示图片时如何隐藏附带的图片URL
Telegram Bot发图隐藏URL的实现方法
问题根源
使用<a>、<image>、<img>等HTML标签嵌入图片的方案不生效,核心原因是Telegram Bot的普通文本消息接口不支持直接内嵌渲染图片:
- 空内容的
<a>标签不会触发客户端的链接预览,就算手动开启链接预览,消息区域依然会露出完整URL - Telegram文本消息支持的有限HTML标签集合里,根本没有
<img>、<image>这类图片标签,写了也会被客户端当成普通文本解析,直接露出标签内的URL地址
具体实现步骤
- 给program-y解释器增加自定义AIML标签解析逻辑,不要把图片URL放在普通文本字段里返回
- 改造原有AIML代码,替换成自定义的图片发送标识,参考写法:
<category> <pattern>SHOW ME YOUR PICTURE</pattern> <template>Okay <bot:sendphoto src="这里替换成你的图片公网直链"/></template> </category>
- 在AIML模板解析层做拦截:当解析到
<bot:sendphoto>标签时,提取src属性里的图片地址,不要调用普通的sendMessage文本发送接口,改为调用Telegram Bot API的sendPhoto接口:- 把提取到的图片直链传入接口的
photo参数 - 把标签外的普通文本(比如示例里的"Okay")传入接口的
caption参数,作为图片的附带说明文字
- 把提取到的图片直链传入接口的
- 接口调用成功后,用户端只会看到说明文字+渲染完成的图片,完全不会露出图片源URL
注意:传入的图片链接必须是公网可直接访问的无防盗链直链,否则Telegram服务器无法拉取图片资源,会导致接口调用失败。
内容的提问来源于stack exchange,提问作者Paulo Evan
相关产品推荐
相关产品推荐

