Botion Grid Captcha
Обзор
Botion — это капча выбора в сетке: на странице отображается эталонное изображение и сетка 3×3. Решатель должен вернуть индексы ячеек сетки, соответствующих эталону (индексы от 0, построчно: слева направо, сверху вниз).
Поле task.image кодирует два Base64-пейлоада, объединённых символом | — сначала изображение образца, затем изображение сетки.

1. Создать задачу
Формат отправки изображений
Изображение примера

Изображение сетки

Запрос
POST https://api.achicaptcha.com/createTask
Параметры
| Имя параметра | Тип данных | Обязательно? | Описание |
|---|---|---|---|
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 — сначала изображение образца, затем |, затем изображение сетки 3×3 (оба в Base64, без префикса data:) |
task.other | string | no | topk|grid_size. По умолчанию 3|3 если не указано |
Пример запроса
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"
}
}Ответ
При успехе сервер возвращает errorId = 0 и taskId
{
"errorId": 0,
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}2. Получить результат
Запрос
POST https://api.achicaptcha.com/getTaskResult
Параметры
| Имя параметра | Тип данных | Обязательно? | Описание |
|---|---|---|---|
clientKey | string | yes | API key |
taskId | string | yes | TaskId, полученный на шаге (1) |
Пример запроса
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"taskId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}Ответ
{
"errorId": 0,
"status": "ready",
"solution": {
"click": "0,2,5"
}
}solution.click — строка с индексами ячеек от 0 (построчно), разделёнными запятыми, которые нужно нажать в сетке 3×3.
Объяснение статусов
errorId = 0иstatus = ready: Успешно решено, прочитайте индексы ячеек вsolution.clickerrorId = 0иstatus = processing: Ещё решается, подождите 2 секунды и опросите сноваerrorId > 0: Системная ошибка, проверьтеerrorCodeиerrorDescription
Примеры интеграции
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()
# Шаг 1: Создать задачу
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']
# Шаг 2: Опрашивать результат
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"
# Использование
indices = solve_botion('sample.png', 'grid.png', 'YOUR_API_KEY')
print('Ячейки для нажатия:', indices)Распространённые коды ошибок
| Код ошибки | Описание | Примечания |
|---|---|---|
| 0 | success | Успех |
| 1 | processing | Обработка |
| 2 | missing required fields | Отсутствуют обязательные поля, проверьте параметры |
| 3 | task not supported | Тип задачи не поддерживается |
| 4 | task creation failed | Создание задачи не удалось |
| 5 | client key does not exist | API ключ не существует, проверьте ключ |
| 6 | insufficient account balance | Недостаточный баланс, пополните счёт |
| 7 | task failed, please create a new task | Задача не удалась, создайте новую |
| 8 | task ID does not exist | ID задачи не существует |
Рекомендации
Для достижения наилучших результатов при использовании Achicaptcha API для Botion Grid Captcha следуйте этим принципам:
1. Порядок изображений
- Всегда отправляйте изображение образца (эталона) первым, затем
|, затем изображение сетки - Не включайте префикс
data:image/...;base64,— только чистый Base64 - Убедитесь, что оба изображения полностью загружены и закодированы перед отправкой
2. Параметр task.other
- Формат:
topk|grid_size(например3|3) - Если не указан, по умолчанию используется
3|3, но всегда задавайте явно во избежание непредвиденного поведения - Неверный
grid_sizeнарушит маппинг индексов от 0 вsolution.click
3. Интервал опроса
- Ждите не менее 2 секунд между проверками результата
- Не спамьте API последовательными запросами
- Установите тайм-аут во избежание бесконечных циклов (рекомендуется: 60 секунд)
4. Обработка результата
solution.click— строка с индексами ячеек от 0 (построчно, слева направо, сверху вниз), разделёнными запятыми- Разделите по
,и преобразуйте в целые числа перед нажатием соответствующих ячеек сетки
5. Логика повторных попыток
- Реализуйте повтор при временных ошибках типа
ERROR_NO_SLOT_AVAILABLE - Используйте экспоненциальную задержку при повторах
- Ограничьте максимальное число попыток
6. Безопасность API ключа
- Не храните API ключ в исходном коде
- Используйте переменные окружения или менеджер секретов
- Никогда не раскрывайте API ключ на стороне клиента
Полезные ссылки: