Botion Grid Captcha
Tổng quan
Botion là loại captcha chọn ô lưới: trang hiển thị ảnh mẫu tham chiếu và lưới 3×3 ô. Solver phải trả về các ô lưới khớp với ảnh mẫu (chỉ số 0-based, theo hàng: trái sang phải, trên xuống dưới).
🔲
Trường task.image mã hóa hai payload Base64 được nối bằng | — ảnh mẫu trước, sau đó là ảnh lưới.

1. Tạo yêu cầu
Định dạng gửi ảnh
Ảnh mẫu

Ảnh lưới

Request
POST https://api.achicaptcha.com/createTask
Tham số
| Tên tham số | Kiểu dữ liệu | Bắt buộc? | Mô tả |
|---|---|---|---|
clientKey | string | yes | API key |
task.type | string | yes | GridCaptcha |
task.subType | string | yes | botion |
task.image | string | yes | BASE64_SAMPLE_IMAGE|BASE64_GRID_IMAGE — ảnh mẫu trước, sau đó |, rồi ảnh lưới 3×3 (cả hai đều là Base64, không có tiền tố data:) |
task.other | string | no | topk|grid_size. Mặc định là 3|3 nếu bỏ qua |
Ví dụ Request
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GridCaptcha",
"subType": "botion",
"image": "BASE64_SAMPLE_IMAGE|BASE64_GRID_IMAGE",
"other": "3|3"
}
}Phản hồi
Khi thành công, server trả về errorId = 0 và taskId
{
"errorId": 0,
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}2. Lấy kết quả
Request
POST https://api.achicaptcha.com/getTaskResult
Tham số
| Tên tham số | Kiểu dữ liệu | Bắt buộc? | Mô tả |
|---|---|---|---|
clientKey | string | yes | API key |
taskId | string | yes | TaskId lấy từ bước (1) |
Ví dụ Request
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Phản hồi
{
"errorId": 0,
"status": "ready",
"solution": {
"click": "0,2,5"
}
}solution.click là chuỗi chỉ số ô 0-based phân cách bằng dấu phẩy (theo hàng) cần nhấp vào lưới 3×3.
Giải thích trạng thái
errorId = 0vàstatus = ready: Giải thành công, đọc chỉ số ô trongsolution.clickerrorId = 0vàstatus = processing: Đang giải, chờ 2 giây rồi thử lạierrorId > 0: Lỗi hệ thống, kiểm traerrorCodevàerrorDescription
Ví dụ tích hợp
import requests
import base64
import time
def solve_botion(sample_path, grid_path, api_key='YOUR_API_KEY', other='3|3'):
with open(sample_path, 'rb') as f:
sample_b64 = base64.b64encode(f.read()).decode()
with open(grid_path, 'rb') as f:
grid_b64 = base64.b64encode(f.read()).decode()
# Bước 1: Tạo task
create_resp = requests.post(
'https://api.achicaptcha.com/createTask',
json={
'clientKey': api_key,
'task': {
'type': 'GridCaptcha',
'subType': 'botion',
'image': f'{sample_b64}|{grid_b64}',
'other': other
}
}
)
result = create_resp.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
task_id = result['taskId']
# Bước 2: Lấy kết quả
while True:
time.sleep(2)
poll_resp = requests.post(
'https://api.achicaptcha.com/getTaskResult',
json={'clientKey': api_key, 'taskId': task_id}
)
result = poll_resp.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
if result['status'] == 'ready':
return result['solution']['click'] # ví dụ: "0,2,5"
# Sử dụng
indices = solve_botion('sample.png', 'grid.png', 'YOUR_API_KEY')
print('Các ô cần nhấp:', indices)Các mã lỗi thường gặp
| Mã lỗi | Mô tả | Chú thích |
|---|---|---|
| 0 | success | Thành công |
| 1 | processing | Đang xử lý |
| 2 | missing required fields | Thiếu trường bắt buộc, kiểm tra lại tham số |
| 3 | task not supported | Loại task không được hỗ trợ |
| 4 | task creation failed | Tạo task thất bại |
| 5 | client key does not exist | API key không tồn tại, kiểm tra lại API key |
| 6 | insufficient account balance | Số dư tài khoản không đủ, nạp thêm credit |
| 7 | task failed, please create a new task | Task thất bại, vui lòng tạo task mới |
| 8 | task ID does not exist | Task ID không tồn tại |
Thực tiễn tốt nhất
Để đạt kết quả tốt nhất khi sử dụng Achicaptcha API cho Botion Grid Captcha, hãy tuân thủ các nguyên tắc sau:
1. Thứ tự ảnh
- Luôn gửi ảnh mẫu (tham chiếu) trước, sau đó
|, rồi ảnh lưới - Không bao gồm tiền tố
data:image/...;base64,— chỉ dùng Base64 thuần - Đảm bảo cả hai ảnh đã được tải và mã hóa đầy đủ trước khi gửi
2. Tham số task.other
- Định dạng là
topk|grid_size(ví dụ:3|3) - Bỏ qua sẽ mặc định là
3|3, nhưng hãy luôn đặt rõ ràng để tránh hành vi không mong đợi - Sai
grid_sizesẽ làm hỏng ánh xạ chỉ số 0-based trongsolution.click
3. Khoảng thời gian polling
- Chờ ít nhất 2 giây giữa các lần kiểm tra kết quả
- Không spam API với nhiều request liên tiếp
- Đặt timeout để tránh vòng lặp vô hạn (khuyến nghị: 60 giây)
4. Xử lý kết quả
solution.clicklà chuỗi chỉ số ô 0-based phân cách bằng dấu phẩy (theo hàng, trái sang phải, trên xuống dưới)- Tách theo
,và chuyển sang số nguyên trước khi nhấp vào các ô lưới tương ứng
5. Logic retry
- Implement retry cho các lỗi tạm thời như
ERROR_NO_SLOT_AVAILABLE - Sử dụng exponential backoff khi retry
- Giới hạn số lần retry tối đa
6. Bảo mật API key
- Không hardcode API key trong code
- Sử dụng biến môi trường hoặc secrets manager
- Không expose API key ở phía client
Liên kết hữu ích: