引言
很多Telegram用户和管理员都遇到过这样的需求:希望某个频道或群组的新消息能够自动推送给特定用户,或者自己的机器人能私信转发重要通知。手动复制粘贴太麻烦,利用Telegram Bot API可以轻松实现机器人转发消息给特定用户。本教程将带你从零开始,一步步实现这个自动流转方案。
准备工作:创建机器人和获取API令牌
在编写任何代码之前,你需要一个已注册的Telegram机器人。如果还没有,请按以下步骤操作:
- 在Telegram中搜索 @BotFather(官方机器人管理账号)。
- 发送
/newbot指令,按提示为你的机器人命名并设置用户名(例如 MyForwardBot)。 - 创建成功后,BotFather会返回一个 HTTP API令牌(形如
123456789:ABCdef...xyz),请妥善保存,这是调用API的凭证。
获取用户ID:让机器人知道“特定用户”是谁
转发消息的核心是要知道目标用户的数字ID。下面提供几种常用方法:
方法一:利用 @userinfobot
- 在Telegram中打开 @userinfobot,并给它发任意消息(比如 /start)。
- 它会回复你的用户ID,以及一些其他信息。
方法二:通过机器人私聊获取
在代码中监听 /start 命令时,获取 from.id 字段并保存。示例(Python + python-telegram-bot):
from telegram.ext import Updater, CommandHandler
def start(update, context):
user_id = update.effective_user.id
print(f"用户ID: ")
update.message.reply_text(f"你的ID是")
updater = Updater('YOUR_TOKEN', use_context=True)
updater.dispatcher.add_handler(CommandHandler('start', start))
updater.start_polling()
updater.idle()
让目标用户向你的机器人发送 /start,你就能在后台日志中看到他的ID。
核心原理:forwardMessage API的调用
Telegram Bot API提供了 forwardMessage 方法,专门用于转发消息。它的关键参数如下:
chat_id:目标用户或群的ID(你想把消息发给谁)。from_chat_id:源消息所在的频道/群组/用户的ID。message_id:源消息在源聊天中的唯一标识。
调用成功后,目标用户会收到一条注明“转发来自…”的消息。这个方法不仅支持文本,还能转发图片、视频、文件等多媒体消息。
代码实现示例:Python与Node.js
Python示例(使用python-telegram-bot库)
首先安装库:pip install python-telegram-bot。然后编写如下脚本,实现把频道里最新消息转发给指定用户:
import telegram
bot = telegram.Bot(token='YOUR_TOKEN')
target_user_id = 123456789 # 替换为目标用户的ID
channel_id = '@my_channel' # 替换为源频道或群组ID
# 获取频道最近一条消息(需要频道有最新动态)
updates = bot.get_updates(timeout=0) # 若没有更新,可先手动发送一条消息供测试
latest_msg = None
for update in reversed(updates):
if update.channel_post:
latest_msg = update.channel_post
break
if latest_msg:
bot.forward_message(
chat_id=target_user_id,
from_chat_id=channel_id,
message_id=latest_msg.message_id
)
print("转发成功!")
else:
print("未找到消息")
更实用的场景是持续监听频道的动态并自动转发。推荐使用 python-telegram-bot 的 Handler 机制(例如 ChannelPostHandler)来实现实时转发。
Node.js示例(使用node-telegram-bot-api库)
先安装:npm install node-telegram-bot-api。示例代码:
const TelegramBot = require('node-telegram-bot-api');
const bot = new TelegramBot('YOUR_TOKEN', {polling: true});
const TARGET_USER_ID = '123456789';
const SOURCE_CHAT_ID = '@my_channel';
// 监听频道中的新消息
bot.on('channel_post', (msg) => {
bot.forwardMessage(TARGET_USER_ID, SOURCE_CHAT_ID, msg.message_id)
.then(() => console.log('转发成功'))
.catch(err => console.error(err));
});
进阶玩法:自动转发群组消息并过滤关键词
你可以结合 message.text 的内容过滤,只转发包含特定关键词的消息。例如,当群里有人提到“紧急”时,立即转发给管理员。
if (msg.text && msg.text.includes('紧急')) {
bot.forwardMessage(ADMIN_ID, msg.chat.id, msg.message_id);
}
这样能让消息转发更精准,减少干扰。
常见问题与注意事项
- 隐私模式:创建机器人时默认开启隐私模式,这会使机器人无法接收群组中的非命令消息。如果你需要监听普通群消息,必须在 @BotFather 中发送
/setprivacy并选择 Disable(禁用隐私),或在代码中强制获取所有更新。 - 消息ID一致性:转发时需使用源聊天中的原始message_id,不要混淆不同聊天的消息号。
- 防滥用限制:Telegram API对转发频率有限制,但一般用量(每秒几十次)不会触发,请避免极高频的转发,否则可能导致机器人被临时限制。
- 机器人必须先与用户建立会话:如果目标用户从未私聊过你的机器人,机器人无法主动向其发送消息。请先让用户打开机器人的窗口,点击“开始”。
总结
通过Telegram机器人转发消息给特定用户,你可以轻松实现信息通知、动态监控、内容分发等自动化流程。本教程从创建机器人、获取用户ID,到调用 forwardMessage API,再到Python和Node.js的实战代码,已为你铺平道路。马上动手尝试吧,让繁琐的转发告别手工操作。