Botion Grid Captcha
Descripción general
Botion es una captcha de selección en cuadrícula: la página muestra una imagen de muestra de referencia y una cuadrícula de 3×3. El solucionador debe devolver qué celdas de la cuadrícula coinciden con la referencia (índices de base 0, orden de fila: de izquierda a derecha, de arriba a abajo).
El campo task.image codifica dos cargas útiles Base64 unidas por | — primero la imagen de muestra, luego la imagen de cuadrícula.

1. Crear tarea
Formato de envío de imagen
Imagen de muestra

Imagen de cuadrícula

Solicitud
POST https://api.achicaptcha.com/createTask
Parámetros
| Nombre del parámetro | Tipo de dato | ¿Requerido? | Descripción |
|---|---|---|---|
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 — primero la imagen de muestra, luego |, luego la imagen de cuadrícula 3×3 (ambas en Base64, sin prefijo data:) |
task.other | string | no | topk|grid_size. Por defecto 3|3 si se omite |
Ejemplo de solicitud
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"
}
}Respuesta
Cuando tiene éxito, el servidor devuelve errorId = 0 y taskId
{
"errorId": 0,
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}2. Obtener resultado
Solicitud
POST https://api.achicaptcha.com/getTaskResult
Parámetros
| Nombre del parámetro | Tipo de dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | yes | API key |
taskId | string | yes | TaskId obtenido del paso (1) |
Ejemplo de solicitud
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Respuesta
{
"errorId": 0,
"status": "ready",
"solution": {
"click": "0,2,5"
}
}solution.click es una cadena de índices de celdas de base 0 (orden de fila) separados por comas para hacer clic en la cuadrícula 3×3.
Explicación de estados
errorId = 0ystatus = ready: Resuelto exitosamente, leer índices de celdas ensolution.clickerrorId = 0ystatus = processing: Aún resolviendo, esperar 2 segundos y consultar de nuevoerrorId > 0: Error del sistema, verificarerrorCodeyerrorDescription
Ejemplos de integración
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()
# Paso 1: Crear tarea
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']
# Paso 2: Consultar resultado
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'] # e.g. "0,2,5"
# Uso
indices = solve_botion('sample.png', 'grid.png', 'YOUR_API_KEY')
print('Celdas a hacer clic:', indices)Códigos de error comunes
| Código de error | Descripción | Notas |
|---|---|---|
| 0 | success | Éxito |
| 1 | processing | Procesando |
| 2 | missing required fields | Faltan campos requeridos, verificar parámetros |
| 3 | task not supported | Tipo de tarea no soportado |
| 4 | task creation failed | Creación de tarea fallida |
| 5 | client key does not exist | API key no existe, verificar clave |
| 6 | insufficient account balance | Saldo insuficiente, añadir créditos |
| 7 | task failed, please create a new task | Tarea fallida, crear una nueva tarea |
| 8 | task ID does not exist | ID de tarea no existe |
Mejores prácticas
Para obtener los mejores resultados al usar la API de Achicaptcha para Botion Grid Captcha, siga estos principios:
1. Orden de imágenes
- Siempre envíe primero la imagen de muestra (referencia), luego
|, luego la imagen de cuadrícula - No incluya el prefijo
data:image/...;base64,— solo Base64 sin procesar - Asegúrese de que ambas imágenes estén completamente cargadas y codificadas antes de enviar
2. Parámetro task.other
- El formato es
topk|grid_size(ej.3|3) - Si se omite, por defecto es
3|3, pero siempre configúrelo explícitamente para evitar comportamiento inesperado - Un
grid_sizeincorrecto romperá el mapeo de índices de base 0 ensolution.click
3. Intervalo de consulta
- Espere al menos 2 segundos entre verificaciones de resultado
- No sature la API con solicitudes consecutivas
- Establezca un tiempo de espera para evitar bucles infinitos (recomendado: 60 segundos)
4. Procesamiento de resultados
solution.clickes una cadena de índices de celdas de base 0 (orden de fila, de izquierda a derecha, de arriba a abajo) separados por comas- Divida por
,y convierta a enteros antes de hacer clic en las celdas de cuadrícula correspondientes
5. Lógica de reintento
- Implemente reintentos para errores temporales como
ERROR_NO_SLOT_AVAILABLE - Use retroceso exponencial al reintentar
- Limite el número máximo de intentos de reintento
6. Seguridad de la API key
- No codifique su API key en el código fuente
- Use variables de entorno o un gestor de secretos
- Nunca exponga la API key en el lado del cliente
Enlaces útiles: