Power Automate bisa menyelesaikan CAPTCHA lewat action HTTP di konektor Premium: kirim task ke in.php milik CaptchaAI, polling hasilnya di res.php, lalu pakai token yang keluar untuk melanjutkan submit form — tanpa klik manual sama sekali.
Microsoft Power Automate (dulu Flow) menyambungkan ratusan layanan Microsoft dan pihak ketiga. Masalahnya, begitu alur menyentuh formulir atau API yang dijaga reCAPTCHA v2, otomatisasi berhenti total — sampai CaptchaAI masuk lewat konektor HTTP bawaan Power Automate. Yang akan Anda bangun:
- Trigger dengan dua input (site key, URL halaman)
- Action HTTP ke CaptchaAI plus loop Do until yang polling hasilnya
- Langkah terakhir yang memakai token solve untuk submit form
Studi Kasus: Ambil Data Vendor di Balik reCAPTCHA v2
Bayangkan tim finance Anda — tim data berbasis Jakarta atau Surabaya — perlu menarik data harga dari portal vendor tiap malam, dan halaman login portal itu menampilkan reCAPTCHA v2. Daripada login manual jam 11 malam, flow Power Automate terjadwal menerima parameter CAPTCHA, mengirimkannya ke CaptchaAI, menunggu token, lalu memakainya untuk autentikasi dan menarik datanya sendiri.
Pola ini juga relevan buat agensi price-monitoring atau tim data startup yang rutin mengotomatiskan pengambilan dari beberapa portal sekaligus — asal data yang diambil memang milik atau sudah diotorisasi untuk diakses tim Anda, sejalan dengan semangat UU Pelindungan Data Pribadi (UU 27/2022).
Sebelum dijalankan di data production, uji dulu satu siklus penuh pakai sitekey dan pageurl yang sudah Anda kenal — supaya loop polling dan cabang error benar-benar teruji sebelum dijadwalkan otomatis tiap malam.
Langkah 1: Bikin Cloud Flow Baru
Di Power Automate, buat Instant cloud flow dengan Manual trigger (atau trigger lain sesuai kebutuhan Anda).
Tambahkan Input sitekey dan pageurl ke Trigger
Tambahkan dua input teks ke manual trigger:
- sitekey — site key reCAPTCHA v2 dari halaman target
- pageurl — URL halaman yang menampilkan CAPTCHA
Langkah 2: Kirim Task CAPTCHA ke CaptchaAI
Tambahkan action HTTP (konektor Premium), lalu set Method ke GET dan URI ke https://ocr.captchaai.com/in.php.
Isi bagian Queries dengan parameter berikut:
key— API key CaptchaAI Andamethod—userrecaptchagooglekey—@{triggerBody()['text']}(input sitekey)pageurl—@{triggerBody()['text_1']}(input pageurl)json—1
Tambahkan action Parse JSON setelah action HTTP untuk membaca respons CaptchaAI. Skemanya:
{
"type": "object",
"properties": {
"status": { "type": "integer" },
"request": { "type": "string" }
}
}
Isi Content dengan @{body('HTTP')}.
Langkah 3: Cek Respons Pengiriman
Tambahkan action Condition yang mengecek apakah @{body('Parse_JSON')?['status']} sama dengan 1.
Kalau tidak (artinya pengiriman gagal), tambahkan action Terminate dengan status "Failed" dan pesan Submit error: @{body('Parse_JSON')?['request']}. Kalau ya, lanjutkan ke polling loop di langkah berikutnya.
Langkah 4: Bangun Loop Polling Hasil
Di dalam cabang "Jika Ya", tambahkan loop Do until dengan kondisi berhenti @{variables('solveStatus')} tidak sama dengan pending.
Sebelum loop, inisialisasi dua variabel:
- solveStatus (String) =
pending - solvedToken (String) = kosong
Di dalam loop Do until, susun action berikut secara berurutan.
4a. Tambahkan Delay
Action Delay: 5 detik.
4b. HTTP — Polling ke res.php
Set Method ke GET dan URI ke https://ocr.captchaai.com/res.php, lalu isi Queries dengan:
key— API key CaptchaAI Andaaction—getid—@{body('Parse_JSON')?['request']}json—1
4c. Parse JSON Hasil Polling
Pakai skema yang sama seperti Langkah 2.
4d. Cek Status Hasil
Bandingkan @{body('Parse_JSON_2')?['status']} dengan 1.
Kalau sudah solved:
- Set variabel
solvedToken=@{body('Parse_JSON_2')?['request']} - Set variabel
solveStatus=solved
Kalau belum, tambahkan kondisi lagi untuk mengecek @{body('Parse_JSON_2')?['request']} terhadap CAPCHA_NOT_READY: kalau nilainya beda (berarti error), set solveStatus = error; kalau sama (masih pending), biarkan saja supaya loop lanjut.
Set batas loop Do until ke Count 20 (maksimum iterasi) dan Timeout PT3M (3 menit).
Langkah 5: Pakai Token untuk Submit Form
Setelah loop selesai, tambahkan Condition untuk cek @{variables('solveStatus')}.
Kalau sama dengan "solved", pakai @{variables('solvedToken')} di HTTP POST untuk submit form — atau kirim lewat email, pesan Teams, atau konektor lain. Contoh HTTP POST-nya:
- Method:
POST - URI: URL form target
- Body:
{"g-recaptcha-response": "@{variables('solvedToken')}", "other_field": "value"}
Kalau bukan "solved", kirim notifikasi error lewat Teams atau email supaya ada yang menindaklanjuti.
Token solve CaptchaAI punya masa aktif terbatas — kalau submit form gagal, minta token baru lewat Langkah 2, jangan pakai ulang
solvedTokenlama.
Diagram Alur Flow Secara Utuh
[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]
FAQ Seputar Integrasi Power Automate + CaptchaAI
Apakah paket gratis Power Automate bisa dipakai untuk flow ini?
Tidak. Action HTTP adalah fitur Premium, jadi kalau Anda masih di paket gratis, opsinya pakai custom connector atau merutekan panggilan lewat Azure Functions.
Bisakah flow ini menyelesaikan Cloudflare Turnstile atau CAPTCHA gambar, bukan cuma reCAPTCHA v2?
Bisa. Ganti parameter method menjadi turnstile untuk Cloudflare Turnstile, atau post untuk CAPTCHA gambar/OCR, lalu sesuaikan parameter query yang dibutuhkan masing-masing tipe.
Berapa lama biasanya token keluar setelah task dikirim?
Tergantung tipe CAPTCHA dan beban antrean — makanya loop polling di Langkah 4 diberi delay 5 detik dengan batas 20 iterasi, sekitar 3 menit. Kalau masih pending setelah itu, cek dulu sitekey dan pageurl-nya sebelum menaikkan timeout.
Apa yang harus dilakukan kalau loop polling berhenti di status error?
Cek isi request dari respons terakhir Parse JSON — biasanya berisi pesan error CaptchaAI (API key salah, saldo habis, atau parameter tidak lengkap). Tambahkan notifikasi Teams di cabang error supaya pesan itu langsung terlihat.
Bisakah flow ini dipicu otomatis terjadwal, bukan cuma manual trigger?
Bisa. Ganti Manual trigger di Langkah 1 dengan Recurrence trigger untuk jalan tiap malam, atau pakai trigger SharePoint/Dataverse kalau pengambilan data dipicu event lain di sistem Anda.
Troubleshooting: Masalah yang Sering Muncul
Action HTTP tidak muncul? Paket gratis tidak termasuk konektor Premium — upgrade atau pakai custom connector.
Parse JSON gagal? Body respons berupa teks biasa, bukan JSON. Pastikan json=1 ada di query string.
Loop jalan tanpa henti? Variabel solveStatus kemungkinan tidak ter-update. Cek nama variabel sama persis di tiap action Set Variable.
Error 403 dari CaptchaAI? Biasanya pembatasan IP atau API key salah. Verifikasi API key, lalu cek IP whitelisting di akun Anda.
Flow kena timeout? Timeout 30 hari untuk keseluruhan flow aman, tapi tiap action dibatasi 2 menit — timeout Do Until (PT3M) sudah menangani ini.
Langkah Berikutnya
Tambahkan penyelesaian CAPTCHA ke flow Power Automate Anda — dapatkan API key CaptchaAI Anda dan mulai bangun flow-nya hari ini.
Untuk pola integrasi otomatisasi lain, baca juga Zapier + CaptchaAI: solve CAPTCHA tanpa coding, Make (Integromat) + CaptchaAI, dan Retool + CaptchaAI: menangani CAPTCHA di internal tool.
Baca Juga
Untuk topik reCAPTCHA v2 yang lebih spesifik, lihat cara menangani callback reCAPTCHA v2 lewat API, menangani reCAPTCHA v2 dan Turnstile di situs yang sama, serta cara kerja mekanisme callback reCAPTCHA v2.