← 返回列表

零基础开发Telegram自动发卡机器人:TG Bot API与Node.js实战教程

分类:Telegram频道发布于:2026-08-05

很多人想做一个 Telegram 自动发卡机器人:用户在 TG 里点击购买、完成支付后,机器人自动发送卡密或兑换码,整个过程无需人工值守。

但零基础开发时,最容易踩坑的地方并不是“怎么发消息”,而是 Bot API 流程设计、订单状态管理、卡密库存安全、支付回调校验 这几件事。

本文将用 Node.js 从 0 到 1 拆解一个 Telegram 自动发卡机器人的核心开发思路,适合个人项目、数字产品交付、会员兑换码分发、课程激活码发放等合规场景。

🚀 一、自动发卡机器人的基本工作原理

Telegram 自动发卡机器人本质上是一个运行在服务器上的 Node.js 程序,它通过 Telegram Bot API 接收用户指令,并根据业务逻辑返回菜单、商品、订单和卡密。

完整流程通常是:用户发送 /start,机器人展示商品列表,用户选择商品,系统创建订单,用户完成支付,后端确认订单成功后,机器人自动发送对应卡密。

为了降低开发难度,建议零基础阶段先做一个 手动确认支付版,跑通整体流程后,再接入 Stripe、NOWPayments、CryptoBot、支付宝当面付等支付回调。

核心模块拆分

一个稳定的自动发卡机器人至少包含五个模块:机器人交互、商品管理、订单管理、库存管理、发货通知。

如果你希望后期扩展会员系统、代理分销、优惠码和数据统计,前期就要把代码结构拆清楚,避免所有逻辑都堆在一个文件里。

推荐目录结构:

tg-card-bot/
├── index.js              # 机器人入口
├── config.js             # Token 与配置
├── data/
│   ├── products.json     # 商品列表
│   ├── cards.json        # 卡密库存
│   └── orders.json       # 订单数据
├── services/
│   ├── productService.js # 商品服务
│   ├── orderService.js   # 订单服务
│   └── cardService.js    # 发卡服务
└── package.json

🧩 二、创建 Telegram Bot 并获取 Token

开发 Telegram 机器人第一步,是在 Telegram 里找到官方机器人 @BotFather,它负责创建和管理所有 Bot。

向 BotFather 发送 /newbot,按提示填写机器人名称和用户名,成功后你会获得一串 Bot Token,这就是后端调用 Bot API 的钥匙。

BotFather 操作流程:

1. 打开 Telegram,搜索 @BotFather
2. 发送 /newbot
3. 输入机器人显示名称,例如:自动发卡助手
4. 输入机器人用户名,例如:my_card_shop_bot
5. 保存返回的 Bot Token

注意,Token 绝对不能公开到前端页面、GitHub 仓库或群聊中。

一旦 Token 泄露,别人就可以控制你的机器人发送消息、读取更新,甚至影响订单交付。

⚙️ 三、初始化 Node.js 项目

Node.js 非常适合开发 Telegram Bot,因为生态成熟、部署方便、异步处理能力强。

本文使用 node-telegram-bot-api 这个库,它封装了 Telegram Bot API,零基础也能快速上手。

mkdir tg-card-bot
cd tg-card-bot
npm init -y
npm install node-telegram-bot-api dotenv

接着创建 .env 文件,用环境变量保存 Token,避免硬编码到业务代码里。

BOT_TOKEN=你的Telegram机器人Token
ADMIN_ID=你的Telegram数字ID

ADMIN_ID 用于后续管理员审核订单、补发卡密、查看库存等操作。

💬 四、实现 /start 菜单与商品展示

用户进入机器人后,第一屏决定了转化率。

建议菜单简洁明确,直接提供 查看商品、我的订单、联系客服、使用说明 四个入口。

require('dotenv').config();
const TelegramBot = require('node-telegram-bot-api');

const bot = new TelegramBot(process.env.BOT_TOKEN, { polling: true });

bot.onText(/\/start/, async (msg) => {
  const chatId = msg.chat.id;

  await bot.sendMessage(chatId, '欢迎使用自动发卡机器人,请选择操作:', {
    reply_markup: {
      inline_keyboard: [
        [{ text: '🛒 查看商品', callback_data: 'show_products' }],
        [{ text: '📦 我的订单', callback_data: 'my_orders' }],
        [{ text: '👨‍💻 联系客服', url: 'https://t.me/your_service' }]
      ]
    }
  });
});

这里使用的是 inline_keyboard,也就是 Telegram 内联按钮。

相比让用户输入编号,按钮交互更适合移动端,能明显降低误操作。

设计商品数据

零基础项目可以先用 JSON 文件保存商品,后期再迁移到 MySQL、PostgreSQL 或 MongoDB。

[
  {
    "id": "vip_30",
    "name": "30天会员兑换码",
    "price": 19.9,
    "desc": "适用于官方会员系统激活"
  },
  {
    "id": "course_key",
    "name": "课程激活码",
    "price": 49.9,
    "desc": "购买后自动发送一次性激活码"
  }
]

商品 ID 不建议使用中文,最好用英文、数字和下划线,方便后续写订单和库存逻辑。

电报精准找群黑科技提示:

由于 Telegram 官方搜索对中文支持极差,很多优质的推广、技术和资源群组隐藏极深。如果你正在寻找相关的活跃社群,强烈推荐使用本站首页的 【TTSO - Telegram 智能搜索 Bot】。作为目前最好用的电报综合搜索导航,只需输入关键词,即可秒级触达数十万个精选 TG 中文群组、资源频道。一键直达,帮你节省 90% 的找群时间!

🧾 五、创建订单与手动确认支付

订单系统是自动发卡机器人的核心。

即使你暂时不接支付接口,也要保存订单号、用户 ID、商品 ID、金额、状态和创建时间。

function createOrder(userId, productId, amount) {
  return {
    orderId: 'OD' + Date.now(),
    userId,
    productId,
    amount,
    status: 'pending',
    createdAt: new Date().toISOString()
  };
}

当用户点击购买按钮时,机器人创建待支付订单,并提示用户完成付款。

在手动确认版本中,管理员收到通知后点击确认按钮,系统再执行发卡动作。

await bot.sendMessage(process.env.ADMIN_ID, 
  `新订单待确认:\n订单号:${order.orderId}\n用户:${order.userId}\n金额:${order.amount}`,
  {
    reply_markup: {
      inline_keyboard: [
        [{ text: '✅ 确认发货', callback_data: `confirm_${order.orderId}` }]
      ]
    }
  }
);

这个设计的好处是安全、直观,适合初期测试业务闭环。

等订单量稳定后,再把确认动作替换成支付平台的 webhook 回调即可。

🔐 六、实现卡密库存与自动发货

卡密库存必须做到 一张卡只发一次,否则会出现重复销售、售后纠纷和用户投诉。

最简单的库存结构,是给每张卡密设置 used 字段,发货后立即标记为 true。

[
  {
    "productId": "vip_30",
    "code": "VIP-2026-ABCD-001",
    "used": false
  },
  {
    "productId": "vip_30",
    "code": "VIP-2026-ABCD-002",
    "used": false
  }
]

发卡函数需要先查找未使用卡密,再标记已用,最后把卡密发送给用户。

function getAvailableCard(cards, productId) {
  const card = cards.find(item => item.productId === productId && item.used === false);
  if (!card) return null;

  card.used = true;
  card.usedAt = new Date().toISOString();
  return card;
}

生产环境中,不建议长期使用 JSON 文件存库存。

当并发订单增加时,应使用数据库事务或原子更新,确保同一张卡不会被两个订单同时取走。

发货消息示例:

✅ 支付已确认,订单发货成功!

订单号:OD1700000000
商品:30天会员兑换码
卡密:VIP-2026-ABCD-001

请妥善保存卡密,如遇无法激活,请联系客服处理。

🛡️ 七、安全与合规:比功能更重要

自动发卡机器人涉及交易和数字凭证交付,安全设计必须放在第一位。

首先,Bot Token、支付密钥、数据库密码都应存放在环境变量中,并限制服务器访问权限。

其次,订单状态必须防止重复确认,已完成订单不能再次发货。

如果接入支付 webhook,一定要校验签名,不能只根据前端传来的“已支付”参数发卡。

订单状态建议:

pending   = 待支付
paid      = 已支付,待发货
delivered = 已发货
cancelled = 已取消
refunded  = 已退款

同时,销售内容必须合法合规,不应使用机器人售卖侵权账号、盗版资源、诈骗工具、恶意软件或任何违反平台规则的商品。

长期来看,合规经营、清晰售后和稳定交付,才是机器人项目能持续运行的关键。

☁️ 八、部署上线与稳定运行建议

开发完成后,你需要把 Node.js 程序部署到一台能够长期在线的服务器上。

常见选择包括 VPS、云服务器、Railway、Render、Fly.io 等,正式项目更推荐使用独立 VPS。

使用 PM2 保持机器人常驻运行:

npm install pm2 -g
pm2 start index.js --name tg-card-bot
pm2 save
pm2 startup

如果使用 polling 模式,配置简单,适合新手;如果订单量较大,建议改为 webhook 模式,响应更快,也更节省服务器资源。

此外,还要定期备份订单、库存和用户数据,避免服务器故障导致无法售后。

上线前检查清单

上线前至少检查 Token 是否隐藏、库存是否充足、订单是否能查回、管理员通知是否正常、重复点击是否会重复发货。

如果这些细节没有处理好,即使机器人能运行,也很容易在真实交易中出现问题。

📌 九、总结:从能用到好用的关键路径

零基础开发 Telegram 自动发卡机器人,最合理的路线不是一开始就追求复杂功能,而是先完成 菜单展示、下单、确认、发卡、记录 这条最小闭环。

当基础流程稳定后,再逐步增加在线支付、库存预警、订单查询、优惠码、会员分层和数据后台。

真正高质量的 TG Bot,不只是能自动回复,更要具备稳定性、安全性、可维护性和清晰的用户体验。

❓ 常见问题解答(FAQ)

零基础可以开发 Telegram 自动发卡机器人吗?

可以,但建议先掌握 Node.js 基础、JSON 数据读写、异步函数和 Telegram Bot API 的基本概念。

如果直接接入复杂支付系统,学习成本会明显增加,建议先做手动确认版。

自动发卡机器人必须使用数据库吗?

测试阶段可以使用 JSON 文件,但正式上线建议使用数据库。

数据库可以更安全地处理并发订单、库存锁定、订单查询和售后追踪。

Telegram Bot 使用 polling 还是 webhook 更好?

新手建议先用 polling,因为不需要配置 HTTPS 域名,启动程序就能接收消息。

当用户量变大后,webhook 的实时性和资源利用率更好,更适合生产环境。

如何避免卡密重复发放?

核心是发货前检查订单状态,取卡时使用原子操作,并在发货后立即更新库存状态。

正式环境应使用数据库事务或唯一约束,避免高并发下同一张卡被重复读取。

自动发卡机器人可以售卖任何东西吗?

不可以,机器人只是交付工具,销售内容仍必须遵守当地法律、Telegram 平台规则和支付平台政策。

建议只用于合规数字产品、会员兑换码、课程授权码、软件许可证等正规业务场景。

Telegram搜索入口客服ID@TTSO联系