Hướng dẫn tích hợp

Báo có qua Telegram: tiền về là cả nhóm biết

Cách nối tài khoản ngân hàng với Telegram để tiền về là chat riêng hoặc nhóm của team nhận tin ngay. Kèm cách tự dựng bot riêng bằng webhook cho dev.

Nhóm Telegram nhận tin báo có từ BankOpenAPI bot
Nội dung bài viết
  1. Tin báo có trông thế nào
  2. Chuẩn bị
  3. Nhận ở chat riêng
  4. Nhận ở nhóm của team
  5. Lọc bớt cho đỡ ồn
  6. Sửa nội dung tin
  7. Vài chuyện nên biết trước
  8. Phần cho dev: tự dựng bot riêng
  9. Bắt đầu

Telegram gần như là văn phòng thứ hai của dân bán hàng online. Nhóm chốt đơn, nhóm kho, nhóm kế toán, nhóm "ae mình" đủ cả. Vậy thì tiền về cũng nên báo luôn vào đó, đỡ phải chụp màn hình app ngân hàng gửi qua lại, cũng đỡ cảnh khách nhắn "chuyển rồi" mà cả team ngồi chờ một người check.

Bài này chỉ cách nối tài khoản ngân hàng với Telegram trên BankOpenAPI. Phần đầu dành cho người không code, phần cuối cho ai muốn tự dựng bot riêng.

Tin báo có trông thế nào

Mỗi lần có tiền vào tài khoản đã liên kết, bot gửi một tin kiểu này:

💰 +125.000 ₫ vào MB Bank •••• 7355
> QANIUD3812 THANH TOAN DON 1024
Chủ tài khoản: NGUYEN VAN A
Tài khoản nhận báo có: VQRQANIUD3812
Đơn hàng: DH-1024 · TTK7X2Q9
12:26:05, 05/11/2026 · Mã GD FT26309444562752

Dòng "Đơn hàng" chỉ hiện khi giao dịch đã khớp với một yêu cầu thanh toán. Tiền chuyển khoản thường, không gắn đơn nào, thì dòng đó tự biến mất chứ không để trống trơn.

Chuẩn bị

Bạn cần một tài khoản BankOpenAPI đã nạp lần đầu (từ 5.000đ) và đã liên kết ít nhất một tài khoản ngân hàng. Nếu chưa nạp lần nào thì đang có khuyến mại Mừng bạn mới, nạp từ 50k được tặng thêm 50%.

Telegram thì dùng tài khoản nào cũng được. Bot báo có là @bank_open_api_bot, bạn không phải tạo bot hay đụng tới BotFather.

Nhận ở chat riêng

Hợp với người bán một mình hoặc chủ shop muốn tự theo dõi.

  1. Trong app, vào Kênh báo có, bấm Thêm kênh rồi chọn Telegram.
  2. Đặt tên kênh cho dễ nhớ, ví dụ "Tiền về shop". Chọn tài khoản ngân hàng muốn báo, hoặc để mặc định là tất cả.
  3. Lưu xong, app hiện nút Mở Telegram. Trên máy tính thì có thêm mã QR, lấy điện thoại quét cũng được.
  4. Telegram mở chat với bot, bấm Start. Bot trả lời "Đã kết nối kênh báo có…" là xong.
  5. Quay lại app, mở kênh vừa tạo và bấm Gửi thử để chắc chắn tin đã tới.

Link kết nối chỉ dùng được một lần và hết hạn sau 15 phút. Lỡ để quá giờ thì bấm Tạo link mới, không sao cả.

Nhận ở nhóm của team

Cách này được dùng nhiều hơn, vì cả nhóm cùng thấy tiền về mà không ai phải chuyển tiếp.

Bước 1, 2 giống trên. Tới hộp thoại kết nối thì bấm Thêm bot vào nhóm thay vì Mở Telegram. Telegram hiện danh sách nhóm của bạn, chọn đúng nhóm rồi xác nhận. Bạn cần có quyền thêm thành viên trong nhóm đó.

Thường thì bot vào nhóm là tự nhắn "Đã kết nối" luôn. Có ba trường hợp nó im: bot đã ở sẵn trong nhóm từ trước, bạn thêm bot bằng tay qua ô tìm kiếm, hoặc nhóm bật chế độ chủ đề (topic). Khi đó app có sẵn một lệnh dạng:

/start@bank_open_api_bot <mã kết nối>

Bấm Sao chép, dán vào nhóm rồi gửi. Bot nhận lệnh là nối xong. Lệnh phải có đuôi @bank_open_api_bot, vì nhóm nào cũng có cả đống bot, Telegram cần biết lệnh này gửi cho ai.

Lọc bớt cho đỡ ồn

Shop nhiều đơn thì nhóm sẽ nhảy tin liên tục. Mỗi kênh có hai bộ lọc:

  • Chỉ báo cho một vài tài khoản ngân hàng, ví dụ tài khoản nhận tiền bán hàng thì báo, tài khoản cá nhân thì thôi.
  • Chỉ báo khoản từ một mức tiền trở lên.

Một tài khoản BankOpenAPI tạo được tối đa 10 kênh, thêm kênh không tốn thêm đồng nào. Nên chia kiểu này khá tiện: nhóm kế toán nhận hết mọi khoản, nhóm sale chỉ nhận khoản từ 500k để biết đơn to vừa về, chủ shop nhận riêng ở chat cá nhân.

Sửa nội dung tin

Không thích mẫu mặc định thì vào kênh, sửa mẫu tin. Có sẵn bốn mẫu để chọn nhanh: Đầy đủ, Gọn, Bán hàng và Kế toán. Muốn tự viết thì chèn biến trong ngoặc nhọn, ví dụ:

🛒 *Đơn {don_hang} đã thanh toán*
Số tiền: *{so_tien}*
> {noi_dung}
_{thoi_gian}_

Các biến dùng được: {so_tien}, {tai_khoan}, {chu_tai_khoan}, {so_nhan}, {noi_dung}, {thoi_gian}, {don_hang}, {ma_giao_dich}. Bọc dấu sao để in đậm, gạch dưới để in nghiêng, dòng mở đầu bằng > thành khung trích dẫn. Có khung xem trước, sửa tới đâu thấy tới đó.

Có một chi tiết hay bị hỏi: khách ghi gì vào nội dung chuyển khoản thì tin hiện đúng chữ đó, kể cả dấu sao hay gạch dưới. Người chuyển tiền không chèn được link hay định dạng lạ vào nhóm của bạn.

Vài chuyện nên biết trước

Telegram tự giới hạn bot gửi khoảng 20 tin một phút vào cùng một nhóm. Shop bình thường không bao giờ chạm tới, nhưng nếu bạn chạy flash sale cả nghìn đơn trong vài phút thì nên chia ra nhiều nhóm, hoặc để hệ thống của bạn nhận webhook rồi tự gom tin.

Lỡ kick bot khỏi nhóm thì kênh hiện lỗi trong app, tiền vẫn về bình thường, chỉ là không ai báo. Thêm lại bot vào đúng nhóm đó rồi bấm Gửi thử là chạy lại. Nhóm đã xóa hẳn thì tạo kênh mới.

Hết lượt miễn phí của tháng mà số dư về 0 thì báo có tạm dừng ở mọi kênh, Telegram cũng vậy. Nạp thêm là chạy tiếp.

Phần cho dev: tự dựng bot riêng

Muốn bot mang tên shop mình, hoặc muốn kèm nút bấm, tra thêm dữ liệu đơn trước khi báo, thì bỏ qua kênh có sẵn và đi đường webhook. BankOpenAPI bắn sự kiện transaction.received về hệ thống của bạn mỗi khi tiền vào, phần gửi Telegram bạn tự làm.

Thêm endpoint webhook trong app, lấy signing secret (dạng whsec_…), rồi viết handler. Ví dụ dưới đây dùng thư viện bankopenapi để verify chữ ký, chạy được trên Next.js, Cloudflare Workers hay bất cứ đâu có Request chuẩn:

import { verifyWebhook, WebhookVerificationError } from 'bankopenapi';

export async function POST(req: Request) {
  const body = await req.text(); // giữ body thô để verify
  let event;
  try {
    event = await verifyWebhook(body, req.headers, process.env.BANKOPENAPI_WEBHOOK_SECRET!);
  } catch (err) {
    if (err instanceof WebhookVerificationError) return new Response('Invalid signature', { status: 400 });
    throw err;
  }

  if (event.type === 'transaction.received') {
    const t = event.data;
    const text = `+${t.amount.toLocaleString('vi-VN')}đ vào ${t.bankAccount.label}\n${t.content}`;
    await fetch(`https://api.telegram.org/bot${process.env.TG_BOT_TOKEN}/sendMessage`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ chat_id: process.env.TG_CHAT_ID, text }),
    });
  }
  return new Response(null, { status: 200 });
}

Ba điều rút ra sau khi tự viết thử:

  1. Gửi tin dạng chữ thường, đừng bật parse_mode rồi nhét thẳng content vào. Nội dung chuyển khoản do người chuyển tự gõ, có ký tự lạ là Telegram từ chối cả tin.
  2. Webhook có thể tới hơn một lần khi được gửi lại. Lưu event.id đã xử lý để nhóm không nhận hai tin cho cùng một khoản.
  3. Trả 200 nhanh. Việc nào chậm, như tra đơn hay gọi API khác, thì đẩy sang hàng đợi rồi làm sau.

Chưa muốn đụng tiền thật thì bật Sandbox: tạo giao dịch giả, webhook gửi thật, test bot thoải mái. Danh sách trường của sự kiện xem ở tài liệu webhook.

Bắt đầu

Đăng ký tài khoản, nạp lần đầu, liên kết ngân hàng rồi vào Kênh báo có thêm Telegram. Kẹt bước nào cứ hỏi trong nhóm hỗ trợ Telegram hoặc mail teams@bankopenapi.com.

Bắt đầu với BankOpenAPI

Đăng ký tài khoản, liên kết tài khoản ngân hàng và nhận webhook báo có đầu tiên. Cần tư vấn thì nhắn chúng tôi.