Эта статья была полезной?
Как отправлять отчёты
Отчеты имеют значение. Речь не о бюрократических сводках, а о легких, программных сигналах — reportCorrect и reportIncorrect — которые возвращают интеллектуальную обратную связь в систему 2Captcha. Опционально? Формально — да. Критически важно? Безусловно. При грамотной реализации этот механизм повышает точность распознавания, сокращает издержки и ускоряет выявление воркеров, чья эффективность падает ниже допустимого уровня.
Методы API v2 для отправки отчетов
reportCorrect — подтверждение правильного ответа
Вызывайте этот эндпоинт, когда целевой сайт принял решение капчи без возражений. Воспринимайте это как сигнал положительного подкрепления, который незаметно, но последовательно обучает систему работать лучше.
Параметры запроса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| clientKey | String | Да | Ваш API-ключ |
| taskId | Integer | Да | Идентификатор выполненной задачи |
Пример запроса (POST, JSON):
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Пример успешного ответа:
json
{
"errorId": 0,
"status": "success"
}
Endpoint: https://api.2captcha.com/reportCorrect
reportIncorrect — сообщение об ошибочном ответе
Используйте этот метод, если решение было отклонено на целевом сайте. Это не кнопка жалобы. Это диагностический инструмент.
Уведомление о политике возвратов:
- Каждый отчет рассматривается индивидуально
- Для обычных капч проверяется точность ответа
- Для токен-капч (reCAPTCHA, FunCaptcha) анализируется статистика воркера
- Возврат средств не происходит автоматически — он зарабатывается качеством сигнала
Параметры запроса (аналогичны reportCorrect):
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Endpoint: https://api.2captcha.com/reportIncorrect
Критические ошибки при отправке отчетов
ERROR_REPORT_NOT_RECORDED
Что вызывает эту ошибку:
- Доля ваших жалоб превышает 40% на капчах, которые на самом деле были решены верно, ИЛИ
- Отчет отправлен позже чем через 15 минут после получения решения
Время — ограничение. Точность — обязательное условие.
Решение:
python
# Пример логики обработки
def send_report(task_id, is_correct, solved_timestamp):
from datetime import datetime, timedelta
# Проверка временного лимита
if datetime.now() - solved_timestamp > timedelta(minutes=15):
logger.warning(f"Report skipped: timeout for task {task_id}")
return False
# Отправляйте reportIncorrect ТОЛЬКО для реально ошибочных ответов
endpoint = "reportCorrect" if is_correct else "reportIncorrect"
# ... отправка запроса
Рекомендации:
- Используйте reportIncorrect только для подтвержденных ошибок — никогда «на всякий случай»
- Фиксируйте время решения капчи в логах: это ваш аудиторский след
- Не используйте отчеты для нагрузочного тестирования или экспериментов
ERROR_DUPLICATE_REPORT
Система запоминает. Повторная отправка того же taskId возвращает эту ошибку — не как наказание, а как защиту от информационного шума.
Решение:
python
# Храните отправленные отчеты в кэше/БД
reported_tasks = set()
def safe_report(task_id, is_correct):
if task_id in reported_tasks:
logger.info(f"Duplicate report skipped for task {task_id}")
return {"errorId": 0, "status": "already_reported"}
# Отправка отчета...
reported_tasks.add(task_id)
return response
Рекомендации:
- Ведите клиентский реестр отправленных taskId
- Проектируйте идемпотентность: одна задача — один отчет — одна истина
- Проверяйте статус перед отправкой; избегайте оптимистичных повторных запросов при дубликатах
Как работает система обработки отчетов
Для обычных капч (изображения, текст):
- Вы отправляете reportIncorrect
- Система назначает перепроверку воркеру с высоким рейтингом
- Происходит сравнение ответов:
- Ответы совпадают → жалоба отклонена, оба воркера получают оплату
- Ответы различаются → вам возвращается баланс, первый воркер получает штраф
Арбитраж. В автоматическом режиме.
Для токен-капч (reCAPTCHA v2/v3, FunCaptcha, KeyCaptcha):
Автоматическая перепроверка не всегда возможна. Система адаптируется.
- Статистика накапливается на уровне каждого воркера
- Высокий процент reportIncorrect постепенно ограничивает доступ воркера к данному типу капч
- Для reCAPTCHA v3 корректировка репутации применяется в разрезе домена
Ни один отдельный отчет не определяет исход. Решают паттерны.
Почему важно отправлять оба типа отчетов
| Выгода | reportCorrect | reportIncorrect |
|---|---|---|
| Для вас | Повышает точность будущих решений | Дает возможность вернуть средства за ошибки |
| Для системы | Калибрует модели репутации воркеров | Быстрее выявляет проблемных исполнителей |
| Для воркеров | Поощряет стабильность бонусами | Применяет штрафы справедливо, на основе данных |
Важное напоминание: никогда не отправляйте reportIncorrect «на всякий случай». Превысите порог в 40% ложных жалоб — и функция отчетов может быть отключена для вашего аккаунта. Точность строит доверие. Шум — разрушает.
Практические рекомендации по внедрению
1. Таймауты и логика повторных попыток
javascript
// Пример на JavaScript
async function sendReportWithRetry(taskId, isCorrect, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await fetch(`https://api.2captcha.com/${isCorrect ? 'reportCorrect' : 'reportIncorrect'}`, {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
clientKey: 'YOUR_API_KEY',
taskId: taskId
})
});
const result = await response.json();
if (result.errorId === 0) return true;
// Обработка специфичных ошибок
if (result.errorCode === 'ERROR_REPORT_NOT_RECORDED') {
console.warn('Report rejected: check timing or complaint ratio');
return false;
}
if (result.errorCode === 'ERROR_DUPLICATE_REPORT') {
console.info('Report already submitted');
return true;
}
// Повтор при сетевых ошибках
if (attempt < maxRetries) {
await new Promise(r => setTimeout(r, 1000 * attempt));
continue;
}
} catch (e) {
console.error(`Attempt ${attempt} failed:`, e);
}
}
return false;
}
2. Логирование для отладки
python
import logging, json
from datetime import datetime
logger = logging.getLogger('captcha_reports')
def log_report(task_id, action, response, elapsed_ms):
logger.info(json.dumps({
'timestamp': datetime.utcnow().isoformat(),
'task_id': task_id,
'action': action, # 'correct' или 'incorrect'
'error_id': response.get('errorId'),
'error_code': response.get('errorCode'),
'response_time_ms': elapsed_ms
}))
Логи — не только для разбора инцидентов. Это ваш компас в реальном времени.
3. Мониторинг качества
- Отслеживайте соотношение: reportIncorrect к общему числу решенных капч
- Нормальный диапазон: 1–15%, в зависимости от типа капчи
- Резкий рост (>30%) требует расследования:
- Логика интеграции могла измениться
- Целевой сайт мог обновить правила валидации
- Ваша интерпретация «успеха» может требовать уточнения
Полезные ресурсы
- Документация API v2: https://rucaptcha.com/api-docs
- Коды ошибок API: https://rucaptcha.com/api-docs/error-codes
- Поддержка 2Captcha: https://rucaptcha.com/contacts
- Демо-страница для тестов: https://rucaptcha.com/demo
Если вы не пишете код — передайте это руководство вашей технической команде. При правильной реализации логика отчетов способна сократить долгосрочные расходы на распознавание капч на 20–30%. Это не оптимизация. Это рычаг.
Материал основан на официальной документации 2Captcha для API v2. Спецификации меняются. Всегда сверяйтесь с первоисточником.
Заключение
reportCorrect и reportIncorrect — не второстепенные функции. Это каналы обратной связи, вплетенные в ядро операционного интеллекта 2Captcha. При грамотном использовании они создают кумулятивный эффект: меньше ошибок, ниже затраты, умнее распределение задач, устойчивее экосистема воркеров.
Но система учится только тому, чему вы ее учите.
Отправляйте reportIncorrect только при уверенности в ошибке. Соблюдайте 15-минутное окно. Фиксируйте свои отправки. Позвольте данным — а не догадкам — направлять ваши сигналы.
Потому что в конечном счете качество вашей интеграции влияет не только на ваши метрики. Оно формирует поведение всей сети.