VISEN GROUP
Technology & Engineering

Tích hợp webhook thông báo đơn hàng mới về Telegram: 6 bước không tốn một xu

September 23, 20265 min readUncategorized

Khách vừa bấm đặt hàng trên website, 5 giây sau điện thoại của bạn rung lên một tin nhắn Telegram báo đầy đủ: tên khách, số điện thoại, địa chỉ và tổng tiền. Không cần F5 liên tục trang quản trị, không cần tốn tiền mua gói SMS thông báo, và quan trọng nhất: bạn hoàn toàn có thể tự dựng luồng này trong vòng 30 phút.

Bài viết này hướng dẫn chi tiết cách dùng Telegram Bot kết hợp Webhook để nhận thông báo đơn hàng tức thì, kèm đoạn mã mẫu sẵn sàng sử dụng.

Vì sao lại là Telegram mà không phải email hay SMS?

Khi vận hành một website bán hàng nhỏ, việc biết có đơn mới càng sớm càng giúp bạn gọi xác nhận và đóng gói nhanh, giảm tỷ lệ hủy đơn đáng kể. Tuy nhiên:

  • Email: Rất hay rơi vào tab Promotions (Quảng cáo) hoặc hòm thư rác (Spam). Đôi khi thông báo trên điện thoại bị trễ từ 5 đến 15 phút do cơ chế đồng bộ nền.
  • SMS Brandname: Tốn phí duy trì hàng tháng và chi phí cho từng tin nhắn gửi đi.
  • Telegram: Hoàn toàn miễn phí, tốc độ gửi gần như ngay lập tức (dưới 1 giây), hỗ trợ định dạng chữ đậm/nghiêng dễ đọc, và có thể gom nhiều nhân viên vào chung một nhóm để cùng trực đơn.

Bước 1: Tạo Telegram Bot và lấy Token

Đầu tiên, bạn cần tạo một “con bot” đại diện cho website của mình trên Telegram:

  1. Mở ứng dụng Telegram, tìm kiếm tài khoản chính thức tên là @BotFather (có dấu tích xanh).
  2. Gửi lệnh /newbot.
  3. Nhập tên hiển thị cho bot (ví dụ: Shop X Thông Báo Đơn).
  4. Nhập username cho bot kết thúc bằng chữ bot (ví dụ: shopx_order_bot).
  5. BotFather sẽ trả về một chuỗi HTTP API Token có dạng:
  6. 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ
    • Hãy lưu lại mã này thật kỹ và không để lộ ra ngoài.

Bước 2: Lấy Chat ID để bot biết gửi tin nhắn cho ai

Bot không thể tự tiện nhắn tin cho người dùng nếu chưa được cấp phép. Bạn cần kích hoạt cuộc trò chuyện:

  • Nếu muốn nhận tin nhắn riêng: Tìm bot bạn vừa tạo theo username, bấm Start (hoặc gửi tin nhắn /start).
  • Nếu muốn nhận tin trong nhóm làm việc: Thêm bot vào nhóm nội bộ của bạn và cấp quyền gửi tin.

Để lấy Chat ID:

  • Truy cập đường dẫn sau trên trình duyệt (thay <BOT_TOKEN> bằng mã bạn vừa lấy ở Bước 1):
[https://api.telegram.org/bot](https://api.telegram.org/bot)<BOT_TOKEN>/getUpdates
  • Tìm cụm "chat":{"id":12345678,...}. Chuỗi số đó chính là CHAT_ID của bạn (nếu là nhóm thì thường sẽ có thêm dấu trừ phía trước, ví dụ: -100123456789).

Bước 3: Viết hàm gửi tin nhắn qua Telegram Bot API

Telegram cung cấp một API rất đơn giản để gửi tin nhắn: gọi phương thức POST tới sendMessage.

Dưới đây là đoạn mã ví dụ viết bằng Node.js / JavaScript (hoặc dùng trong API route của Next.js / Express):

JavaScript

async function sendTelegramAlert(orderData) {
  const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;
  const CHAT_ID = process.env.TELEGRAM_CHAT_ID;

  // Soạn nội dung thông báo định dạng HTML
  const message = `
🛒 <b>ĐƠN HÀNG MỚI #${orderData.orderId}</b>
━━━━━━━━━━━━━━━━━
👤 <b>Khách hàng:</b> ${orderData.customerName}
📞 <b>Số điện thoại:</b> ${orderData.phone}
📍 <b>Địa chỉ:</b> ${orderData.address}
💰 <b>Tổng thanh toán:</b> ${new Intl.NumberFormat('vi-VN', { style: 'currency', currency: 'VND' }).format(orderData.totalAmount)}
💳 <b>Phương thức:</b> ${orderData.paymentMethod}
━━━━━━━━━━━━━━━━━
👉 <i>Vui lòng vào trang quản trị kiểm tra và đóng gói đơn hàng.</i>
  `.trim();

  try {
    const response = await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        chat_id: CHAT_ID,
        text: message,
        parse_mode: 'HTML',
      }),
    });

    const result = await response.json();
    return result.ok;
  } catch (error) {
    console.error('Lỗi khi bắn tin Telegram:', error);
    return false;
  }
}

Bước 4: Đặt Webhook trigger vào đúng vòng đời của đơn hàng

Một sai lầm rất phổ biến là: Bắn tin nhắn ngay khi khách bấm nút submit form ở giao diện người dùng (frontend).

Điều này rất nguy hiểm vì:

  • Khách có thể bị trừ tiền hoặc lỗi mạng giữa chừng, đơn chưa ghi vào database mà bot đã báo thành công.
  • Kẻ xấu có thể mở F12 inspect công cụ mạng và gọi spam trực tiếp API của bot.

Quy tắc đúng: Chỉ kích hoạt webhook gửi Telegram ở tầng backend, ngay sau khi câu lệnh lưu đơn vào cơ sở dữ liệu hoàn tất thành công (order.save() hoặc INSERT INTO orders).

Ba điểm cần lưu ý để hệ thống chạy mượt mà

  1. Bọc hàm gửi bằng try...catch bất đồng bộ: Không để việc gọi API Telegram làm chặn luồng trả lời cho người dùng. Khách đặt hàng xong phải thấy màn hình “Đặt hàng thành công” ngay, việc gửi Telegram nên chạy dưới nền.
  2. Ẩn biến môi trường: Đặt TELEGRAM_BOT_TOKEN và TELEGRAM_CHAT_ID vào file .env, không bao giờ commit các giá trị này lên GitHub hay để lộ ở mã nguồn frontend.
  3. Thoát ký tự lạ (Sanitize input): Nếu dùng chế độ HTML hoặc Markdown, những ký tự đặc biệt như <, >, & trong tên hoặc ghi chú của khách có thể làm lỗi định dạng tin nhắn của Telegram. Hãy làm sạch chuỗi trước khi gắn vào template thông báo.

Chỉ với vài chục dòng code đơn giản và chi phí 0 đồng, bạn đã giải quyết triệt để vấn đề sót đơn hàng khi bán hàng online. Bạn có muốn điều chỉnh thêm tính năng kèm nút bấm “Xem chi tiết trên Admin” ngay dưới tin nhắn Telegram không?

Leave a Reply

Your email address will not be published. Required fields are marked *