Thu tiền bot Telegram với VietQR: Hướng dẫn AgentPay

2026-08-13 · AgentPay VN

agentpayvietqrtelegram botpythonthanh toán

Bạn đang chạy bot Telegram bán hàng nhưng chưa có cách nào nhận tiền hiệu quả?

Giả sử bạn vừa tạo một bot Telegram bán khoá học lập trình, thực phẩm online hoặc dịch vụ tư vấn. Khách hàng đủ muốn mua, nhưng khi tới bước thanh toán, bạn phải:

Kết quả? Bạn mất khách, bot bị bỏ ngỏ sau bước lựa chọn sản phẩm, doanh thu giảm 30-40%. Vấn đề là không có giải pháp thanh toán nhanh gọn, trực tiếp vào tài khoản, mà vẫn tự động hóa.

Đây là lúc AgentPay VN xuất hiện. Trong bài này, mình sẽ chỉ bạn cách:

  1. Tích hợp AgentPay vào bot Telegram bằng Python
  2. Tạo QR code thanh toán VietQR tự động
  3. Xác nhận thanh toán ngay khi khách hàng chuyển tiền
  4. Tự động gửi sản phẩm/dịch vụ sau khi nhận tiền

AgentPay VN là gì? Tại sao chọn nó?

AgentPay VN là một SDK Python open-source (MIT) cho phép AI agent và bot thu tiền thông qua VietQR. Điểm khác biệt quan trọng:

Nó ra đời vì hiện nay Việt Nam có VietQR (chuẩn QR mở), nhưng không có SDK nào cho phép bot/AI agent tận dụng. AgentPay fill vào chỗ trống này.


So sánh: AgentPay vs các cách khác

Phương pháp Chi phí Tự động hóa Bảo mật Độ phức tạp
Chuyển khoản thủ công 0% ❌ Không ⭐⭐⭐ Dễ
Ví điện tử (Momo, ZaloPay) 1-2% ✅ Có ⭐⭐⭐ Trung bình
Cổng thanh toán (Stripe, VNPay) 2-4% ✅ Có ⭐⭐⭐⭐⭐ Phức tạp
AgentPay VN (VietQR) 0% ✅ Có ⭐⭐⭐⭐ Dễ

Kết luận: AgentPay là best choice nếu bạn muốn 0% phí, tự động, nhanh chóng, dễ setup.


Cài đặt AgentPay VN: Bắt đầu trong 5 phút

Bước 1: Cài đặt SDK

pip install agentpay-vn

Xong! Chỉ cần 1 lệnh. Không cần key API phức tạp, không cần đăng ký tài khoản merchant.

Bước 2: Cài đặt MCP Server (tuỳ chọn, cho AI agents)

Nếu bạn dùng Claude hoặc AI agent khác:

pip install agentpay-mcp

Bước 3: Kiểm tra cài đặt

from agentpay_vn import create_payment_request
print("AgentPay VN cài đặt thành công!")

Quy trình 3 bước: Từ yêu cầu đến xác nhận thanh toán

AgentPay hoạt động theo 1 quy trình rõ ràng:

Bước 1: create_payment_request
    ↓
Bước 2: send checkout_url (gửi QR tới khách)
    ↓
Bước 3: await_settlement (chờ xác nhận từ ngân hàng)

Mỗi bước là 1 hàm, mỗi hàm có 1 nhiệm vụ rõ ràng.


Code thực tế: Bot Telegram bán khoá học với AgentPay

Ví dụ: Quán cà phê bán cà phê online

Giả sử bạn có bot Telegram để khách đặt cà phê:

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes
from agentpay_vn import create_payment_request, await_settlement
import uuid

# Lưu trữ đơn hàng tạm (nên dùng database thực)
orders = {}

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    """Khách chọn sản phẩm"""
    keyboard = [
        [InlineKeyboardButton("Cà phê đen - 25k", callback_data="product_1")],
        [InlineKeyboardButton("Cà phê sữa - 30k", callback_data="product_2")],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_text(
        "☕ Chào mừng đến quán của mình! Chọn sản phẩm:",
        reply_markup=reply_markup
    )

async def handle_product_selection(update: Update, context: ContextTypes.DEFAULT_TYPE):
    """Khách chọn sản phẩm → tạo yêu cầu thanh toán"""
    query = update.callback_query
    await query.answer()

    # Xác định sản phẩm
    product_map = {
        "product_1": {"name": "Cà phê đen", "price": 25000},
        "product_2": {"name": "Cà phê sữa", "price": 30000},
    }
    product = product_map[query.data]

    # Bước 1: Tạo yêu cầu thanh toán
    # create_payment_request(amount, description, merchant_bank_account, merchant_name)
    order_id = str(uuid.uuid4())[:8]
    payment_request = create_payment_request(
        amount=product["price"],
        description=f"Mua {product['name']} - Quán cà phê ABC",
        merchant_bank_account="0123456789",  # STK của bạn
        merchant_name="Quán Cà Phê ABC"
    )

    # Lưu đơn hàng
    orders[order_id] = {
        "user_id": query.from_user.id,
        "product": product,
        "payment_request": payment_request,
        "status": "pending"
    }

    # Bước 2: Gửi QR code tới khách
    checkout_url = payment_request["checkout_url"]
    qr_image = payment_request["qr_data_url"]  # Base64 QR image

    await query.edit_message_text(
        text=f"✅ Bạn chọn: {product['name']} ({product['price']}đ)\n\n"
             f"Quét mã QR dưới đây để thanh toán:\n"
             f"[QR Image sẽ hiển thị ở đây]\n\n"
             f"Hoặc mở link: {checkout_url}\n\n"
             f"Mã đơn: {order_id}"
    )

    # Bước 3: Chờ xác nhận thanh toán (async, không block)
    # Thường chạy trong background task/webhook
    context.application.create_task(
        confirm_payment(order_id, context, query.from_user.id)
    )

async def confirm_payment(order_id: str, context: ContextTypes.DEFAULT_TYPE, user_id: int):
    """Chờ xác nhận thanh toán từ ngân hàng"""
    import asyncio

    order = orders[order_id]
    payment_request = order["payment_request"]

    try:
        # await_settlement(payment_request, timeout=300)  # Chờ tối đa 5 phút
        # Dùng bank feed để xác nhận (nên tích hợp webhook thực tế)
        settlement = await_settlement(
            payment_request=payment_request,
            timeout=300
        )

        # Thanh toán thành công!
        order["status"] = "confirmed"
        await context.bot.send_message(
            chat_id=user_id,
            text=f"✅ Thanh toán thành công!\n\n"
                 f"Sản phẩm: {order['product']['name']}\n"
                 f"Số tiền: {order['product']['price']}đ\n\n"
                 f"Cảm ơn! Hẹn gặp lại 😊"
        )

    except Exception as e:
        # Timeout hoặc lỗi
        order["status"] = "failed"
        await context.bot.send_message(
            chat_id=user_id,
            text=f"❌ Thanh toán chưa được xác nhận. Vui lòng thử lại.\nLỗi: {str(e)}"
        )

# Setup bot
app = Application.builder().token("YOUR_TELEGRAM_TOKEN").build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CallbackQueryHandler(handle_product_selection))

if __name__ == "__main__":
    app.run_polling()

Giải thích từng phần chính:


Tích hợp MCP Server với Claude

Nếu bạn dùng Claude hoặc AI agent khác, có thể cấu hình MCP:

{
  "mcpServers": {
    "agentpay-vn": {
      "command": "python",
      "args": ["-m", "agentpay_mcp"],
      "env": {
        "MERCHANT_BANK_ACCOUNT": "0123456789",
        "MERCHANT_NAME": "Quán Cà Phê ABC"
      }
    }
  }
}

Sau đó, Claude có thể:

User: "Tạo yêu cầu thanh toán 50k cho khóa học"

Claude sẽ gọi agentpay_mcp.create_payment_request() tự động
rồi trả lại QR code cho user.

Kịch bản thực tế: Shop online bán tài khoản game

Giả sử bạn chạy 1 shop bán tài khoản game (Liên Minh, Valorant, etc.). Quy trình:

  1. Khách chọn tài khoản → Bot hiển thị danh sách & giá
  2. Khách click "Mua" → AgentPay tạo QR code VietQR
  3. Khách quét QR → Tiền vào tài khoản ngân hàng của bạn ngay lập tức
  4. Bank feed xác nhận → Bot tự động gửi tài khoản game cho khách qua DM Telegram
  5. Khách nhận hàng → Bạn không phải làm gì thêm

Lợi ích: - 0% phí (so với Momo/ZaloPay là 1-2%) - Khách hàng thấy tài khoản ngay, không đợi xác nhận thủ công - Bạn không phải tương tác thủ công gì - Tiền vào tài khoản thực, không mất trên đường


Nên làm gì & Không nên làm gì

✅ Nên ❌ Không nên
Dùng webhook/bank feed để xác nhận (không polling) Polling liên tục (tốn CPU, chậm)
Lưu order_id để track đơn hàng Xóa payment_request trước khi xác nhận
Test trên staging trước khi dùng STK thực Deploy trực tiếp vào production
Tạo separate payment_request cho mỗi đơn Tái sử dụng QR code cũ cho đơn mới
Timeout hợp lý (5 phút cho cà phê, 30 phút cho khóa học) Timeout quá ngắn hoặc quá dài

FAQ: Câu hỏi thường gặp

1. AgentPay có lưu tiền của tôi không?

Không. AgentPay không bao giờ lưu tiền. QR code VietQR luôn trỏ thẳng tới STK ngân hàng của bạn. Tiền khách gửi đi trực tiếp vào tài khoản, không qua AgentPay. Chúng tôi chỉ là "người môi giới" giúp bạn tạo QR và xác nhận thanh toán.

2. Mất bao lâu để xác nhận thanh toán?

Thường 2-5 phút tuỳ ngân hàng. AgentPay dùng bank feed (kết nối trực tiếp với ngân hàng), không phải polling HTTP. Nên xác nhận nhanh và đáng tin cậy. Nếu muốn nhanh hơn, một số ngân hàng hỗ trợ webhook realtime (sắp integrate vào SDK).

3. Cần đăng ký tài khoản merchant gì không?

Không. Chỉ cần 1 STK ngân hàng thường. Không cần VCB merchant, không cần Stripe account, không cần API key phức tạp. Mục tiêu của AgentPay là loại bỏ complexity.

4. Có hỗ trợ ngân hàng nào?

AgentPay hỗ trợ VietQR (chuẩn QR mở của các ngân hàng Việt). Tức là mọi ngân hàng tham gia VietQR đều được. Những ngân hàng lớn như VCB, VIB, ACB, TPB, etc. đều hỗ trợ. Chi tiết xem tại https://agentpay.servicesai.vn/v1/docs.


Tóm tắt nhanh


Bắt đầu ngay hôm nay

Bạn đã sẵn sàng? Đây là 3 bước để bắt đầu:

  1. Cài SDK: pip install agentpay-vn
  2. Xem docs đầy đủ: https://agentpay.servicesai.vn/v1/docs
  3. Clone ví dụ: https://github.com/phuocdu/agentpay-vn

Sau đó, copy code ở phần "Code thực tế" trên vào bot Telegram của bạn, thay YOUR_TELEGRAM_TOKEN và STK ngân hàng, rồi chạy. Trong 15 phút, bot bạn sẽ có khả năng nhận tiền tự động.

Nếu gặp vấn đề gì, issues GitHub luôn open: https://github.com/phuocdu/agentpay-vn/issues

Chúc bạn code vui vẻ! ☕🚀

Bắt đầu →

← Tất cả bài