Integrations

Power Automate + CaptchaAI: Solução Microsoft Flow CAPTCHA

Dá para resolver reCAPTCHA v2 dentro do Power Automate sem escrever automação de navegador: basta apontar uma ação HTTP para a API da CaptchaAI. É a saída mais direta quando um fluxo esbarra em um formulário protegido e clicar manualmente em "não sou um robô" não escala.

Este guia monta, passo a passo, um fluxo do Power Automate (antigo Microsoft Flow) que envia o desafio para a CaptchaAI, faz polling do resultado e usa o token resolvido no envio do formulário — dentro do editor visual, sem automação externa.

O que você precisa antes de começar

  • Uma conta na CaptchaAI com uma chave de API ativa
  • Licença do Power Automate Premium (a ação HTTP é um conector Premium) ou um conector personalizado equivalente
  • A sitekey do reCAPTCHA v2 e a URL da página onde o desafio aparece

Cenário real: coleta automatizada em portal de fornecedor

Times financeiros no Brasil e em Portugal esbarram nisso com frequência: o portal de um fornecedor exige reCAPTCHA v2 antes de liberar notas fiscais, e a coleta manual não acompanha o volume mensal. Em vez de um analista clicar no desafio repetidamente, um fluxo do Power Automate recebe os parâmetros do CAPTCHA (sitekey, URL da página), envia-os para a CaptchaAI, aguarda a resolução e usa o token para autenticar e recuperar os dados — sem intervenção humana em cada execução.

Se o fluxo grava o histórico de execução, vale revisar o que fica registrado: por LGPD, evite persistir o token ou dados pessoais do fornecedor além do necessário para auditoria.

Etapa 1: crie o fluxo

No Power Automate, crie um fluxo de nuvem instantâneo com um gatilho manual (ou qualquer gatilho de sua escolha).

Parâmetros de entrada do gatilho: adicione duas entradas de texto ao gatilho manual — sitekey (a sitekey do reCAPTCHA v2) e pageurl (a URL da página com o CAPTCHA).

Etapa 2: envie a tarefa CAPTCHA para a CaptchaAI

Adicione uma ação HTTP (conector Premium) com método GET para https://ocr.captchaai.com/in.php, e configure estes parâmetros de consulta:

  • key — sua chave de API da CaptchaAI
  • methoduserrecaptcha
  • googlekey@{triggerBody()['text']} (entrada da sitekey)
  • pageurl@{triggerBody()['text_1']} (entrada da URL da página)
  • json1

Analise a resposta: adicione uma ação Parse JSON logo após a ação HTTP:

Esquema:

{
  "type": "object",
  "properties": {
    "status": { "type": "integer" },
    "request": { "type": "string" }
  }
}

Conteúdo: @{body('HTTP')}

Etapa 3: valide a resposta do envio

Adicione uma ação Condição testando se @{body('Parse_JSON')?['status']} é igual a 1. Se não (falha no envio), adicione uma ação Encerrar com status "Failed" e mensagem Submit error: @{body('Parse_JSON')?['request']}. Se sim, siga para o loop de polling montado na próxima etapa.

Etapa 4: monte o loop de polling

Dentro do branch "Se sim", adicione um loop Do until:

Condição do loop: @{variables('solveStatus')} não é igual a pending

Antes do loop, inicialize duas variáveis:

  • solveStatus (String) = pending
  • solvedToken (String) = vazio

Dentro do loop Do until, adicione estas ações em sequência: (4a) Atraso de 5 segundos; (4b) HTTP — consulta do resultado, método GET para https://ocr.captchaai.com/res.php; (4c) Parse JSON — resposta do polling, usando o mesmo esquema da Etapa 2; (4d) Condição — verifique o status.

Os parâmetros de consulta da ação 4b são:

  • key — sua chave de API da CaptchaAI
  • actionget
  • id@{body('Parse_JSON')?['request']}
  • json1

Na condição 4d, teste se @{body('Parse_JSON_2')?['status']} é igual a 1.

Se sim (resolvido):

  • Defina a variável solvedToken = @{body('Parse_JSON_2')?['request']}
  • Defina a variável solveStatus = solved

Se não:

  • Adicione outra condição: @{body('Parse_JSON_2')?['request']} não é igual a CAPCHA_NOT_READY
  • Se verdadeiro (erro), defina solveStatus = error
  • Se falso (ainda pendente), não faça nada — o loop continua

Defina o limite do loop Do until com contagem de 20 (iterações máximas) e tempo limite PT3M (3 minutos).

Etapa 5: use o token resolvido

Após o loop, adicione uma Condição para checar @{variables('solveStatus')}:

Se for igual a solved:

  • Use @{variables('solvedToken')} em um HTTP POST para enviar o formulário
  • Ou envie o resultado por e-mail, mensagem do Teams, ou qualquer outro conector

Exemplo de HTTP POST para enviar um formulário: método POST, URI igual à URL do formulário de destino, e corpo {"g-recaptcha-response": "@{variables('solvedToken')}", "other_field": "value"}.

Se não for solved:

  • Envie uma notificação de erro via Teams ou e-mail

Estrutura completa do fluxo

[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]

Boas práticas antes de publicar o fluxo

  • Não grave a chave de API na definição do fluxo. Use o conector Variáveis de Ambiente ou o Azure Key Vault para injetá-la em tempo de execução.
  • Este fluxo também pode ser chamado a partir do Power Apps, pelo conector nativo Power Automate, passando sitekey e pageurl e recebendo o token de volta.

Perguntas frequentes

Qual plano da CaptchaAI faz sentido para essa automação?

O Power Automate dispara poucas execuções simultâneas por vez, então o BASIC (US$ 15/mês, 5 threads) costuma bastar para testes e volumes baixos. Para várias execuções em paralelo, considere o STANDARD (US$ 30/mês, 15 threads) ou o ADVANCE (US$ 90/mês, 50 threads) — solves ilimitados por thread em qualquer plano.

Preciso do Power Automate Premium para usar o conector HTTP?

Sim. A ação HTTP é um recurso Premium. Se você estiver em um plano gratuito, use um conector personalizado ou roteie a chamada por meio do Azure Functions.

Consigo resolver outros tipos de CAPTCHA no mesmo fluxo?

Sim. Troque o parâmetro method para turnstile (Cloudflare Turnstile) ou post (CAPTCHAs de imagem/OCR) e ajuste os parâmetros exigidos por cada tipo.

Como evito registrar dados sensíveis do fornecedor no histórico, por causa da LGPD?

Use uma ação Compose só com os campos necessários antes de gravar no histórico, não mantenha o token resolvido além do tempo de uso e restrinja quem acessa as execuções do fluxo.

O que fazer quando o loop Do until estoura as 20 iterações sem resolver?

Com atraso de 5 s e 20 iterações, a espera já fica perto do timeout de PT3M. Se isso for frequente, o mais comum é sitekey ou pageurl incorretos, ou instabilidade em ocr.captchaai.com — confirme as credenciais antes de só aumentar a contagem.

Solução de problemas

  • Conector HTTP não disponível — o plano gratuito não inclui conectores Premium; atualize para o Power Automate Premium ou use um conector personalizado.
  • Parse JSON falha — o corpo da resposta é texto, não JSON; confirme que json=1 está nos parâmetros de consulta.
  • Loop é executado indefinidamente — a variável solveStatus não foi atualizada; verifique se os nomes batem exatamente nas ações Set Variable.
  • Erro 403 da CaptchaAI — restrição de IP ou chave de API errada; verifique a chave e confirme se a lista de permissões de IP está habilitada na conta.
  • Tempo limite do fluxo — o padrão de 30 dias é adequado, mas ações individuais expiram em 2 minutos; o timeout do Do until (PT3M) já cobre isso, aumente se necessário.

Próximas etapas

Leve a resolução de CAPTCHA para os seus fluxos do Power Automate — obtenha sua chave de API da CaptchaAI e monte esse fluxo ainda hoje.

Guias relacionados:

Artigos relacionados

Os comentários estão desativados para este artigo.