Thu tiền từ bot Telegram bằng VietQR và AgentPay
Nỗi đau của những người bán hàng qua bot Telegram
Bạn là developer, hoặc quản lý cộng đồng bán khóa học, ebooks, khóa tư vấn qua Telegram. Mỗi lần có khách hàng mới, bạn phải yêu cầu họ chuyển tiền thủ công, sau đó tự tay kiểm tra hóa đơn, xác nhận thanh toán, rồi gửi tài liệu. Tốn thời gian, dễ sai sót, khách hàng bực dọc vì chậm. Còn nếu dùng Stripe hoặc PayPal, phí cao (2-3%), quá trình xét duyệt lâu, không phù hợp với thị trường Việt.
Bạn cần một cách: nhanh, rẻ, an toàn, không cần trung gian giữ tiền. Đó chính là AgentPay VN – giải pháp mã mở dựa trên VietQR mà chúng ta sẽ khám phá hôm nay.
AgentPay VN là gì? Tại sao nó khác biệt?
AgentPay VN là một Python SDK mã mở (MIT) cho phép các AI agent (hoặc bot thường) tạo yêu cầu thanh toán VietQR, gửi QR code cho khách hàng, và tự động xác nhận khi tiền về. Đặc biệt quan trọng:
- Không lưu giữ tiền: QR code trỏ thẳng vào tài khoản ngân hàng của bạn, không qua bất kỳ ví số nào.
- Xác nhận tự động: Kết nối ngân hàng (bank feed) thông báo khi khách thanh toán → bot tự động gửi sản phẩm.
- Mã mở: Bạn nắm toàn bộ luồng, không phụ thuộc nhà cung cấp thanh toán thứ ba.
- Tích hợp AI/MCP: Có thể kết nối với Claude, ChatGPT agents để thanh toán hoàn toàn tự động.
Cơ bản, quy trình chỉ 3 bước:
create_payment_request→ Tạo yêu cầu thanh toánsend checkout_url→ Gửi QR/URL cho kháchawait_settlement→ Chờ tiền về, tự động xử lý tiếp
Cài đặt và khởi tạo AgentPay VN
Bước 1: Cài đặt SDK
pip install agentpay-vn
Rất đơn giản. Sau đó, import vào project:
from agentpay_vn import AgentPayClient, PaymentRequest
# Khởi tạo client (cần API key từ dashboard AgentPay)
client = AgentPayClient(api_key="your_api_key_here")
Bước 2: Cấu hình thông tin tài khoản ngân hàng
Bạn cần liên kết tài khoản ngân hàng Việt (hỗ trợ các ngân hàng có chuẩn VietQR như Vietcombank, Techcombank, Agribank, v.v.). Quy trình:
- Truy cập https://agentpay.servicesai.vn/v1/docs
- Đăng ký tài khoản, xác thực ngân hàng (thường qua OTP)
- Lấy API key từ dashboard
- Lưu vào file
.env(KHÔNG commit vào git)
# .env
AGENTPAY_API_KEY=sk_live_xxxxx
MERCHANT_ACCOUNT=123456789 # Số tài khoản
MERCHANT_BANK=Vietcombank
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("AGENTPAY_API_KEY")
client = AgentPayClient(api_key=api_key)
Ví dụ thực tế: Bot bán khóa học qua Telegram
Giả sử bạn có một bot Telegram bán khóa "Python cho AI" giá 299.000 VND. Dưới đây là flow đầu đủ:
Bước 1: Tạo yêu cầu thanh toán
from agentpay_vn import AgentPayClient, PaymentRequest
import os
client = AgentPayClient(api_key=os.getenv("AGENTPAY_API_KEY"))
# Tạo payment request
payment_request = client.create_payment_request(
amount=299000, # VND
description="Khóa học: Python cho AI - Lớp 2024",
customer_email="khach@example.com",
customer_phone="0912345678",
metadata={
"course_id": "python_ai_2024",
"user_telegram_id": 123456789,
"user_name": "Nguyễn Văn A"
},
callback_url="https://your-bot-api.com/payment-callback"
)
print(f"Payment ID: {payment_request.id}")
print(f"QR Code URL: {payment_request.qr_code_url}")
print(f"Checkout URL: {payment_request.checkout_url}")
Giải thích từng dòng:
- amount=299000: Số tiền khách phải trả (đơn vị VND)
- description: Mô tả hiển thị trên QR code
- metadata: Dữ liệu tùy ý lưu trữ, dùng để khi tiền về, bot biết khách nào, gửi tài liệu cho ai
- callback_url: Endpoint bot sẽ nhận webhook khi tiền về
Bước 2: Gửi QR code cho khách qua Telegram
import requests
from telegram import Bot
# Khởi tạo Telegram bot
TG_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
bot = Bot(token=TG_TOKEN)
chat_id = 123456789 # Chat ID của khách hàng
# Gửi QR code (dạng hình ảnh)
bot.send_photo(
chat_id=chat_id,
photo=payment_request.qr_code_url,
caption=f"""Quét mã QR để thanh toán:
💰 Số tiền: 299.000 VND
📚 Khóa học: Python cho AI
⏰ Hiệu lực: 30 phút
Hoặc click vào link checkout: {payment_request.checkout_url}
"""
)
# Lưu payment_request.id vào database để xử lý callback sau
db.save_payment_order(
payment_id=payment_request.id,
telegram_user_id=chat_id,
course_id="python_ai_2024",
status="pending"
)
Bước 3: Xử lý webhook khi tiền về
# Sử dụng Flask (ví dụ)
from flask import Flask, request
from agentpay_vn import verify_webhook_signature
app = Flask(__name__)
@app.route("/payment-callback", methods=["POST"])
def payment_callback():
"""
AgentPay gửi webhook khi tiền đã đến tài khoản
"""
data = request.json
signature = request.headers.get("X-AgentPay-Signature")
# Xác thực chữ ký (bảo mật)
if not verify_webhook_signature(data, signature, os.getenv("AGENTPAY_WEBHOOK_SECRET")):
return {"error": "Invalid signature"}, 401
payment_id = data["payment_id"]
status = data["status"] # "settled", "failed", etc.
amount_received = data["amount"]
if status == "settled":
# Tiền đã về tài khoản
order = db.get_payment_order(payment_id)
telegram_user_id = order["telegram_user_id"]
course_id = order["course_id"]
# Gửi tài liệu khóa học cho khách
bot.send_message(
chat_id=telegram_user_id,
text="✅ Thanh toán thành công! Khóa học đang được tải..."
)
course_file = get_course_file(course_id)
bot.send_document(
chat_id=telegram_user_id,
document=course_file,
caption="📚 Tài liệu khóa học Python cho AI. Hãy bảo mật tài liệu này!"
)
# Cập nhật status
db.update_payment_order(payment_id, status="delivered")
elif status == "failed":
# Thanh toán thất bại
order = db.get_payment_order(payment_id)
bot.send_message(
chat_id=order["telegram_user_id"],
text="❌ Thanh toán thất bại. Vui lòng thử lại."
)
return {"ok": True}, 200
Tích hợp MCP Server cho AI Agents
Nếu bạn muốn Claude hoặc các AI agents khác tự động xử lý thanh toán mà không cần code tùy chỉnh, hãy dùng MCP server:
Cài đặt MCP server
pip install agentpay-mcp
Cấu hình Claude Desktop (hoặc AI agent khác)
Tạo file claude_desktop_config.json (trên macOS: ~/.claude_desktop_config.json):
{
"mcpServers": {
"agentpay": {
"command": "python",
"args": ["-m", "agentpay_mcp.server"],
"env": {
"AGENTPAY_API_KEY": "sk_live_xxxxx",
"WEBHOOK_SECRET": "your_webhook_secret"
}
}
}
}
Sau đó, Claude sẽ có thể gọi các tool AgentPay trực tiếp:
User: "Tôi muốn bán khóa học này giá 500k, giúp tôi tạo QR code thanh toán"
Claude: (sử dụng AgentPay MCP)
→ create_payment_request(amount=500000, description="...")
→ Tạo QR code
→ Trả về: "✅ QR code đã tạo, bạn có thể chia sẻ..."
So sánh AgentPay với các giải pháp khác
| Tiêu chí | AgentPay VN | Stripe | PayPal | Chuyển khoản thủ công |
|---|---|---|---|---|
| Phí giao dịch | 0% | 2.9% + 5k | 2% | 0% |
| Xác nhận tự động | ✅ | ✅ | ✅ | ❌ |
| Hỗ trợ VietQR | ✅ | ❌ | ❌ | ✅ |
| Không lưu tiền | ✅ | ❌ | ❌ | ✅ |
| Mã mở (MIT) | ✅ | ❌ | ❌ | N/A |
| Tích hợp AI/MCP | ✅ | ❌ | ❌ | ❌ |
| Thời gian xét duyệt | 1-2 ngày | 3-5 ngày | 7-14 ngày | N/A |
| Phù hợp Việt Nam | ✅ | ⚠️ | ⚠️ | ✅ |
Những điều "nên" và "không nên" khi dùng AgentPay
✅ Nên làm:
- Xác thực webhook signature luôn luôn, đừng tin tưởng dữ liệu từ client
- Lưu payment_id vào database để tracking từng giao dịch
- Thiết lập timeout hợp lý (ví dụ: nếu 30 phút chưa thanh toán, hủy request)
- Ghi log chi tiết cho mục đích audit và debug
- Sử dụng HTTPS cho callback endpoint
❌ Không nên:
- Gửi tài liệu/sản phẩm trước khi nhận webhook "settled" từ AgentPay
- Lưu API key trực tiếp trong code (dùng
.envhoặc biến môi trường) - Bỏ qua xác thực signature webhook (rủi ro giả mạo)
- Gọi
create_payment_requestvới số tiền quá lớn mà chưa test (test trước với amount nhỏ)
Câu hỏi thường gặp (FAQ)
1. Tiền về tài khoản ngân hàng mất bao lâu?
Thường 1-2 giờ sau khi khách quét QR code thanh toán. Tuy nhiên, webhook AgentPay sẽ thông báo ngay (có thể mất vài phút do xác nhận ngân hàng). Nếu chưa nhận webhook sau 5 phút, bạn có thể poll API: client.get_payment_status(payment_id).
2. Nếu khách thanh toán số tiền sai sót thì sao?
AgentPay hỗ trợ kiểm tra số tiền tự động. Nếu khách chỉ chuyển 280k thay vì 299k, webhook sẽ có status="partial". Bạn có thể yêu cầu khách hoàn tất thanh toán hoặc coi như hoàn tất tùy logic business của bạn.
3. Có thể refund được không? Khách hối lộn mua nhầm?
AgentPay không xử lý refund trực tiếp (vì không lưu tiền). Bạn cần chuyển lại tiền từ tài khoản ngân hàng của bạn cho khách thủ công, hoặc thoả thuận khác. Ghi lại memo "Refund cho payment_id: xxx" để tracking.
4. AgentPay có bảo mật không? Liệu QR code có bị lộ?
Có. QR code tuy công khai, nhưng chỉ dùng cho một giao dịch cụ thể, số tiền được fix sẵn. Nếu ai đó share QR, chỉ khách thanh toán trước mới nhận được tài liệu. API key cần bảo mật như password (lưu .env, không share công khai).
Tóm tắt nhanh
- AgentPay VN = Python SDK mã mở cho thanh toán VietQR, không lưu tiền
- Cài đặt:
pip install agentpay-vn - 3 bước chính: create_payment_request → gửi QR → await webhook settlement
- Dùng cho: Bot Telegram, web bán hàng, shop online, khóa học digital, v.v.
- Lợi ích: Phí 0%, xác nhận tự động, mã mở, tích hợp AI/MCP
- Bảo mật: Luôn xác thực webhook, không share API key
Bước tiếp theo: Chạy thử ngay
Bạn đã hiểu cơ bản, bây giờ là lúc thực hành:
# 1. Cài AgentPay
pip install agentpay-vn
# 2. Đăng ký tài khoản & lấy API key
# Truy cập: https://agentpay.servicesai.vn/v1/docs
# 3. Clone ví dụ từ GitHub
git clone https://github.com/phuocdu/agentpay-vn
cd agentpay-vn/examples
# 4. Chạy ví dụ Telegram bot
python examples/telegram_bot_example.py
Nếu gặp vấn đề, tham khảo tài liệu chi tiết tại đây hoặc tạo issue trên GitHub repository.
Chúc bạn thành công trong hành trình số hóa thanh toán! 🚀