Skip to main content
RedClaw
返回博客
automation

Telegram 机器人搭建:从零到自动化运营

RedClaw Team
2026/3/14
10 min read

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 管理工具:

  1. 在 Telegram 中搜索 @BotFather
  2. 发送 /newbot 命令
  3. 输入 Bot 的显示名称(例如:"智能运营助手")
  4. 输入 Bot 的用户名(必须以 bot 结尾,例如 smart_ops_bot
  5. 保存返回的 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: 监听 photodocumentvoicelocation 等事件类型,根据业务需要分别处理或回复通用提示。

Q: Webhook 和 Polling 什么时候切换? A: 开发阶段用 Polling(简单、不需要域名),生产环境必须用 Webhook(高效、可靠、可扩展)。

Q: 如何处理并发? A: Telegram 可能同时发送多个 Webhook 请求。确保你的数据库操作是原子性的,使用事务处理关键数据更新。

总结

搭建一个 Telegram 机器人的技术门槛并不高——几个小时就能完成基础功能。真正的挑战在于设计好的用户体验和运营自动化流程。

核心原则:

  1. 第一印象:欢迎流程决定了用户是否留下
  2. 持续价值:定期推送有价值的内容,不要只推销
  3. 数据驱动:追踪每一个交互,用数据优化流程
  4. 容错设计:处理好所有异常情况,保证 Bot 7x24 稳定运行

从一个简单的菜单 Bot 开始,逐步添加自动化流程和高级功能。不要试图一次做完所有事情。


需要专业团队帮你搭建和运营 Telegram 机器人?联系 RedClaw 获取定制化的 Bot 开发与运营方案。


了解我们的营销自动化服务 →

分享:

让你的广告预算发挥最大效益

从帐号养成到数据追踪,一站式搞定。

  • 专属客户经理,实时优化投放策略
  • 完整追踪架构,每一分钱花得明明白白
  • 跨平台投放经验,Meta / Google / TikTok

免費獲取您的廣告健檢報告

讓我們的專家分析您的廣告帳戶,找出浪費預算的關鍵問題。

100% 免費48 小時內回覆無綁約

📬 订阅电子报

每周一封,投放实战、行业趋势、工具教程。不灌水,纯干货。

我们不会分享你的 Email。随时可以取消订阅。