Thu tiền bot Telegram với VietQR: Hướng dẫn AgentPay
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:
- Yêu cầu chuyển khoản thủ công (mất thời gian, hay quên)
- Sử dụng ví điện tử (mất phí, rườm rà)
- Tích hợp cổng thanh toán ngoài (phức tạp, chi phí cao)
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:
- Tích hợp AgentPay vào bot Telegram bằng Python
- Tạo QR code thanh toán VietQR tự động
- Xác nhận thanh toán ngay khi khách hàng chuyển tiền
- 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:
- Không lưu tiền: Tiền đi thẳng vào tài khoản ngân hàng của bạn, AgentPay chỉ là cầu nối
- Xác nhận tự động: Dùng bank feed để kiểm tra thanh toán (không cần polling không đáng tin)
- Dễ tích hợp: 3 bước đơn giản: tạo yêu cầu → gửi QR → chờ xác nhận
- MCP Server: Hỗ trợ Claude và các AI agent khác thông qua Model Context Protocol
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:
create_payment_request(): Tạo 1 yêu cầu thanh toán với số tiền, mô tả. Hàm này trả về object chứacheckout_url(link QR) vàqr_data_url(hình ảnh QR base64)payment_request["checkout_url"]: Đây là link QR/checkout dùng để khách quét hoặc clickawait_settlement(): Hàm chặn cho tới khi ngân hàng xác nhận thanh toán (dùng bank feed, không polling không đáng tin)context.application.create_task(): Chạy xác nhận thanh toán không block UI Telegram
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:
- Khách chọn tài khoản → Bot hiển thị danh sách & giá
- Khách click "Mua" → AgentPay tạo QR code VietQR
- 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
- Bank feed xác nhận → Bot tự động gửi tài khoản game cho khách qua DM Telegram
- 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
- AgentPay VN là SDK Python cho phép bot/AI agent thu tiền qua VietQR, 0% phí
- Cài đặt:
pip install agentpay-vn(5 phút xong) - 3 bước:
create_payment_request()→checkout_url→await_settlement() - Tiền không qua AgentPay: Đi thẳng vào tài khoản ngân hàng của bạn
- Hoàn toàn tự động: Không cần xác nhận thủ công, không cần polling
- Usecase: Bot Telegram, shop online, cấp số, quán ăn, khóa học, game account, etc.
- Ví dụ code: Đã cho ở phần "Code thực tế" (bot cà phê)
- Tích hợp AI: MCP Server cho Claude, dễ dàng
Bắt đầu ngay hôm nay
Bạn đã sẵn sàng? Đây là 3 bước để bắt đầu:
- Cài SDK:
pip install agentpay-vn - Xem docs đầy đủ: https://agentpay.servicesai.vn/v1/docs
- 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ẻ! ☕🚀