Chuyển từ CapMonster Cloud sang CaptchaAI có phải viết lại cả pipeline không? Không — chỉ đổi endpoint, tên tham số và cách parse response; logic gửi task, polling, dùng token giữ nguyên. Dưới đây là ánh xạ từng bước, kèm code Python và Node.js chạy được ngay.
CapMonster Cloud và CaptchaAI khác nhau ở đâu
Điểm khác biệt chính:
| Thành phần | CapMonster Cloud | CaptchaAI |
|---|---|---|
| Gửi URL | https://api.capmonster.cloud/createTask |
https://ocr.captchaai.com/in.php |
| URL kết quả | https://api.capmonster.cloud/getTaskResult |
https://ocr.captchaai.com/res.php |
| Thông số khóa API | clientKey |
key |
| Định dạng API | Nội dung JSON | Form-encoded (hoặc JSON) |
| Trường ID task | taskId |
request (trong response) |
| Trường kết quả | Đối tượng solution |
request (chuỗi token) |
Ánh xạ tham số theo từng loại CAPTCHA
Trước khi đổi code, xem nhanh ba bảng tham số cho các loại CAPTCHA phổ biến nhất:
reCAPTCHA v2
| CapMonster Cloud | CaptchaAI |
|---|---|
task.type: "RecaptchaV2TaskProxyless" |
method: "userrecaptcha" |
task.websiteKey |
googlekey |
task.websiteURL |
pageurl |
task.isInvisible: true |
invisible: "1" |
Cloudflare Turnstile
| CapMonster Cloud | CaptchaAI |
|---|---|
task.type: "TurnstileTaskProxyless" |
method: "turnstile" |
task.websiteKey |
sitekey |
task.websiteURL |
pageurl |
CAPTCHA hình ảnh (OCR)
| CapMonster Cloud | CaptchaAI |
|---|---|
task.type: "ImageToTextTask" |
method: "base64" |
task.body |
body |
Ánh xạ mã lỗi giữa hai API
Hầu hết mã lỗi giữ nguyên tên:
| CapMonster Cloud | CaptchaAI tương ứng |
|---|---|
ERROR_KEY_DOES_NOT_EXIST |
ERROR_KEY_DOES_NOT_EXIST |
ERROR_ZERO_BALANCE |
ERROR_ZERO_BALANCE |
ERROR_RECAPTCHA_TIMEOUT |
ERROR_CAPTCHA_UNSOLVABLE |
ERROR_NO_SLOT_AVAILABLE |
ERROR_NO_SLOT_AVAILABLE |
CAPTCHA_NOT_READY |
CAPCHA_NOT_READY |
Lưu ý: CaptchaAI dùng CAPCHA_NOT_READY (không có chữ T) — lỗi porting phổ biến nhất, dễ khiến handler cũ ném exception nhầm khi task chỉ đang chờ xử lý.
Vì sao agency QA outsourcing tại Việt Nam hay chuyển sang CaptchaAI
Nhiều team QA outsourcing ở TP.HCM, Hà Nội chạy hàng trăm test case reCAPTCHA v2, Turnstile mỗi ngày, trả phí theo task trên CapMonster Cloud — chi phí tăng gần tuyến tính vào mùa cao điểm. CaptchaAI tính phí theo thread: BASIC ($15/tháng, 5 thread) giải không giới hạn miễn còn thread rảnh, nên chạy nhiều test suite song song không phát sinh thêm phí.
Cách nhanh nhất: chỉ cần đổi 2 dòng code
Nếu bạn đang dùng wrapper hoặc SDK bọc quanh CapMonster Cloud, cách nhanh nhất là chỉ đổi URL và key gốc — phần logic gọi hàm còn lại giữ nguyên:
# Before (CapMonster Cloud)
API_URL = "https://api.capmonster.cloud"
CLIENT_KEY = "your_capmonster_key"
# After (CaptchaAI)
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
API_KEY = "your_captchaai_key"
Di chuyển đầy đủ cho reCAPTCHA v2: trước và sau
Luồng đầy đủ khi gọi API trực tiếp — so sánh song song:
CapMonster Cloud (trước khi đổi)
import requests
import time
resp = requests.post("https://api.capmonster.cloud/createTask", json={
"clientKey": "CAPMONSTER_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com",
"websiteKey": "6Le-SITEKEY",
}
}).json()
task_id = resp["taskId"]
while True:
time.sleep(5)
result = requests.post("https://api.capmonster.cloud/getTaskResult", json={
"clientKey": "CAPMONSTER_KEY",
"taskId": task_id,
}).json()
if result["status"] == "ready":
token = result["solution"]["gRecaptchaResponse"]
break
CaptchaAI (sau khi đổi)
import requests
import time
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "6Le-SITEKEY",
"pageurl": "https://example.com",
"json": "1",
}).json()
task_id = resp["request"]
while True:
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": task_id,
"json": "1",
}).json()
if result["status"] == 1:
token = result["request"]
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(result["request"])
Khác biệt chính: CapMonster Cloud lồng dữ liệu trong task object, CaptchaAI dùng tham số phẳng; kết quả luôn nằm ở request, không phải solution.gRecaptchaResponse.
Chuyển phần JavaScript/Node.js sang CaptchaAI
Bản Node.js dùng axios, cùng logic:
CapMonster Cloud (trước khi đổi)
const axios = require('axios');
const resp = await axios.post('https://api.capmonster.cloud/createTask', {
clientKey: 'CAPMONSTER_KEY',
task: {
type: 'RecaptchaV2TaskProxyless',
websiteURL: 'https://example.com',
websiteKey: '6Le-SITEKEY',
}
});
const taskId = resp.data.taskId;
CaptchaAI (sau khi đổi)
const axios = require('axios');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: 'YOUR_API_KEY',
method: 'userrecaptcha',
googlekey: '6Le-SITEKEY',
pageurl: 'https://example.com',
json: 1,
}
});
const taskId = resp.data.request;
Kiểm tra số dư tài khoản
Xác nhận số dư đúng ở cả hai bên trước khi chuyển traffic thật.
CapMonster Cloud
resp = requests.post("https://api.capmonster.cloud/getBalance", json={
"clientKey": "CAPMONSTER_KEY"
}).json()
balance = resp["balance"]
CaptchaAI
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "getbalance",
"json": "1",
}).json()
balance = float(resp["request"])
Checklist di chuyển từng bước
Không bỏ sót bước nào:
- [ ] Lấy API key CaptchaAI tại captchaai.com
- [ ] Đổi submit URL:
api.capmonster.cloud/createTask→ocr.captchaai.com/in.php - [ ] Đổi result URL:
api.capmonster.cloud/getTaskResult→ocr.captchaai.com/res.php - [ ] Đổi tham số xác thực:
clientKey→key - [ ] Đổi định dạng request: JSON task object → tham số form-encoded
- [ ] Cập nhật parse response:
taskId→request,solution.gRecaptchaResponse→request - [ ] Cập nhật xử lý lỗi:
CAPTCHA_NOT_READY→CAPCHA_NOT_READY - [ ] Test với một request đơn lẻ trước khi chuyển traffic production
Câu hỏi thường gặp
CaptchaAI tính phí theo tác vụ (task) như CapMonster Cloud không?
Không. CaptchaAI tính theo thread; BASIC ($15/tháng, 5 thread) giải không giới hạn miễn còn thread trống.
Có thể chạy song song CapMonster Cloud và CaptchaAI trong lúc test không?
Có. Định tuyến một phần traffic sang CaptchaAI, giữ CapMonster Cloud làm dự phòng, rồi chuyển hẳn sau khi đối chiếu kết quả.
Ngoài reCAPTCHA v2 và Cloudflare Turnstile, CaptchaAI còn hỗ trợ loại CAPTCHA nào?
Có — còn GeeTest v3, Cloudflare Challenge, ảnh/OCR và BLS. CaptchaAI không hỗ trợ hCaptcha và FunCaptcha (Arkose Labs); kiểm tra kỹ nếu hệ thống bạn cần hai loại này.
Sẵn sàng chuyển sang CaptchaAI?
Lấy API key tại captchaai.com và chạy thử một request reCAPTCHA v2 để đối chiếu với CapMonster Cloud.