Telegram 机器人搭建:从零到自动化运营
Telegram 机器人(Bot)是 2026 年最被低估的自动化工具之一。免费的 API、全球 9 亿月活用户、接近 100% 的消息送达率,加上丰富的交互功能——这些条件让 Telegram Bot 成为企业自动化运营的理想选择。
无论你是需要自动化客服、内容分发、用户引导还是支付收款,Telegram Bot 都能胜任。这篇教程将带你从零开始,完成一个功能完善的运营机器人。
为什么选择 Telegram Bot
在深入技术细节之前,先理解 Telegram Bot 的核心优势:
零消息费用:与微信公众号、LINE OA 等平台按消息收费不同,Telegram Bot API 完全免费。无论你有 100 个还是 100 万个用户,发送消息的费用都是零。
开放的 API:Telegram 的 Bot API 文档完善、功能丰富,支持消息、键盘、支付、文件、Web App 等功能。不需要审核、不需要认证、不需要企业资质。
即时性:消息从发送到送达通常在 1 秒以内。对于需要实时通知的场景(价格提醒、系统告警、订单通知),这一点至关重要。
隐私友好:用户无需提供手机号、邮箱等个人信息即可使用 Bot。这降低了用户的使用门槛。
跨平台:Telegram 在 iOS、Android、Windows、macOS、Linux 和 Web 上都有客户端。一个 Bot 覆盖所有平台。
第一步:创建 Bot
通过 BotFather 创建
BotFather 是 Telegram 的官方 Bot 管理工具:
- 在 Telegram 中搜索
@BotFather - 发送
/newbot命令 - 输入 Bot 的显示名称(例如:"智能运营助手")
- 输入 Bot 的用户名(必须以
bot结尾,例如smart_ops_bot) - 保存返回的 API Token
# BotFather 返回示例:
# Done! Congratulations on your new bot.
# Use this token to access the HTTP API:
# 7123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
安全提醒:API Token 等同于 Bot 的密码。务必存放在环境变量中,不要硬编码在代码里,更不要提交到 Git 仓库。
完善 Bot 档案
/setdescription — 设置 Bot 的功能描述
/setabouttext — 设置个人页面简介
/setuserpic — 上传头像(建议 512x512px)
/setcommands — 定义命令菜单
命令菜单示例:
start - 开始使用
help - 查看帮助
services - 浏览服务
pricing - 查看报价
status - 查询状态
contact - 联系我们
第二步:搭建后端服务
技术选型
| 方案 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| Node.js + node-telegram-bot-api | 通用场景 | 生态丰富、上手快 | 需要自建服务器 |
| Python + python-telegram-bot | 数据分析类 | Python 生态、AI 集成 | 性能中等 |
| Cloudflare Workers | 轻量 Bot | 免费部署、全球加速 | 有执行时间限制 |
| Firebase Cloud Functions | 事件驱动 | 按需付费、与 Firebase 集成好 | 冷启动延迟 |
| 自建 VPS | 复杂系统 | 完全控制 | 运维成本高 |
Node.js 完整示例
const TelegramBot = require('node-telegram-bot-api');
const express = require('express');
const app = express();
app.use(express.json());
const token = process.env.TELEGRAM_BOT_TOKEN;
const bot = new TelegramBot(token);
// 生产环境使用 Webhook
const WEBHOOK_URL = `https://yourdomain.com/webhook/${token}`;
bot.setWebHook(WEBHOOK_URL);
app.post(`/webhook/${token}`, (req, res) => {
bot.processUpdate(req.body);
res.sendStatus(200);
});
// ========== 核心功能 ==========
// 1. 欢迎流程
bot.onText(/\/start/, async (msg) => {
const chatId = msg.chat.id;
const user = msg.from;
// 记录新用户
await saveUser({
telegramId: user.id,
firstName: user.first_name,
lastName: user.last_name || '',
username: user.username || '',
language: user.language_code || 'en',
joinedAt: new Date(),
status: 'active'
});
await bot.sendMessage(chatId,
`你好,${user.first_name}!\n\n` +
`欢迎使用我们的智能助手。请选择你需要的服务:`,
{
reply_markup: {
inline_keyboard: [
[
{ text: '浏览服务', callback_data: 'menu_services' },
{ text: '查看报价', callback_data: 'menu_pricing' }
],
[
{ text: '成功案例', callback_data: 'menu_cases' },
{ text: '免费咨询', callback_data: 'menu_consult' }
],
[
{ text: '帮助中心', callback_data: 'menu_help' }
]
]
}
}
);
});
// 2. 菜单导航系统
bot.on('callback_query', async (query) => {
const chatId = query.message.chat.id;
const data = query.data;
// 记录用户行为
await trackEvent(query.from.id, 'button_click', { button: data });
switch(data) {
case 'menu_services':
await bot.sendMessage(chatId,
'我们的服务:\n\n' +
'1. Meta 广告投放与优化\n' +
'2. [Google Ads](https://support.google.com/adspolicy/answer/6008942) 搜索广告管理\n' +
'3. 数据追踪与归因分析\n' +
'4. 落地页设计与 CRO 优化\n' +
'5. Telegram / LINE 自动化营销\n\n' +
'选择你感兴趣的服务了解详情:',
{
reply_markup: {
inline_keyboard: [
[{ text: 'Meta Ads 详情', callback_data: 'svc_meta' }],
[{ text: 'Google Ads 详情', callback_data: 'svc_google' }],
[{ text: '数据追踪详情', callback_data: 'svc_tracking' }],
[{ text: '落地页优化详情', callback_data: 'svc_landing' }],
[{ text: '消息自动化详情', callback_data: 'svc_automation' }],
[{ text: '返回主菜单', callback_data: 'menu_main' }]
]
}
}
);
break;
case 'menu_pricing':
await bot.sendMessage(chatId,
'服务报价:\n\n' +
'基础套餐:$1,500/月\n' +
'- 单平台广告管理\n' +
'- 月度报告\n' +
'- 基本数据追踪\n\n' +
'专业套餐:$3,500/月\n' +
'- 双平台广告管理\n' +
'- 周度报告 + 实时仪表板\n' +
'- 完整数据追踪 + 归因\n\n' +
'企业套餐:定制报价\n' +
'- 多平台全面管理\n' +
'- 专属客户经理\n' +
'- 高级分析 + 战略咨询',
{
reply_markup: {
inline_keyboard: [
[{ text: '申请免费咨询', callback_data: 'menu_consult' }],
[{ text: '返回主菜单', callback_data: 'menu_main' }]
]
}
}
);
break;
case 'menu_consult':
// 启动咨询流程
await startConsultationFlow(chatId, query.from.id);
break;
case 'menu_main':
// 重新显示主菜单
await showMainMenu(chatId);
break;
}
await bot.answerCallbackQuery(query.id);
});
// 3. 咨询收集流程(多步骤对话)
const userStates = new Map();
async function startConsultationFlow(chatId, userId) {
userStates.set(userId, { step: 'name', data: {} });
await bot.sendMessage(chatId,
'好的,让我们开始免费咨询申请。\n\n' +
'请先告诉我你的姓名:',
{ reply_markup: { force_reply: true } }
);
}
bot.on('message', async (msg) => {
if (!msg.text || msg.text.startsWith('/')) return;
const userId = msg.from.id;
const state = userStates.get(userId);
if (!state) return;
const chatId = msg.chat.id;
switch(state.step) {
case 'name':
state.data.name = msg.text;
state.step = 'company';
await bot.sendMessage(chatId, '你的公司名称是?');
break;
case 'company':
state.data.company = msg.text;
state.step = 'budget';
await bot.sendMessage(chatId,
'你每月的广告预算大约是多少?',
{
reply_markup: {
inline_keyboard: [
[{ text: '$1,000 以下', callback_data: 'budget_low' }],
[{ text: '$1,000 - $5,000', callback_data: 'budget_mid' }],
[{ text: '$5,000 - $20,000', callback_data: 'budget_high' }],
[{ text: '$20,000 以上', callback_data: 'budget_enterprise' }]
]
}
}
);
break;
case 'contact':
state.data.contact = msg.text;
// 保存咨询申请
await saveConsultation(userId, state.data);
userStates.delete(userId);
await bot.sendMessage(chatId,
'感谢你的咨询申请!\n\n' +
`姓名:${state.data.name}\n` +
`公司:${state.data.company}\n` +
`预算:${state.data.budget}\n` +
`联系方式:${state.data.contact}\n\n` +
'我们的顾问将在 24 小时内联系你。'
);
// 通知管理员
await notifyAdmin(state.data);
break;
}
});
app.listen(3000, () => console.log('Bot server running on port 3000'));
第三步:自动化运营流程
欢迎序列自动化
新用户加入后,通过定时任务自动推送内容序列:
// 欢迎序列任务(使用 cron 或 Cloud Scheduler)
async function processWelcomeSequence() {
const now = new Date();
// Day 1: 发送最受欢迎的内容
const day1Users = await getUsersByJoinDate(1);
for (const user of day1Users) {
await bot.sendMessage(user.telegramId,
'嗨!你可能会对这篇文章感兴趣:\n\n' +
'《2026 年 [Meta Ads](https://www.facebook.com/policies/ads/) 投放完全指南》\n\n' +
'这是我们阅读量最高的内容,已帮助 500+ 广告主优化投放效果。',
{
reply_markup: {
inline_keyboard: [[
{ text: '阅读文章', url: 'https://redclawey.com/blog/meta-ads-guide' }
]]
}
}
);
}
// Day 3: 发送案例研究
const day3Users = await getUsersByJoinDate(3);
for (const user of day3Users) {
await bot.sendMessage(user.telegramId,
'看看我们的客户是怎么做到的:\n\n' +
'案例:某电商品牌如何在 30 天内将 ROAS 从 1.5x 提升到 4.2x\n\n' +
'这个案例展示了我们数据驱动优化方法的完整过程。'
);
}
// Day 7: 发送优惠
const day7Users = await getUsersByJoinDate(7);
for (const user of day7Users) {
await bot.sendMessage(user.telegramId,
'专属优惠:\n\n' +
'你已经关注我们一周了!作为感谢,我们为你准备了一份特别优惠:\n\n' +
'免费广告账户诊断(价值 $200)\n\n' +
'限时 48 小时,点击下方按钮预约。',
{
reply_markup: {
inline_keyboard: [[
{ text: '立即预约', callback_data: 'book_audit' }
]]
}
}
);
}
}
定时内容推送
// 每日行业简讯(上午 9 点推送)
async function sendDailyBriefing() {
const briefing = await generateDailyBriefing(); // 从数据源获取
const subscribers = await getActiveSubscribers();
for (const user of subscribers) {
await bot.sendMessage(user.telegramId,
`每日行业简讯 | ${new Date().toLocaleDateString('zh-CN')}\n\n` +
briefing,
{
reply_markup: {
inline_keyboard: [
[{ text: '查看详情', url: briefing.detailUrl }],
[{ text: '取消订阅', callback_data: 'unsubscribe_daily' }]
]
}
}
);
// 避免触发 Telegram 速率限制
await sleep(50); // 每条消息间隔 50ms
}
}
速率限制处理
Telegram 对 Bot 有严格的速率限制:
- 同一聊天:每秒最多 1 条消息
- 不同聊天:每秒最多 30 条消息
- 群组消息:每分钟最多 20 条
class RateLimiter {
constructor(maxPerSecond = 25) {
this.queue = [];
this.processing = false;
this.interval = 1000 / maxPerSecond;
}
async send(chatId, text, options = {}) {
return new Promise((resolve, reject) => {
this.queue.push({ chatId, text, options, resolve, reject });
if (!this.processing) this.process();
});
}
async process() {
this.processing = true;
while (this.queue.length > 0) {
const { chatId, text, options, resolve, reject } = this.queue.shift();
try {
const result = await bot.sendMessage(chatId, text, options);
resolve(result);
} catch (error) {
if (error.response && error.response.statusCode === 429) {
// 被限流,等待后重试
const retryAfter = error.response.body.parameters.retry_after || 5;
await sleep(retryAfter * 1000);
this.queue.unshift({ chatId, text, options, resolve, reject });
} else {
reject(error);
}
}
await sleep(this.interval);
}
this.processing = false;
}
}
const rateLimiter = new RateLimiter(25);
第四步:数据追踪与分析
事件追踪系统
// 通用事件追踪
async function trackEvent(userId, eventType, metadata = {}) {
await db.collection('botEvents').add({
userId,
eventType,
metadata,
timestamp: new Date(),
date: new Date().toISOString().split('T')[0] // 用于聚合查询
});
}
// 追踪关键事件
// 用户加入
trackEvent(userId, 'user_joined', { source: referralCode || 'direct' });
// 菜单交互
trackEvent(userId, 'menu_click', { menu: 'services', item: 'meta_ads' });
// 内容查看
trackEvent(userId, 'content_viewed', { type: 'article', slug: 'meta-ads-guide' });
// 咨询申请
trackEvent(userId, 'consultation_requested', { budget: '$5k-$20k' });
// 付款完成
trackEvent(userId, 'payment_completed', { amount: 49.99, product: 'template_pack' });
核心运营指标
| 指标 | 计算方式 | 健康基准 |
|---|---|---|
| 日活跃率 | DAU / 总用户 | >10% |
| 消息打开率 | 已读 / 已发送 | >85% |
| 按钮点击率 | 点击 / 已读 | >10% |
| 咨询转化率 | 咨询数 / 总用户 | >3% |
| 7 日留存率 | 7天后活跃 / 新增 | >50% |
| 月流失率 | 屏蔽数 / 活跃用户 | <5% |
| 推荐系数 | 推荐加入 / 总新增 | >15% |
自动化报表
// 每周运营报表(自动发送给管理员)
async function generateWeeklyReport() {
const now = new Date();
const weekAgo = new Date(now - 7 * 24 * 60 * 60 * 1000);
const stats = {
newUsers: await countEvents('user_joined', weekAgo, now),
activeUsers: await countUniqueUsers(weekAgo, now),
totalMessages: await countEvents('message_sent', weekAgo, now),
buttonClicks: await countEvents('button_click', weekAgo, now),
consultations: await countEvents('consultation_requested', weekAgo, now),
payments: await sumPayments(weekAgo, now)
};
const report =
`周报 | ${weekAgo.toLocaleDateString()} - ${now.toLocaleDateString()}\n\n` +
`新增用户:${stats.newUsers}\n` +
`活跃用户:${stats.activeUsers}\n` +
`消息发送:${stats.totalMessages}\n` +
`按钮点击:${stats.buttonClicks}\n` +
`咨询申请:${stats.consultations}\n` +
`交易金额:$${stats.payments.toFixed(2)}\n\n` +
`点击率:${(stats.buttonClicks / stats.totalMessages * 100).toFixed(1)}%\n` +
`咨询转化率:${(stats.consultations / stats.activeUsers * 100).toFixed(1)}%`;
await bot.sendMessage(ADMIN_CHAT_ID, report);
}
第五步:部署与运维
推荐部署架构
用户 -> Telegram 服务器 -> Webhook -> 你的服务器
|
应用逻辑
|
数据库(Firestore)
|
定时任务(Cloud Scheduler)
部署清单
- 设置 HTTPS 域名(Webhook 必须是 HTTPS)
- 配置环境变量(Bot Token、数据库连接)
- 设置 Webhook URL
- 测试所有命令和交互流程
- 配置日志收集
- 设置错误监控告警
- 配置自动重启(PM2 或 Docker)
- 设置数据备份
- 测试速率限制处理
- 设定定时任务(欢迎序列、内容推送、报表)
监控要点
// 健康检查端点
app.get('/health', async (req, res) => {
try {
const botInfo = await bot.getMe();
const dbStatus = await checkDatabaseConnection();
res.json({
status: 'ok',
bot: botInfo.username,
database: dbStatus ? 'connected' : 'disconnected',
uptime: process.uptime(),
memory: process.memoryUsage()
});
} catch (error) {
res.status(500).json({ status: 'error', message: error.message });
}
});
常见问题与解决方案
Q: Bot 消息发送失败怎么办? A: 检查是否被用户屏蔽(错误码 403)、是否触发速率限制(错误码 429)。被屏蔽的用户标记为 inactive,速率限制按 retry_after 等待后重试。
Q: 如何处理用户发送的非文本消息?
A: 监听 photo、document、voice、location 等事件类型,根据业务需要分别处理或回复通用提示。
Q: Webhook 和 Polling 什么时候切换? A: 开发阶段用 Polling(简单、不需要域名),生产环境必须用 Webhook(高效、可靠、可扩展)。
Q: 如何处理并发? A: Telegram 可能同时发送多个 Webhook 请求。确保你的数据库操作是原子性的,使用事务处理关键数据更新。
总结
搭建一个 Telegram 机器人的技术门槛并不高——几个小时就能完成基础功能。真正的挑战在于设计好的用户体验和运营自动化流程。
核心原则:
- 第一印象:欢迎流程决定了用户是否留下
- 持续价值:定期推送有价值的内容,不要只推销
- 数据驱动:追踪每一个交互,用数据优化流程
- 容错设计:处理好所有异常情况,保证 Bot 7x24 稳定运行
从一个简单的菜单 Bot 开始,逐步添加自动化流程和高级功能。不要试图一次做完所有事情。
需要专业团队帮你搭建和运营 Telegram 机器人?联系 RedClaw 获取定制化的 Bot 开发与运营方案。