Thu tiền từ bot Telegram bằng VietQR và AgentPay

2026-08-20 · AgentPay VN

agentpayvietqrtelegrampythonai-agent

Bài toán thực tế: Bạn là ai và tại sao lại cần thu tiền từ bot?

Hình dung một ngày bình thường: bạn vừa tạo một bot Telegram để bán khoá học lập trình trực tuyến. Bạn nhận được 15 tin nhắn từ khách hỏi mua khoá "Làm chủ Python trong 30 ngày" với giá 299.000 đ. Vấn đề là: làm sao nhận được tiền từ họ mà không cần tích hợp Stripe (phí quốc tế cao), không cần Paypal (phức tạp), và chắc chắn không phải hỏi khách chuyển tiền thủ công?

Or một kịch bản khác: bạn là chủ quán cà phê, muốn bot Telegram giúp khách đặt hàng và thanh toán ngay tức thì thay vì phải chuyển khoản qua tin nhắn riêng biệt.

Đó chính là lúc AgentPay VN trở nên cực kỳ hữu ích. Nó giúp bạn nhận thanh toán VietQR (phổ biến nhất Việt Nam) mà hoàn toàn không giữ tiền — tiền chuyển thẳng vào tài khoản ngân hàng của bạn.


Tại sao AgentPay lại khác biệt?

Có rất nhiều SDK thanh toán, nhưng AgentPay được thiết kế đặc biệt cho AI agentsbots. Ba điểm nổi bật:

  1. Không giữ tiền: AgentPay chỉ tạo QR code trỏ trực tiếp tới tài khoản ngân hàng của bạn. Khác với các nền tảng kiếm lời từ việc giữ tiền khách, AgentPay MIT License (open-source) không lấy commission.

  2. Xác nhận thanh toán tự động: Sau khi khách quét QR và chuyển tiền, bank feed (kết nối ngân hàng thực) tự động xác nhận settlement, bot lập tức biết tiền đã về.

  3. Tích hợp với MCP server: Bạn có thể dùng với Claude hay bất kỳ AI nào hỗ trợ MCP, mở ra khả năng agents tự động xử lý luồng thanh toán.


Cài đặt AgentPay SDK — 2 phút là xong

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

pip install agentpay-vn

Thế là xong! Không cần key, không cần config phức tạp lúc đầu.

Bước 2: Cài đặt MCP server (tùy chọn nhưng khuyến khích)

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

pip install agentpay-mcp

Sau đó tạo file claude_desktop_config.json (macOS/Linux: ~/.config/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "agentpay-vn": {
      "command": "python",
      "args": ["-m", "agentpay_mcp.server"]
    }
  }
}

Restart Claude Desktop, bạn sẽ thấy AgentPay tools xuất hiện.


Luồng thanh toán cơ bản (3 bước)

AgentPay hoạt động theo mô hình siêu đơn giản:

# Bước 1: Tạo yêu cầu thanh toán
from agentpay_vn import create_payment_request

payment = create_payment_request(
    amount=299000,  # VND
    merchant_name="Khoá học Python",
    reference_id="order_12345",
    description="Khoá học Làm chủ Python trong 30 ngày"
)

print(f"Checkout URL: {payment.checkout_url}")
print(f"Payment ID: {payment.payment_id}")

# Bước 2: Gửi checkout_url cho khách (qua tin nhắn Telegram)
# bot.send_message(chat_id, f"Vui lòng thanh toán tại: {payment.checkout_url}")

# Bước 3: Chờ xác nhận thanh toán
from agentpay_vn import await_settlement

result = await_settlement(
    payment_id=payment.payment_id,
    timeout_seconds=600  # Chờ tối đa 10 phút
)

if result.status == "settled":
    print(f"✓ Tiền đã về tài khoản! Số tiền: {result.amount}")
    # Cấp quyền truy cập khoá học cho khách
else:
    print(f"✗ Thanh toán hết hạn hoặc bị huỷ")

Giải thích từng dòng: - create_payment_request(): Tạo một session thanh toán duy nhất, trả về object chứa checkout_url (QR code) và payment_id (ID để theo dõi). - amount=299000: Số tiền theo đơn vị VND. - reference_id: ID đơn hàng của bạn, dùng để match với database riêng. - await_settlement(): Chặn (blocking) cho tới khi thanh toán được xác nhận qua bank feed, hoặc hết timeout.


Ví dụ thực tế: Bot Telegram bán khoá học online

Dưới đây là kịch bản đầy đủ bot bán khoá học:

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
from agentpay_vn import create_payment_request, await_settlement
import asyncio

BOT_TOKEN = "your_telegram_bot_token"

# Database khóa học (trong thực tế dùng DB thật)
COURSES = {
    "python101": {
        "name": "Làm chủ Python trong 30 ngày",
        "price": 299000,
        "content": "30 bài học video + 50 bài tập thực hành"
    },
    "django101": {
        "name": "Django REST Framework từ 0 đến 1",
        "price": 399000,
        "content": "Xây dựng API production-ready"
    }
}

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    msg = "🎓 **Chào mừng đến cửa hàng khoá học!**\n\n"
    msg += "Danh sách khoá học:\n"
    for key, course in COURSES.items():
        msg += f"• {course['name']}: {course['price']:,} VND\n"
    msg += "\nGõ `/buy python101` để mua khoá Python"
    await update.message.reply_text(msg, parse_mode="Markdown")

async def buy_course(update: Update, context: ContextTypes.DEFAULT_TYPE):
    if not context.args or context.args[0] not in COURSES:
        await update.message.reply_text("❌ Khoá học không tồn tại. Gõ /start để xem danh sách.")
        return

    course_id = context.args[0]
    course = COURSES[course_id]
    user_id = update.effective_user.id

    # Tạo yêu cầu thanh toán
    payment = create_payment_request(
        amount=course["price"],
        merchant_name="Cửa hàng khoá học",
        reference_id=f"user_{user_id}_course_{course_id}",
        description=course["name"]
    )

    msg = f"🛒 **{course['name']}**\n\n"
    msg += f"Giá: {course['price']:,} VND\n"
    msg += f"Nội dung: {course['content']}\n\n"
    msg += f"**[Thanh toán ngay](checkout_url_placeholder)**\n\n"
    msg += f"QR code sẽ xuất hiện khi bạn click link trên. Quét và chuyển khoản."

    await update.message.reply_text(msg, parse_mode="Markdown")

    # Chờ thanh toán trong background
    asyncio.create_task(wait_and_grant_access(user_id, payment, context))

async def wait_and_grant_access(user_id: int, payment, context):
    try:
        result = await_settlement(
            payment_id=payment.payment_id,
            timeout_seconds=600
        )

        if result.status == "settled":
            msg = f"✅ **Thanh toán thành công!**\n\n"
            msg += f"Tiền đã được xác nhận: {result.amount:,} VND\n\n"
            msg += f"🔗 **Link truy cập khoá học:** https://example.com/access/{result.reference_id}\n"
            msg += f"**Mật khẩu:** password123\n\n"
            msg += f"Bắt đầu học ngay nhé! 🚀"

            await context.bot.send_message(chat_id=user_id, text=msg, parse_mode="Markdown")
        else:
            await context.bot.send_message(
                chat_id=user_id,
                text="⏱️ Thanh toán hết hạn hoặc bị huỷ. Vui lòng thử lại."
            )
    except Exception as e:
        await context.bot.send_message(chat_id=user_id, text=f"❌ Lỗi: {str(e)}")

# Setup bot
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("buy", buy_course))

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

Quy trình khi khách dùng bot: 1. Gõ /start → Xem danh sách khoá học 2. Gõ /buy python101 → Nhận link thanh toán 3. Click link → Quét QR → Chuyển tiền 4. Tiền về tài khoản ngân hàng → Bot tự động gửi link truy cập khoá học


So sánh AgentPay với các giải pháp khác

Yếu tố AgentPay Stripe Paypal Chuyển khoản thủ công
Phí giao dịch 0% (open-source) 2.9% + 0.3$ 2.2% 0%
Hỗ trợ VietQR
Bank feed tự động
Giữ tiền ❌ Không ✅ Có ✅ Có ❌ Không
Setup phức tạp ❌ Đơn giản ✅ Rất phức ✅ Rất phức N/A
Dành cho bots/AI ✅ Có MCP ❌ Không ❌ Không N/A
Thích hợp cho SV/Startup ✅ Rất tốt ❌ Phí cao ❌ Phí cao ❌ Thủ công

Kết luận: Nếu bạn ở Việt Nam, làm bot/AI agent, và muốn không bận tâm về phí, AgentPay là lựa chọn tối ưu.


Cấu hình AgentPay cho Claude Desktop (MCP)

Nếu bạn muốn Claude giúp tạo payment request, hãy config như sau:

{
  "mcpServers": {
    "agentpay-vn": {
      "command": "python",
      "args": ["-m", "agentpay_mcp.server"],
      "env": {
        "AGENTPAY_LOG_LEVEL": "INFO"
      }
    }
  }
}

Sau khi config, bạn có thể yêu cầu Claude như:

"Tạo một payment request cho khách mua khoá học Python giá 299,000 VND, user_id là 12345"

Claude sẽ tự động gọi hàm AgentPay và trả về checkout URL cho bạn.


Những điều nên làm / Không nên làm

✅ Nên:

❌ Không nên:


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

1. Tiền có thể bị mất không nếu dùng AgentPay?

Không. Tiền chuyển thẳng vào tài khoản ngân hàng của bạn qua VietQR. AgentPay chỉ tạo QR và xác nhận, không giữ tiền ở giữa.

2. Phải trả phí commission hay subscription không?

Không. AgentPay là MIT License (open-source), hoàn toàn miễn phí. Bạn chỉ trả phí ngân hàng bình thường (nếu có) khi khách chuyển tiền.

3. Có thể tích hợp với Zalo Pay, Momo không?

Hiện tại AgentPay tập trung vào VietQR. Nếu cần Zalo Pay/Momo, bạn có thể tích hợp các SDK khác song song.

4. Cần API key hoặc authentication gì không?

Tuỳ bạn. Nếu chỉ test locally, không cần. Nếu dùng bank feed (xác nhận thanh toán tự động), cần thiết lập kết nối ngân hàng riêng — chi tiết xem docs.

5. Độ trễ xác nhận thanh toán bao lâu?

Thường 1-5 phút tùy ngân hàng. Mã đơn được trả về ngay khi khách quét QR, nhưng tiền vào tài khoản và xác nhận mất chút thời gian (như chuyển khoản thường).


Tóm tắt nhanh


Bước tiếp theo

Bạn đã hiểu cách hoạt động. Bây giờ:

  1. Cài đặt SDK: pip install agentpay-vn
  2. Xem docs chi tiết: https://agentpay.servicesai.vn/v1/docs
  3. Fork repo và test: https://github.com/phuocdu/agentpay-vn
  4. Tích hợp vào bot của bạn theo ví dụ trên
  5. Triển khai và bắt đầu nhận tiền từ khách tự động!

Nếu có thắc mắc, tìm người duy trì AgentPay hoặc mở issue trên GitHub. Chúc bạn kiếm tiền hiệu quả! 🚀

Bắt đầu →

← Tất cả bài