You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Telegram机器人消息中生成跨设备全类型兼容的用户提及链接?

Telegram机器人全平台兼容用户提及方案

要解决iOS上的跳转失效、链接不渲染问题,同时兼容有用户名和无用户名的用户,核心逻辑是优先用用户名的HTTPS链接,无用户名时回退到tg://协议,同时确保消息格式合规:

两类用户的适配方案

  • 拥有@用户名的用户:使用https://t.me/用户名格式的链接,这个协议在所有Telegram客户端(包括iOS)上都能稳定识别并跳转至用户主页,是最可靠的方案。
    代码示例:
    mention = f'<a href="https://t.me/{user.username}">{user.full_name}</a>'
    
  • 仅含显示名无用户名的用户:只能用tg://user?id={user.id}协议,但需注意iOS限制:接收消息的管理员必须与被提及用户有过至少一次互动(比如同群聊过、搜索过该用户ID),否则链接可能无法跳转——这是Telegram客户端的限制,无法通过机器人代码绕过。
    代码示例:
    mention = f'<a href="tg://user?id={user.id}">{user.full_name}</a>'
    

完整兼容代码

可以写一个自动适配的函数,同时处理HTML特殊字符转义,避免格式错乱:

import html

def generate_user_mention(user):
    # 转义用户全名中的HTML特殊字符,防止破坏消息格式
    escaped_name = html.escape(user.full_name)
    if user.username:
        return f'<a href="https://t.me/{user.username}">{escaped_name}</a>'
    else:
        # 可额外标注用户ID,方便管理员手动搜索(应对iOS跳转限制)
        return f'<a href="tg://user?id={user.id}">{escaped_name}</a> (ID: {user.id})'

关键注意事项

  1. 发送消息时必须指定parse_mode='HTML',否则Telegram不会将文本渲染为可点击链接。
  2. 必须对用户全名做HTML转义(用html.escape),防止名称中的<>&等字符破坏消息结构,导致链接不渲染。

内容的提问来源于stack exchange,提问作者Abdurahim Joramurodov

火山引擎 最新活动