В Power Automate нет отдельного коннектора для CAPTCHA — эту задачу закрывает обычное HTTP-действие. Оно отправляет параметры задачи в API CaptchaAI, дожидается решения в цикле опроса и передаёт готовый токен дальше по потоку, туда, где раньше требовалась ручная отправка формы. Дальше — как собрать это в самом Power Automate: от ручного триггера с sitekey и pageurl до POST-запроса с решённым токеном reCAPTCHA v2.
Когда это нужно: сценарий с порталом поставщика
Финансовому отделу логистической компании, работающей с поставщиками в СНГ и Европе, нужно ежедневно выгружать данные с портала поставщика, закрытого reCAPTCHA v2. Ручная проверка отнимает время у сотрудников и не масштабируется на несколько поставщиков сразу. Поток Power Automate забирает у триггера параметры CAPTCHA (sitekey, pageurl), отправляет их в CaptchaAI, дожидается решения в цикле опроса, а затем использует токен, чтобы авторизоваться на портале и забрать данные — без участия человека.
При таком объёме одного потока обычно достаточно тарифа BASIC ($15/мес, 5 потоков) — этого хватает на параллельный опрос нескольких запущенных экземпляров Power Automate. При росте числа поставщиков логично перейти на STANDARD ($30/мес, 15 потоков).
Если сценарий затрагивает персональные данные, заранее сверьтесь, какие данные вы вправе обрабатывать, — в том числе с точки зрения 152-ФЗ для российских юрлиц.
Шаг 1. Создайте поток Power Automate
В Power Automate создайте Мгновенный облачный поток на основе Ручного триггера — подойдёт и любой другой триггер, если он передаёт нужные параметры дальше по сценарию.
Добавьте входные параметры в триггер
Добавьте в ручной триггер два текстовых поля:
- sitekey — sitekey reCAPTCHA v2 со страницы с формой;
- pageurl — адрес страницы, на которой показывается CAPTCHA.
Шаг 2. Отправьте задачу в CaptchaAI
Добавьте действие HTTP (доступно в Premium-коннекторе):
- Метод: GET
- URI:
https://ocr.captchaai.com/in.php
Query-параметры запроса:
key— ваш API-ключ CaptchaAI;method—userrecaptcha;googlekey—@{triggerBody()['text']}(значение sitekey из триггера);pageurl—@{triggerBody()['text_1']}(значение pageurl из триггера);json—1.
Разберите ответ. После действия HTTP добавьте действие Parse JSON:
Схема:
{
"type": "object",
"properties": {
"status": { "type": "integer" },
"request": { "type": "string" }
}
}
Содержимое: @{body('HTTP')}
Шаг 3. Проверьте, что задача принята
Добавьте действие Условие:
- условие:
@{body('Parse_JSON')?['status']}равно1.
Если нет (CaptchaAI не принял задачу):
- добавьте действие Завершить со статусом «Сбой» и сообщением
Submit error: @{body('Parse_JSON')?['request']}.
Если да — переходите к циклу опроса.
Шаг 4. Постройте цикл опроса
Внутри ветки «Да» добавьте цикл Do Until.
Условие выхода из цикла: @{variables('solveStatus')} не равно pending.
Перед циклом инициализируйте две переменные:
- solveStatus (строка) =
pending; - solvedToken (строка) = пусто.
Внутри цикла Do Until добавьте по порядку четыре действия:
- Задержка (
Delay) — 5 секунд, чтобы не долбитьres.phpслишком часто. - HTTP — опрос результата —
GETнаhttps://ocr.captchaai.com/res.phpс query-параметрамиkey(API-ключ CaptchaAI),action=get,id=@{body('Parse_JSON')?['request']},json=1. - Parse JSON — ответ опроса — та же схема, что и в шаге 2.
- Условие — проверка статуса —
@{body('Parse_JSON_2')?['status']}равно1? Если да (решено) — установитеsolvedToken=@{body('Parse_JSON_2')?['request']}иsolveStatus=solved. Если нет — добавьте ещё одно условие:@{body('Parse_JSON_2')?['request']}не равноCAPCHA_NOT_READY; истина означает реальную ошибку (solveStatus=error), ложь — что решение ещё не готово, и цикл продолжится без изменений.
Ограничьте цикл Do Until:
- количество итераций: 20;
- тайм-аут:
PT3M(3 минуты).
Шаг 5. Отправьте решённый токен
После цикла добавьте действие Условие по значению @{variables('solveStatus')}.
Если равно solved:
- используйте
@{variables('solvedToken')}в HTTP POST для отправки формы; - либо передайте его дальше — по email, в Teams или через любой другой коннектор.
Пример HTTP POST для отправки формы:
- Метод: POST
- URI: адрес целевой формы
- Тело:
{"g-recaptcha-response": "@{variables('solvedToken')}", "other_field": "value"}
Если статус не solved:
- отправьте уведомление об ошибке в Teams или по email.
Целиком собранный поток выглядит так:
[Manual Trigger (sitekey, pageurl)]
↓
[Initialize Variables: solveStatus, solvedToken]
↓
[HTTP: Submit to CaptchaAI /in.php]
↓
[Parse JSON]
↓
[Condition: status = 1?]
↓ Yes
[Do Until: solveStatus ≠ pending]
├── [Delay: 5 seconds]
├── [HTTP: Poll CaptchaAI /res.php]
├── [Parse JSON]
└── [Condition: Solved or Error?]
↓
[Condition: solveStatus = solved?]
↓ Yes
[HTTP: Submit form with token]
↓
[Compose: Success response]
Частые вопросы
Как понять, что reCAPTCHA не решилась, а не что поток просто завис?
Ориентируйтесь на поле request из ответа res.php: значение CAPCHA_NOT_READY означает, что решение ещё не готово и цикл должен продолжаться, а любое другое значение при status = 0 — это код реальной ошибки, и цикл должен завершиться с solveStatus = error.
Что делать, если Do Until укладывается в тайм-аут раньше, чем CaptchaAI успевает решить задачу?
reCAPTCHA v2 обычно решается за секунды, но при нагрузке на очередь решение может занять больше времени. Если лимита PT3M и 20 итераций не хватает, увеличьте оба значения — задержку между опросами лучше оставить не меньше 5 секунд, чтобы не создавать лишнюю нагрузку на res.php.
Нужна ли лицензия Power Automate Premium?
Да — действие HTTP относится к Premium-коннекторам. Если у вас бесплатный план, используйте собственный (custom) коннектор или разверните вызов через Azure Functions.
Как безопасно хранить API-ключ CaptchaAI в потоке?
Не прописывайте ключ прямо в действии HTTP. Вынесите его в переменные среды (Environment Variables) Power Automate или подключите коннектор Azure Key Vault — так ключ не попадёт в определение потока и в историю изменений.
Сколько потоков CaptchaAI нужно для параллельных запусков Power Automate?
Каждый одновременно выполняющийся экземпляр потока, ожидающий решения, занимает один поток CaptchaAI. Для одного-двух потоков Power Automate хватает тарифа BASIC ($15/мес, 5 потоков); при регулярном параллельном запуске 10+ экземпляров разумнее сразу взять ADVANCE ($90/мес, 50 потоков).
Поиск неисправностей
Пять типичных проблем при первой сборке потока:
- Действие HTTP недоступно — в бесплатном плане нет Premium-коннекторов; перейдите на Power Automate Premium или используйте собственный (custom) коннектор.
- Parse JSON выдаёт ошибку — тело ответа приходит как текст, а не JSON; проверьте, что в query-параметрах передан
json=1. - Цикл крутится бесконечно — переменная
solveStatusне обновляется; сверьте имена переменных в действиях Set Variable, они должны совпадать буквально. - Ошибка 403 от CaptchaAI — ограничение по IP или неверный API-ключ; проверьте ключ и убедитесь, включён ли whitelisting по IP в аккаунте.
- Поток завершается по тайм-ауту — отдельные действия по умолчанию ограничены 2 минутами; тайм-аут
Do Until(PT3M) уже это учитывает, при необходимости увеличьте лимит.