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

Python Telegram Bot问题:如何让回调响应以用户身份发送至聊天

Telegram Bot按钮回复模拟用户身份显示方案

核心限制

Telegram官方API禁止机器人模拟普通用户发送消息,所有机器人发出的消息都会显示机器人账号信息,无法直接替换为用户的用户名。但可以通过视觉模拟的方式实现类似效果。

实现方案:嵌入用户信息并格式化

在机器人的回复内容里带上用户的昵称,并用格式突出,让聊天记录看起来像是用户做出了回应。修改后的代码如下:

import telebot
from telebot import types

bot = telebot.TeleBot('你的机器人Token')

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton('да', callback_data='yes')
    btn2 = types.InlineKeyboardButton('нет', callback_data='no')
    markup.row(btn1, btn2)

    bot.send_message(message.chat.id, f'привет, {message.from_user.first_name}! придет ли сегодня Кевин?', reply_markup=markup)

@bot.callback_query_handler(func=lambda callback: True)
def callback_message(callback):
    # 获取用户昵称
    user_name = callback.from_user.first_name
    # 根据按钮选择生成对应回复
    if callback.data == 'yes':
        reply_text = f'*{user_name}*: да'
    elif callback.data == 'no':
        reply_text = f'*{user_name}*: нет'
    
    # 发送带格式的消息,加粗用户昵称模拟用户发言
    bot.send_message(callback.message.chat.id, reply_text, parse_mode='MarkdownV2')
    # 可选:删除原按钮消息,让聊天更整洁
    bot.delete_message(callback.message.chat.id, callback.message.message_id)

bot.polling(non_stop=True)

代码细节说明

  • 从callback.from_user中提取用户的身份信息,这里用了昵称,也可以用callback.from_user.username获取用户名
  • 用MarkdownV2的加粗格式突出用户名称,视觉上更接近用户自己发言的效果
  • 可选删除原始的按钮消息,避免聊天记录里残留无关的交互消息

进阶优化:关联用户原始消息

如果想让对话逻辑更清晰,可以让机器人的回复引用用户发送的/start命令消息:

修改start函数中的发送语句,关联用户的命令消息:

bot.send_message(
    message.chat.id,
    f'привет, {message.from_user.first_name}! придет ли сегодня Кевин?',
    reply_markup=markup,
    reply_to_message_id=message.message_id
)

然后在回调函数中,让回复引用这条关联消息:

bot.send_message(
    callback.message.chat.id,
    reply_text,
    parse_mode='MarkdownV2',
    reply_to_message_id=callback.message.reply_to_message.message_id
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:57:05