Чтобы решить CAPTCHA внутри n8n без единой строки серверного кода, нужны четыре узла: HTTP Request для отправки задачи, Wait для паузы, цикл на узле IF для опроса результата и ещё один HTTP Request — для использования токена. У n8n, в отличие от Zapier, циклы встроены изначально — для схемы «отправил — подождал — проверил» это решающее преимущество.
n8n или Zapier: что выбрать для решения CAPTCHA
Ключевое отличие — поддержка циклов «из коробки»: в n8n она встроена, а в Zapier опрос результата CAPTCHA приходится эмулировать через Paths.
| Критерий | n8n | Zapier |
|---|---|---|
| Поддержка циклов / повторов | Встроенная (IF-циклы, узел Loop) | Ограниченная (только Paths) |
| Self-hosted вариант | Есть, бесплатно | Нет, только облако |
| Узлы с кодом | Полноценный JavaScript | Ограниченный |
| Стоимость | Бесплатно при self-hosted или платное облако | Платно, за каждую задачу |
| Порог входа | Средний | Низкий |
Для рабочих процессов с CAPTCHA n8n обычно практичнее: циклы и узлы Code закрывают логику «отправить — подождать — проверить» без сторонних сервисов.
Как устроен рабочий процесс: от отправки до токена
Полная цепочка выглядит так:
Manual Trigger / Cron
↓
HTTP Request: Submit CAPTCHA
↓
Wait: 10 seconds
↓
Loop: Poll until solved
├── HTTP Request: Get result
├── IF: status == 1? → Exit loop
└── Wait: 5 seconds → Loop again
↓
HTTP Request: Use token
Шаг 1: отправьте CAPTCHA на решение
Добавьте узел HTTP Request:
- Метод:
POST - URL-адрес:
https://ocr.captchaai.com/in.php - Тип содержимого тела:
Form URL Encoded
Параметры тела запроса:
| Имя | Значение |
|---|---|
key |
{{ $credentials.captchaaiApiKey }} или жёстко закодируйте свой ключ |
method |
userrecaptcha |
googlekey |
6Le-SITEKEY |
pageurl |
https://example.com |
json |
1 |
Ответ:
{
"status": 1,
"request": "71823456"
}
Шаг 2: подождите перед первым опросом
Добавьте узел Wait:
- Время ожидания:
10 - Единица:
Seconds
Пауза даёт решателю время начать обработку до первого запроса — без неё большинство ранних опросов вернут CAPCHA_NOT_READY.
Шаг 3: опрашивайте результат в цикле
n8n поддерживает циклы через узел Loop Over Items или подключением ложного выхода узла IF обратно к предыдущему узлу.
Вариант А: цикл на узле IF
Добавьте узел HTTP Request (опрос):
- Метод:
GET - URL-адрес:
https://ocr.captchaai.com/res.php - Параметры запроса:
key,action=get,id={{ $json.request }},json=1
Подключите его к узлу IF: сравните значение 1 {{ $json.status }} со значением 2 1 через операцию Equal.
- Истинный выход → переходите к следующему действию (использование токена)
- Ложный выход → Wait (5 секунд) → назад к узлу опроса
Вариант Б: узел Code
Для более точного контроля используйте узел Code:
const apiKey = 'YOUR_API_KEY';
const taskId = $input.first().json.request;
for (let i = 0; i < 24; i++) {
await new Promise(r => setTimeout(r, 5000));
const resp = await fetch(
`https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
);
const data = await resp.json();
if (data.status === 1) {
return [{ json: { token: data.request, taskId } }];
}
if (data.request !== 'CAPCHA_NOT_READY') {
throw new Error(`CaptchaAI error: ${data.request}`);
}
}
throw new Error(`Task ${taskId} timed out`);
Шаг 4: отправьте решённый токен
Добавьте ещё один узел HTTP Request для отправки формы с решённым токеном:
- Метод:
POST - URL-адрес:
https://staging.example.com/submit - Тип содержимого тела:
Form URL Encoded
Параметры тела запроса включают данные вашей формы, а также параметр g-recaptcha-response со значением {{ $json.token }}.
Как надёжно хранить API-ключ в n8n
Используйте встроенную систему Credentials n8n:
- Перейдите в раздел Credentials → Add Credential → Header Auth.
- Название:
CaptchaAI API Key - Храните ключ в защищённом хранилище n8n, а не в теле рабочего процесса.
Либо используйте переменные окружения:
# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"
Обращение из узлов: {{ $env.CAPTCHAAI_API_KEY }}
Отдельный сценарий: решение CAPTCHA по изображению
Для CAPTCHA-изображений измените узел отправки:
method:base64body: изображение, закодированное в base64 (из предыдущего узла или по URL)
Чтобы превратить URL изображения в base64 прямо в n8n, добавьте узел Code перед отправкой:
const imageUrl = $input.first().json.imageUrl;
const resp = await fetch(imageUrl);
const buffer = Buffer.from(await resp.arrayBuffer());
const base64 = buffer.toString('base64');
return [{ json: { imageBase64: base64 } }];
Автоматическая проверка баланса потоков
Заведите отдельный рабочий процесс, который выполняется по расписанию:
Cron (daily at 9 AM)
↓
HTTP Request: GET res.php?action=getbalance
↓
IF: balance < 5
↓
Slack / Email: "CaptchaAI balance low: $X.XX"
Агентствам из Беларуси, Казахстана и России часто удобнее вместо Slack / Email подключить узел Telegram: уведомление о низком балансе приходит прямо в рабочий чат.
Типичные ошибки и как их исправить
| Проблема | Причина | Как исправить |
|---|---|---|
| Цикл опроса работает бесконечно | Нет ограничения на число итераций | Добавьте переменную-счётчик и прерывайте цикл после 24 попыток |
Постоянно приходит CAPCHA_NOT_READY |
Слишком короткая пауза перед первым опросом | Увеличьте начальное ожидание до 15–20 секунд |
| Токен не попадает в следующий узел | Неверный путь в выражении | Проверьте, что {{ $json.token }} соответствует реальному полю ответа |
| Учётные данные не найдены | Переменная окружения не задана | Перезапустите n8n после того, как переменные установлены |
Часто задаваемые вопросы
Поддерживает ли n8n Cloudflare Turnstile?
Да. Замените method на turnstile и передавайте sitekey вместо googlekey — остальная цепочка узлов не меняется.
Работает ли эта схема в облачной версии n8n, а не только в self-hosted?
Да, узлы HTTP Request, Wait и Code доступны и в n8n Cloud. Разница только в хранении ключа: вместо переменной окружения используйте встроенные Credentials — сам сценарий не меняется.
Сколько потоков CaptchaAI нужно для пакетной обработки через n8n?
Зависит от объёма и от того, сколько элементов идёт параллельно через узел Split In Batches. Для нечастых запусков хватает BASIC ($15/мес, 5 потоков); при регулярной пакетной обработке разумнее взять ADVANCE ($90/мес, 50 потоков).
Как избежать зависшего цикла опроса, если решатель долго не отвечает?
Ограничьте число итераций счётчиком (как в примере узла Code — 24 попытки по 5 секунд) и выбрасывайте ошибку по тайм-ауту вместо бесконечного цикла.
Добавьте решение CAPTCHA в свой n8n-пайплайн
Получите API-ключ на сайте captchaai.com и подключите его к первому узлу HTTP Request — дальше цепочка работает без ручного вмешательства.