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

添加Inline Keyboard后如何保留Telegram频道原生评论按钮或复现线程视图

Telegram Bot 频道帖子评论按钮问题解决

问题背景

开发一款向公开频道发布内容的Telegram Bot,频道已关联讨论组,默认每条帖子会显示原生的"Leave a comment"按钮。但当Bot为帖子添加自定义inline_keyboard(用于投票系统)后,原生评论按钮消失。核心需求是让用户点击按钮后进入原生Telegram Thread View(原频道帖子置顶、仅展示该帖子专属回复的UI)。

核心目标

  1. 能否让原生"Leave a comment"按钮与自定义inline_keyboard同时显示?
  2. 若无法实现,如何通过自定义按钮复现原生按钮的深度链接行为,跳转至帖子专属讨论线程,而非普通讨论组。

已尝试的失败方案

  • t.me/ChannelName/MsgID?comment=1:提示“消息不存在”
  • t.me/ChannelName/MsgID?discussion:仅打开频道帖子本身,而非线程视图
  • t.me/ChannelName/1?thread=MsgID:提示“消息不存在”

环境

  • Python(Requests / python-telegram-bot
  • 公开频道 + 关联的私有/公开讨论组
  • Bot为两者的管理员

解决方案

关于原生按钮与自定义键盘共存的问题

目前Telegram Bot API不支持同时显示原生"Leave a comment"按钮和自定义inline_keyboard。当为消息添加自定义内联键盘后,系统会自动隐藏原生评论按钮,这是官方API的既定限制,暂无绕过方法。

自定义按钮实现线程跳转的正确方式

要跳转至帖子的专属讨论线程,需使用关联讨论组的链接,并搭配正确的线程参数,具体格式如下:

https://t.me/<讨论组用户名>/<讨论组关联消息ID>?thread=<频道帖子ID>

关键说明:

  • <讨论组关联消息ID>:频道帖子发布后,Telegram会在关联的讨论组自动生成一条对应消息,这个消息的ID就是此处需要的值,而非频道帖子的ID。
  • <频道帖子ID>:即你在频道发布的目标帖子的消息ID。

获取讨论组关联消息ID的方法(python-telegram-bot示例):

使用Bot API的get_discussion_message方法,传入频道ID和频道帖子ID,即可获取讨论组中对应的关联消息对象,从中提取message_id

from telegram import Bot

# 初始化Bot
bot = Bot(token="你的Bot令牌")

# 发送频道帖子并获取消息对象
channel_msg = bot.send_message(chat_id="@你的公开频道", text="测试投票帖子")

# 获取讨论组中对应的关联消息
discussion_msg = bot.get_discussion_message(
    chat_id="@你的公开频道", 
    message_id=channel_msg.message_id
)

# 生成线程跳转链接
thread_link = f"https://t.me/{discussion_msg.chat.username}/{discussion_msg.message_id}?thread={channel_msg.message_id}"

# 构建包含评论按钮和投票按钮的自定义键盘
inline_keyboard = [
    [{"text": "发表评论", "url": thread_link}],
    [{"text": "赞成", "callback_data": "vote_yes"}, {"text": "反对", "callback_data": "vote_no"}]
]

# 为频道帖子添加自定义键盘
bot.edit_message_reply_markup(
    chat_id="@你的公开频道",
    message_id=channel_msg.message_id,
    reply_markup={"inline_keyboard": inline_keyboard}
)

注意事项:

  • 如果关联的讨论组是私有组,需确保用户已加入该组,否则点击链接会提示无法访问。
  • 需确保Bot拥有频道和讨论组的管理员权限,否则无法调用get_discussion_message方法或编辑帖子的回复键盘。

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

火山引擎 最新活动