Botion Grid Captcha
Ikhtisar
Botion adalah captcha pemilihan grid: halaman menampilkan gambar sampel referensi dan grid 3×3 dari ubin. Pemecah harus mengembalikan sel grid mana yang cocok dengan referensi (indeks berbasis 0, urutan baris: kiri ke kanan, atas ke bawah).
Field task.image mengenkode dua muatan Base64 yang digabungkan oleh | — gambar sampel terlebih dahulu, lalu gambar grid.

1. Buat Tugas
Format Pengiriman Gambar
Gambar sampel

Gambar grid

Permintaan
POST https://api.achicaptcha.com/createTask
Parameter
| Nama Parameter | Tipe Data | Wajib? | Deskripsi |
|---|---|---|---|
clientKey | string | ya | Kunci API |
task.type | string | ya | GridCaptcha |
task.subType | string | ya | botion |
task.image | string | ya | BASE64_SAMPLE_IMAGE|BASE64_GRID_IMAGE — gambar sampel terlebih dahulu, lalu |, lalu gambar grid 3×3 (keduanya Base64, tanpa prefiks data:) |
task.other | string | tidak | topk|grid_size. Default 3|3 jika dihilangkan |
Contoh Permintaan
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"
}
}Respons
Jika berhasil, server mengembalikan errorId = 0 dan taskId
{
"errorId": 0,
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}2. Dapatkan Hasil
Permintaan
POST https://api.achicaptcha.com/getTaskResult
Parameter
| Nama Parameter | Tipe Data | Wajib? | Deskripsi |
|---|---|---|---|
clientKey | string | ya | Kunci API |
taskId | string | ya | TaskId yang diperoleh dari langkah (1) |
Contoh Permintaan
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Respons
{
"errorId": 0,
"status": "ready",
"solution": {
"click": "0,2,5"
}
}solution.click adalah string indeks sel berbasis 0 (urutan baris) yang dipisahkan koma untuk diklik di grid 3×3.
Penjelasan Status
errorId = 0danstatus = ready: Berhasil dipecahkan, baca indeks sel disolution.clickerrorId = 0danstatus = processing: Masih memproses, tunggu 2 detik dan polling lagierrorId > 0: Kesalahan sistem, periksaerrorCodedanerrorDescription
Contoh Integrasi
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()
# Langkah 1: Buat tugas
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']
# Langkah 2: Poll untuk hasil
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'] # mis. "0,2,5"
# Penggunaan
indices = solve_botion('sample.png', 'grid.png', 'YOUR_API_KEY')
print('Sel yang perlu diklik:', indices)Kode Kesalahan Umum
| Kode Kesalahan | Deskripsi | Catatan |
|---|---|---|
| 0 | success | Berhasil |
| 1 | processing | Memproses |
| 2 | missing required fields | Field yang diperlukan tidak ada, periksa parameter lagi |
| 3 | task not supported | Jenis tugas tidak didukung |
| 4 | task creation failed | Pembuatan tugas gagal |
| 5 | client key does not exist | Kunci API tidak ada, periksa kunci API lagi |
| 6 | insufficient account balance | Saldo akun tidak mencukupi, tambahkan kredit |
| 7 | task failed, please create a new task | Tugas gagal, buat tugas baru |
| 8 | task ID does not exist | ID tugas tidak ada |
Praktik Terbaik
Untuk hasil terbaik saat menggunakan API Achicaptcha untuk Botion Grid Captcha, ikuti prinsip-prinsip ini:
1. Urutan Gambar
- Selalu kirim gambar sampel (referensi) terlebih dahulu, lalu
|, lalu gambar grid - Jangan sertakan prefiks
data:image/...;base64,— hanya Base64 mentah - Pastikan kedua gambar sudah sepenuhnya dimuat dan dienkode sebelum dikirim
2. Parameter task.other
- Formatnya adalah
topk|grid_size(mis.3|3) - Menghilangkannya akan menggunakan default
3|3, tetapi selalu atur secara eksplisit untuk menghindari perilaku tak terduga grid_sizeyang salah akan merusak pemetaan indeks berbasis 0 disolution.click
3. Interval Polling
- Tunggu setidaknya 2 detik antara pemeriksaan hasil
- Jangan spam API dengan permintaan berturut-turut
- Atur batas waktu untuk menghindari loop tak terbatas (disarankan: 60 detik)
4. Pemrosesan Hasil
solution.clickadalah string indeks sel berbasis 0 (urutan baris, kiri ke kanan, atas ke bawah) yang dipisahkan koma- Pisahkan dengan
,dan konversi ke bilangan bulat sebelum mengklik sel grid yang sesuai
5. Logika Percobaan Ulang
- Terapkan percobaan ulang untuk kesalahan sementara seperti
ERROR_NO_SLOT_AVAILABLE - Gunakan exponential backoff saat mencoba ulang
- Batasi jumlah maksimum percobaan ulang
6. Keamanan Kunci API
- Jangan hardcode kunci API di kode sumber
- Gunakan variabel lingkungan atau manajer rahasia
- Jangan pernah mengekspos kunci API di sisi klien
Tautan berguna: