在Telegram聊天中,当用户发送包含链接的消息时,Telegram会自动生成链接预览,显示标题、描述和缩略图。对于机器人开发者来说,合理控制链接预览的展示对于提升用户体验至关重要。本文将深入解析Telegram Bot API中控制链接预览的方法,帮助你精确掌控机器人消息中的链接展示。
链接预览的基础知识
Telegram的链接预览功能是自动的。当消息中出现URL时,Telegram会尝试抓取网页元数据(如Open Graph标签)并生成预览卡。默认情况下,机器人发送链接时也会产生预览。预览内容通常包括标题、描述和图片,这些信息大多数来自网页的Open Graph或Twitter Card标签。
通过Bot API发送带链接预览的消息
在Telegram Bot API的sendMessage方法中,有一个link_preview_options参数(在较早版本中为disable_web_page_preview,现已更新),它允许开发者精细控制链接预览的显示。这个参数是一个对象,可以灵活设置。
link_preview_options参数详解
- is_disabled:布尔值,设为true可完全禁用链接预览。
- url:指定要生成预览的链接,如果为空则使用消息中的第一个链接。
- prefer_small_media:布尔值,true时优先显示小图。
- prefer_large_media:布尔值,true时优先显示大图。
- show_above_text:布尔值,true时预览显示在文本上方。
控制链接预览的显示样式
通过组合这些参数,你可以让链接预览完全按照你的意图呈现。例如,你可以只显示大图,或隐藏预览,或将预览置于消息上方。以下是一些常见场景:
- 如果想在新闻频道中强调链接内容,可以设置
prefer_large_media为true,让图片更醒目。 - 如果想避免预览干扰消息文本,可以设置
is_disabled为true。 - 如果希望预览在文字上方,让用户先看到内容再阅读文本,可以设置
show_above_text为true。
实战代码示例
Python (python-telegram-bot)
from telegram import Bot, LinkPreviewOptions
import asyncio
async def send():
bot = Bot(token="YOUR_TOKEN")
await bot.send_message(
chat_id="@channel",
text="欢迎访问 Telegram 官网:https://telegram.org",
link_preview_options=LinkPreviewOptions(
is_disabled=False,
url="https://telegram.org",
prefer_large_media=True,
show_above_text=True
)
)
asyncio.run(send())
Node.js (node-telegram-bot-api)
const TelegramBot = require('node-telegram-bot-api');
const bot = new TelegramBot('YOUR_TOKEN', {polling: true});
bot.sendMessage('@channel', '欢迎访问 Telegram 官网:https://telegram.org', {
link_preview_options: {
is_disabled: false,
url: 'https://telegram.org',
prefer_large_media: true,
show_above_text: true
}
});
高级技巧与常见问题
如何只显示预览而不发送文本?
可以将消息文本设置为空字符串,并指定url,但要注意Telegram可能不允许纯预览消息。实测可发送一个不可见字符(如零宽空格)作为文本。
如何针对不同设备优化预览?
建议同时设置prefer_small_media和prefer_large_media,因为它们在移动端和桌面端的表现不同,实际上只能二选一,根据目标用户选择。
链接预览抓取失败怎么办?
确保网页头部包含完整的Open Graph标签,并允许Telegram的抓取器访问。
总结
通过Telegram Bot API的link_preview_options参数,开发者可以灵活控制链接预览的显示样式,从而提升机器人消息的信息传达效率。在实际开发中,建议根据具体场景测试不同参数组合,找到最佳配置。