Imagen Funcaptcha
Descripción General
FunCaptcha (también conocido como Arkose Labs Captcha) es un tipo de captcha interactivo que requiere que los usuarios realicen acciones como rotar imágenes, arrastrar y soltar objetos para resolver desafíos. Es utilizado por muchos sitios web importantes como Roblox, Epic Games, Outlook, etc.
🎮
FunCaptcha está diseñado tanto para proteger contra bots como para crear una experiencia "divertida" para los usuarios a través de minijuegos interactivos.

1. Crear Tarea
Solicitud
POST https://api.achicaptcha.com/createTask
Parámetros
| Nombre del Parámetro | Tipo de Dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | sí | Clave API |
task.type | string | sí | FuncaptchaImageTask |
task.subType | string | sí | El valor es igual a 1 |
task.image | string | sí | Base64 de la imagen |
task.other | string | sí | Pregunta Ejemplo: "Usa las flechas para rotar el objeto para que mire en la dirección de la mano" |
Ejemplo de Solicitud
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_API",
"task": {
"type": "FuncaptchaImageTask",
"subType": "1",
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD...",
"other": "Usa las flechas para rotar el objeto para que mire en la dirección de la mano"
}
}Respuesta
Cuando tiene éxito, el servidor devuelve errorId = 0 y taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}2. Obtener Resultado
Solicitud
POST https://api.achicaptcha.com/getTaskResult
Parámetros
| Nombre del Parámetro | Tipo de Dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | sí | Clave API |
taskId | string | sí | TaskId obtenido de (1) |
Ejemplo de Solicitud
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_API",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Respuesta
{
"errorId": 0,
"status": "ready",
"solution": "1" // Índice de imagen para hacer clic (Comenzando desde 0)
}Explicación del Estado
errorId = 0ystatus = ready: Resuelto exitosamente, lee el resultado ensolution.answer(array de índices de imagen)errorId = 0ystatus = processing: Resolviendo captcha, espera 2 segundos e intenta de nuevoerrorId > 0: Error del sistema, devuelve código de error y descripción del error
Ejemplos de Integración
import requests
import time
def solve_funcaptcha_image(image_base64, question, api_key='TU_CLAVE_API'):
# Paso 1: Crear tarea
create_task_url = 'https://api.achicaptcha.com/createTask'
create_task_payload = {
'clientKey': api_key,
'task': {
'type': 'FuncaptchaImageTask',
'subType': '1',
'image': image_base64,
'other': question
}
}
response = requests.post(create_task_url, json=create_task_payload)
result = response.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
task_id = result['taskId']
# Paso 2: Obtener resultado
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Esperar 2 segundos
get_result_payload = {
'clientKey': api_key,
'taskId': task_id
}
response = requests.post(get_result_url, json=get_result_payload)
result = response.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
if result['status'] == 'ready':
return result['solution']
# Si status == 'processing', continuar el bucle
# Uso
image_base64 = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD...' # Base64 de la imagen
question = 'Usa las flechas para rotar el objeto para que mire en la dirección de la mano'
solution = solve_funcaptcha_image(image_base64, question, 'TU_CLAVE_API')
print('Solución de FunCaptcha:', solution)Códigos de Error Comunes
| Código de Error | Descripción | Notas |
|---|---|---|
| 0 | éxito | Éxito |
| 1 | procesando | Procesando |
| 2 | faltan campos requeridos | Faltan campos requeridos, verifica los parámetros nuevamente |
| 3 | tarea no compatible | Tipo de tarea no compatible |
| 4 | creación de tarea fallida | Creación de tarea fallida |
| 5 | la clave del cliente no existe | La clave API no existe, verifica la clave API nuevamente |
| 6 | saldo de cuenta insuficiente | Saldo de cuenta insuficiente, agrega más créditos |
| 7 | tarea fallida, por favor crea una nueva tarea | Tarea fallida, por favor crea una nueva tarea |
| 8 | el ID de tarea no existe | El ID de tarea no existe |
Mejores Prácticas
Para obtener los mejores resultados al usar la API de Achicaptcha para FunCaptcha Imagen, sigue estos principios:
1. Procesamiento de Imagen Base64
- Solo acepta una sola imagen. Para usuarios de teléfono, fusiona en una imagen grande antes de enviar
- Asegúrate de que la imagen esté correctamente codificada en formato Base64
- Elimina el prefijo
data:image/...;base64,si está presente - Verifica que el tamaño de la imagen sea razonable (no demasiado grande)
2. Pregunta
- Proporciona la pregunta exacta del desafío FunCaptcha
- La pregunta ayuda al sistema a comprender mejor el tipo de desafío
- Ejemplo: "Usa las flechas para rotar el objeto para que mire en la dirección de la mano"
3. Intervalo de Sondeo
- Espera al menos 2 segundos entre verificaciones de resultado
- No envíes spam a la API con demasiadas solicitudes consecutivas
- Establece un tiempo de espera para evitar bucles infinitos (recomendado 60 segundos para tareas de imagen)
4. Procesamiento de Resultados
- El resultado devuelto es un solo número (índice comenzando desde 0)
- Usa este resultado para enviarlo a FunCaptcha
5. Lógica de Reintento
- Implementa reintento para errores temporales como
ERROR_NO_SLOT_AVAILABLE - Usa retroceso exponencial al reintentar
- Limita los intentos máximos de reintento
6. Seguridad de la Clave API
- No codifiques la clave API en el código
- Usa variables de entorno
- No expongas la clave API en el lado del cliente
Enlaces útiles: