Вызывайте API решения CAPTCHA из n8n
Создайте задачу с помощью узла HTTP Request в n8n, затем выполните ветвление по её статусу. Если статус всё ещё pending или solving, подождите и запросите задачу с тем же ID — не отправляйте ещё один POST.
На этой странице
Настройка сайта и учётных данных
- 1.
Активируйте профиль сайта
Настройте целевое имя хоста в консоли solvethree и убедитесь, что его профиль активен для вашего рабочего пространства. Передача имени хоста и действия в задаче не создаёт профиль.
- 2.
Создание учётных данных Header Auth в n8n
Настройте отправку заголовка
Authorizationсо значениемBearer, за которым следует API-ключ вашего рабочего пространства. Храните ключ в учётных данных, а не в JSON задачи.
Настройка запроса создания
Назовите узел HTTP Request Create task. Узел опроса будет ссылаться на это имя, чтобы получить исходный ID задачи.
| Поле | Настройка |
|---|---|
| Способ | POST |
| URL | https://api.solvethree.com/v1/tasks |
| Аутентификация | Общий тип учётных данных |
| Общий тип аутентификации | Header Auth; выберите созданные учётные данные |
| Отправлять параметры запроса | Включите; добавьте waitMs со значением 15000 |
| Отправлять тело | Включите; выберите JSON и используйте тело ниже |
{
"site": "accounts.example.com",
"action": "login",
"proxy": "http://user:[email protected]:8080",
"requestId": "example_login_001"
}Замените site, action и proxy на имя хоста, действие и прокси для вашего запроса. Передайте ровно одно из полей: proxy или proxyCandidates; в этом примере используется один прокси. Не добавляйте type или url. Тип reCAPTCHA по умолчанию — Enterprise v3.
Замените requestId из примера уникальным значением для каждой новой логической задачи. Не меняйте это значение, если потребуется восстановить задачу после тайм-аута. Допускается 1–64 символа: буквы ASCII, цифры, подчёркивания или дефисы.
waitMs должен находиться в строке запроса URL, а не в теле JSON. Установите тайм-аут HTTP-запроса больше запрошенного ожидания в 15 секунд, чтобы учесть сетевые задержки; 30 секунд — разумное начальное значение, а не гарантия времени решения. Учётные данные Header Auth обеспечивают аутентификацию, поэтому дублировать её в разделе «Отправлять заголовки» не нужно.
Ветвление по статусу, а не по успеху HTTP-запроса
Обрабатывайте неуспешные HTTP-ответы до проверки данных задачи. Для успешного ответа подключите узел IF или Switch и проверьте {{ $json.status }}.
| Статус | Следующее действие |
|---|---|
| готово | Выйдите из цикла опроса и используйте решение. |
| failed | Остановите опрос. Сохраните errorCode и error для диагностики. |
| pending или solving | Проверьте срок завершения опроса, затем подождите и запросите существующую задачу через GET. |
Для готовой задачи reCAPTCHA отправьте полученный токен, используя возвращённые параметры идентификации userAgent и secChUa, а также прокси, через который удалось решить задачу. Готовая задача означает, что решение было сгенерировано; это не подтверждает, что сайт принял последующий запрос.
Стоимость неудачных решений возвращается. Выясните причину указанной ошибки, а не повторяйте запросы с неизменёнными данными и не считайте, что в рабочем пространстве недостаточно средств.
Подождите, затем выполните GET с исходным ID
- 1.
Сохраните фиксированный срок завершения
Перед запуском Create task сохраните в рабочем процессе срок завершения опроса — например, через две минуты после начала создания. Это правило остановки вашего рабочего процесса, а не ограничение API solvethree. Храните срок отдельно от HTTP-ответа, чтобы последующие ответы его не перезаписали.
- 2.
Проверяйте условие перед каждым опросом
Для статусов pending или solving используйте узел IF, чтобы сравнить текущее время с сохранённым сроком. Если срок истёк, завершите цикл и сохраните ID задачи. Иначе приостановите выполнение на две секунды с помощью узла Wait, затем снова проверьте срок перед GET.
- 3.
Получение существующей задачи
Настройте второй узел HTTP Request с параметрами ниже. Направьте его ответ обратно в ту же ветку проверки статуса. Никогда не направляйте ветку опроса обратно в Create task.
| Поле | Настройка |
|---|---|
| Способ | GET |
| URL | https://api.solvethree.com/v1/tasks/{{ $('Create task').item.json.id }} |
| Аутентификация | Общий тип учётных данных |
| Общий тип аутентификации | Header Auth; выберите те же учётные данные |
| Отправлять параметры запроса | Включите; добавьте waitMs со значением 15000 |
| Отправлять тело | Отключите |
Выражение для ID задачи — {{ $('Create task').item.json.id }}. Оно считывает id из указанного узла создания, даже если последний элемент содержит ответ опроса или другие данные рабочего процесса. Имя узла в выражении должно совпадать с именем в вашем рабочем процессе.
GET поддерживает ожидание до 15 секунд. Для этого HTTP-запроса предусмотрите такой же запас тайм-аута, как и для запроса создания. По истечении срока новые попытки опроса прекращаются; уже выполняющийся запрос может завершиться позже.
Эквивалентный GET-запрос вне n8n:
curl --fail-with-body --max-time 30 \
"https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
-H "Authorization: Bearer $SOLVETHREE_API_KEY"Восстановление после тайм-аута POST без создания новой задачи
Тайм-аут соединения не доказывает, что создание не удалось. Если вы получили ID, запросите эту задачу. Если нет, повторите POST с теми же входными данными задачи и тем же requestId, чтобы восстановить существующую задачу. Повторное использование этого ID с другими входными данными задачи вызывает конфликт.
Аналогично, истечение срока опроса — это локальное условие остановки, а не статус неудачной задачи. Сохраните исходный ID, чтобы при последующем выполнении получить задачу, а не платить за ещё одно решение.
Источники и справочник API
Запустите первую задачу.
Начните с $5 на балансе рабочего пространства.