Retool panelinizde bir formu engelleyen reCAPTCHA v2 için üç sorgu yeterlidir: görevi gönderen bir REST sorgusu, sonucu sorgulayan ikincisi ve ikisini bağlayan bir JavaScript sorgusu. Ek sunucu ya da tarayıcı otomasyonu yok; kurulum on dakika sürüyor.
Retool sorguları sunucu tarafında düz HTTP isteği atar, tarayıcı çalıştırmaz. Doğrulamayı bu yüzden CaptchaAI tarafında çözer, dönen token'ı isteğin gövdesine g-recaptcha-response alanı olarak yazarsınız.
Kurulumun beş parçası
Altı adımda toplam beş nesne kuruyorsunuz:
| Parça | Retool karşılığı | İşi |
|---|---|---|
| Kaynak | REST API resource | https://ocr.captchaai.com adresini tutar |
submitCaptcha |
REST sorgusu | Görevi /in.php uç noktasına gönderir |
pollResult |
REST sorgusu | /res.php üzerinden sonucu sorgular |
solveCaptcha |
JavaScript sorgusu | Sorgulama döngüsünü yönetir |
submitForm |
REST sorgusu | Token'ı hedef forma iletir |
API anahtarı sorgu tanımına yazılmaz; Secrets Store'da durur.
Adım 1: CaptchaAI'yi REST API kaynağı olarak tanımlayın
Retool'da Resources → Create New → REST API yolunu izleyin:
| Alan | Değer |
|---|---|
| İsim | CaptchaAI |
| Temel URL | https://ocr.captchaai.com |
| Kimlik doğrulama | Yok; anahtar sorgu parametresiyle gider |
Kaydedin; iki REST sorgusu da buna bağlanır.
Adım 2: Gönderim sorgusunu (submitCaptcha) oluşturun
| Ayar | Değer |
|---|---|
| Kaynak | CaptchaAI |
| Eylem türü | GET |
| URL yolu | /in.php |
Sorgu parametreleri:
| Anahtar | Değer |
|---|---|
key |
{{secretsStore.CAPTCHAAI_API_KEY}} |
method |
userrecaptcha |
googlekey |
{{sitekeyInput.value}} |
pageurl |
{{pageurlInput.value}} |
json |
1 |
json parametresi eksikse yanıt düz metin döner, data.status kontrolü sessizce boşa düşer.
Transformer (isteğe bağlı):
// Parse the response
const data = {{ submitCaptcha.data }};
if (data.status === 1) {
return { taskId: data.request, status: 'submitted' };
}
return { error: data.request, status: 'failed' };
Adım 3: Sorgulama sorgusunu (pollResult) oluşturun
| Ayar | Değer |
|---|---|
| Kaynak | CaptchaAI |
| Eylem türü | GET |
| URL yolu | /res.php |
Sorgu parametreleri:
| Anahtar | Değer |
|---|---|
key |
{{secretsStore.CAPTCHAAI_API_KEY}} |
action |
get |
id |
{{submitCaptcha.data.request}} |
json |
1 |
CAPCHA_NOT_READY bir hata değil, "sonuç henüz hazır değil" yanıtıdır; yazımdaki eksik harf API sözleşmesinin parçası.
Transformer:
const data = {{ pollResult.data }};
if (data.status === 1) {
return { token: data.request, status: 'solved' };
}
if (data.request === 'CAPCHA_NOT_READY') {
return { status: 'pending' };
}
return { error: data.request, status: 'error' };
Adım 4: Sorgulama döngüsünü JavaScript sorgusuyla kurun
solveCaptcha adında bir JavaScript sorgusu ekleyin: ilk sorgulamadan önce 15 saniye bekler, ardından 5 saniyelik aralıklarla en fazla 20 kez sonucu sorgular.
// solveCaptcha — JavaScript Query
async function solve() {
// Submit the CAPTCHA task
await submitCaptcha.trigger();
const submitResult = submitCaptcha.data;
if (submitResult.status !== 1) {
return { error: submitResult.request, status: 'submit_failed' };
}
const taskId = submitResult.request;
// Wait 15 seconds before first poll
await new Promise(r => setTimeout(r, 15000));
// Poll up to 20 times (100 seconds max)
for (let i = 0; i < 20; i++) {
await pollResult.trigger({
additionalScope: { taskId: taskId }
});
const result = pollResult.data;
if (result.status === 1) {
return { token: result.request, status: 'solved' };
}
if (result.request !== 'CAPCHA_NOT_READY') {
return { error: result.request, status: 'error' };
}
// Wait 5 seconds before next poll
await new Promise(r => setTimeout(r, 5000));
}
return { error: 'Polling timeout', status: 'timeout' };
}
return solve();
Zamanlama, Retool'un JavaScript sorgularına koyduğu 120 saniyelik sınıra göre seçilmiştir; aralığı 2 saniyeye indirmek yalnızca boş istek üretir.
Adım 5: Arayüzü kurun
Altı bileşen yeterli:
| Bileşen | Ad ya da bağlama | Görevi |
|---|---|---|
| Text Input | sitekeyInput |
Sitekey değerini alır |
| Text Input | pageurlInput |
Sayfa adresini alır |
| Button | onClick → solveCaptcha.trigger() |
Çözümü başlatır |
| Loading Indicator | {{ solveCaptcha.isFetching }} |
Çözüm sürerken görünür |
| Text Area | {{ solveCaptcha.data?.token \|\| '' }} |
Token'ı salt okunur gösterir |
| Durum rozeti | {{ solveCaptcha.data?.status }} |
Başarıyı ya da hatayı işaretler |
Adım 6: Token'ı gönderim sorgusuna bağlayın
submitForm adında yeni bir sorgu oluşturun:
| Ayar | Değer |
|---|---|
| Kaynak | Hedef API'niz |
| Eylem türü | POST |
| Gövde (Body) | g-recaptcha-response: {{solveCaptcha.data.token}} alanını içeren form verisi |
Sorguyu, yalnızca {{ solveCaptcha.data?.status === 'solved' }} koşulunda etkinleşen "Formu gönder" düğmesine bağlayın. Token kısa ömürlüdür; hemen göndermek "token geçersiz" hatalarının çoğunu baştan keser.
Panelin günlük hayattaki karşılığı
İstanbul'daki bir e-ticaret ekibi tedarikçi portallarına her gün onlarca form gönderiyor. Panel Retool'da yazılı; tek darboğaz, her gönderimde birinin ekran başında beklediği reCAPTCHA v2 doğrulaması. Akış kurulunca operatöre yalnızca "Formu gönder" düğmesi kalıyor.
Panel kişisel veri taşıyorsa akış KVKK kapsamındadır: yalnızca yetkili olduğunuz portallarda, kurumun kendi hesabıyla çalışın. CAPTCHA çözümü erişim yetkisinin yerini tutmaz.
Eşzamanlılık: kaç panel, kaç thread?
CaptchaAI çözüm başına değil eşzamanlı thread sayısına göre faturalandırır; bir thread, aynı anda çözülen bir CAPTCHA demektir:
- Tek operatörlü bir panel için BASIC ($15/ay, 5 thread) yeterlidir.
- Aynı anda gönderim yapan beş-on kişilik ekipler için STANDARD ($30/ay, 15 thread).
- Gece çalışan zamanlanmış işler yüzlerce görevi kuyruğa alıyorsa ADVANCE ($90/ay, 50 thread).
Fiyatlar USD üzerinden sabittir; aylık gider öngörülebilir kalır.
Sorun giderme
| Sorun | Neden | Çözüm |
|---|---|---|
ERROR_WRONG_USER_KEY |
Anahtar yok ya da yanlış | Settings → Secrets değerini doğrulayın |
| Yanıt JSON yerine düz metin | json=1 parametresi eksik |
Sorgu parametrelerine json: 1 ekleyin |
| Sorgulama zaman aşımına uğruyor | Çözüm uzun sürüyor | Yineleme sayısını 20'den 30'a çıkarın |
submitCaptcha.data tanımsız |
Gönderim sorgusu çalışmadı | Önce gönderim sorgusunu tetikleyin |
| JavaScript sorgusu 120 saniyede kesiliyor | Retool'un JS sorgu sınırı | 5 saniyelik aralıkla 20 yinelemeye inin |
| Token yazılıyor, form reddediyor | Süre doldu veya pageurl yanlış |
pageurl değerini form adresiyle eşleyin |
SSS
Çözülen token ne kadar süre geçerli kalır?
reCAPTCHA v2 token'ları kısa ömürlü ve tek kullanımlıktır; pratikte yaklaşık iki dakikalık bir pencereniz olur. Token'ı bekletmeyin, submitForm sorgusunu hemen tetikleyin.
Aynı anda kaç gönderim işleyebilirim?
Eşzamanlı çözüm sayısı planınızdaki thread sayısına eşittir: BASIC ($15/ay) beş, STANDARD ($30/ay) on beş. Kuyruktaki görev sayısı thread sayısını sürekli aşıyorsa bir üst plana çıkın.
Aynı sorgu iskeletini Turnstile için de kullanabilir miyim?
Evet. submitCaptcha sorgusunda method değerini turnstile yapın; döngü ve arayüz aynen kalır, yalnızca token'ı yazdığınız form alanının adı değişir.
Retool üzerinden hangi CAPTCHA türlerini çözebilirim?
reCAPTCHA v2 ve v3 (Enterprise dahil), Cloudflare Turnstile, Cloudflare doğrulama akışı, GeeTest v3, görsel ve grid CAPTCHA'lar, BLS; ayrıca CaptchaFox (beta), Friendly Captcha (beta) ve Lemin (beta). hCaptcha ve FunCaptcha desteklenmiyor; GeeTest v4 ise "çok yakında" listesinde.
İlgili Makaleler
- Callback'li reCAPTCHA v2 formlarını API ile çözme
- Aynı sayfada reCAPTCHA v2 ve Turnstile'ı yönetme
- reCAPTCHA v2 callback mekanizması nasıl çalışır
Sonraki Adımlar
Panelinize CAPTCHA çözümü eklemek on dakikalık bir iş — CaptchaAI API anahtarınızı alın ve REST kaynağını tanımlayın.
İlgili kılavuzlar: