You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Telegram Bot发送含可点击链接的格式化表格?

问题:Telegram Bot发送带可点击链接的格式化表格

我用prettytable模块生成了带链接的格式化表格,表格内容如下:

+-----------------------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                Name               |  Arrival   |                                                                                      Link                                                                                     |
+-----------------------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|             Package #1            | 2022-08-06 |    [1Z1234567890](https://www.ups.com/track?loc=en_US&tracknum=1Z1234567890&requester=WT/trackdetails) | [AS](https://somewebsite.com/1Z1234567890)    |
|             Package #2            | 2022-08-07 |    [1Z9876543210](https://www.ups.com/track?loc=en_US&tracknum=1Z9876543210&requester=WT/trackdetails) | [AS](https://somewebsite.com/1Z9876543210)    |
+-----------------------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

原本用以下代码发送:

update.message.reply_text(f'```{table}```', parse_mode='MarkdownV2', disable_web_page_preview=True)

但因为用了```代码块标签,链接只显示为Markdown代码,无法点击。想知道怎么发送这种格式化表格,同时让链接保持可点击状态?


解决方案

核心逻辑

不能将表格放在代码块中,要直接使用标准Markdown表格语法,同时满足Telegram MarkdownV2的特殊字符转义要求。

具体操作步骤

  1. 让prettytable生成Markdown格式表格
    修改prettytable的输出格式,生成符合Markdown规范的表格,而不是ASCII边框样式:

    from prettytable import PrettyTable
    
    # 初始化表格并设置表头
    table = PrettyTable()
    table.field_names = ["Name", "Arrival", "Link"]
    
    # 添加带Markdown链接的行
    table.add_row([
        "Package #1",
        "2022-08-06",
        "[1Z1234567890](https://www.ups.com/track?loc=en_US&tracknum=1Z1234567890&requester=WT/trackdetails) | [AS](https://somewebsite.com/1Z1234567890)"
    ])
    table.add_row([
        "Package #2",
        "2022-08-07",
        "[1Z9876543210](https://www.ups.com/track?loc=en_US&tracknum=1Z9876543210&requester=WT/trackdetails) | [AS](https://somewebsite.com/1Z9876543210)"
    ])
    
    # 生成Markdown格式的表格字符串
    markdown_table = table.get_string(format="markdown")
    
  2. 转义MarkdownV2特殊字符
    Telegram的MarkdownV2要求对_*[]()~>#+-=|{}.!`这些特殊字符添加反斜杠转义,否则会解析失败。可以用以下函数处理:

    def escape_markdown_v2(text):
        escape_chars = r'_*[]()~`>#+-=|{}.!'
        return ''.join(f'\\{char}' if char in escape_chars else char for char in text)
    
    # 对生成的Markdown表格进行转义
    escaped_table = escape_markdown_v2(markdown_table)
    
  3. 发送处理后的表格
    去掉代码块标签,直接发送转义后的表格内容,指定解析模式为MarkdownV2:

    update.message.reply_text(escaped_table, parse_mode='MarkdownV2', disable_web_page_preview=True)
    

注意事项

  • 链接中的特殊字符(如&)无需额外转义,Telegram会自动识别URL部分并正确处理。
  • 保持disable_web_page_preview=True可以避免链接生成预览框,影响表格的排版整洁。

内容的提问来源于Stack Exchange,提问作者Bijan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:48:23