تستطيع في n8n بناء حلقة كاملة لحل اختبار CAPTCHA دون كتابة سطر برمجي واحد، عبر أربع عقد متتابعة:
- عقدة ترسل الطلب إلى CaptchaAI.
- عقدة Wait تنتظر بدء المعالجة.
- عقدة استطلاع داخل حلقة تعيد المحاولة حتى يجهز الحل.
- عقدة أخيرة تستخدم التوكن الناتج.
السر في دعم n8n الأصلي للحلقات عبر عقدة IF أو Loop Over Items، ما يجعله عملياً للوكالات وفرق النمو دون فريق تطوير.
خذ مثالاً محلياً: وكالة تسويق في القاهرة أو الرياض تشغّل سير عمل يومياً لإرسال نماذج محمية بـ reCAPTCHA v2. بدل كتابة سكربت وصيانته، يبنيه الفريق مرة واحدة ويتركه يعمل تلقائياً.
نظرة عامة على سير العمل
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
لماذا n8n بالذات لهذه المهمة
المقارنة الأهم هنا مع Zapier، والفارق الحاسم أمران يوفّرهما n8n أصلاً:
- الحلقة الأصلية — الحل غير فوري، فتحتاج إلى استطلاع دوري وإعادة محاولة.
- عقد الكود — منطق تحكم كامل عند الحاجة.
| ميزة | n8n | Zapier |
|---|---|---|
| دعم الحلقة/إعادة المحاولة | أصلي (حلقات IF، عقدة الحلقة) | محدود (المسارات فقط) |
| خيار الاستضافة الذاتية | نعم (مجاني) | لا (السحابة فقط) |
| عقد الكود | JavaScript كامل | محدودة |
| التكلفة | سحابة مجانية أو استضافة ذاتية أو خطة مدفوعة | مدفوع (لكل مهمة) |
| سهولة الإعداد | متوسط | سهل |
الخطوة 1: عقدة إرسال اختبار CAPTCHA
| الإعداد | القيمة |
|---|---|
| الطريقة | 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 |
تعيد الخدمة معرّف المهمة في حقل request، وستستخدمه في الاستطلاع:
{
"status": 1,
"request": "71823456"
}
الخطوة 2: عقدة الانتظار الأولي
| الإعداد | القيمة |
|---|---|
| وقت الانتظار | 10 |
| الوحدة | Seconds |
الخطوة 3: عقدة استطلاع النتيجة داخل حلقة
يدعم n8n الحلقات بأكثر من طريقة، وأمامك مساران عمليان:
- حلقة IF بسيطة تعيد التوصيل تلقائياً.
- عقدة Code تتحكم في المحاولات يدوياً.
المسار أ: حلقة IF مباشرة
أضف عقدة HTTP Request للاستطلاع:
| الإعداد | القيمة |
|---|---|
| الطريقة | GET |
| عنوان URL | https://ocr.captchaai.com/res.php |
| معلمات الاستعلام | key، action=get، id={{ $json.request }}، json=1 |
ثم وصّلها بعقدة IF للتحقق من جاهزية الحل:
| الحالة | القيمة |
|---|---|
| القيمة 1 | {{ $json.status }} |
| العملية | Equal |
| القيمة 2 | 1 |
- الإخراج الحقيقي ← تابع إلى الخطوة التالية (استخدام التوكن)
- الإخراج الخاطئ ← عقدة Wait بخمس ثوانٍ ← رجوع إلى عقدة الاستطلاع
المسار ب: عقدة الكود
لتحكم أدق في المحاولات والمهلة، استخدم عقدة 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://target-site.com/submit |
| نوع محتوى الجسم | Form URL Encoded |
تشمل معلمات الجسم بيانات النموذج وحقل التوكن:
| الاسم | القيمة |
|---|---|
g-recaptcha-response |
{{ $json.token }} |
تخزين مفتاح API بأمان
لا تضع المفتاح نصاً صريحاً داخل العقد. استخدم نظام بيانات الاعتماد في n8n:
- افتح بيانات الاعتماد ← إضافة بيانات اعتماد ← مصادقة الرأس (Header Auth)
- سمِّها
CaptchaAI API Key - احفظ المفتاح بأمان
أو اعتمد على متغيرات البيئة:
# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"
وارجع إليه في العقد عبر: {{ $env.CAPTCHAAI_API_KEY }}.
سير عمل اختبارات CAPTCHA للصور
| الاسم | القيمة |
|---|---|
method |
base64 |
body |
صورة مُرمّزة بـ 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"
هذا التنبيه المبكر يجنّبك توقف سير العمل الرئيسي فجأة في منتصف اليوم.
معالجة الأخطاء الشائعة
| المشكلة | السبب | الإصلاح |
|---|---|---|
| حلقة الاستطلاع لا تتوقف | لا يوجد حد أقصى للتكرار | أضف متغير عدّاد واخرج بعد 24 تكراراً |
CAPCHA_NOT_READY بلا توقف |
الانتظار الأولي قصير جداً | ارفع الانتظار الأول إلى 15–20 ثانية |
| التوكن غير متاح في العقدة التالية | مسار التعبير خاطئ | تأكد أن {{ $json.token }} يطابق الإخراج |
| بيانات الاعتماد غير موجودة | متغير البيئة غير مضبوط | أعد تشغيل n8n بعد ضبط متغيرات البيئة |
الأسئلة الشائعة
أي خطة من CaptchaAI تناسب أتمتة n8n؟
التسعير قائم على الـ Thread (المهام المتزامنة) مع حلول غير محدودة في كل خطة:
- BASIC — 15 دولاراً شهرياً و5 Threads.
- STANDARD — 30 دولاراً و15 Thread.
- ADVANCE — 90 دولاراً و50 Thread.
لسير عمل يومي بسيط تكفي غالباً الخطة الأصغر.
ما أنواع CAPTCHA التي يحلها هذا السير في n8n؟
يغطي هذا النمط بتغيير قيمة method فقط:
- reCAPTCHA v2/v3
- Cloudflare Turnstile — اضبط
methodعلىturnstileواستخدمsitekey - GeeTest v3
- اختبارات الصور/OCR والشبكية
لاحظ أن hCaptcha وFunCaptcha غير مدعومَين، وأن GeeTest v4 «قريباً» وغير متاح بعد.
هل أحتاج إلى اشتراك n8n مدفوع لتشغيل هذا السير؟
لا. الاستضافة الذاتية لـ n8n مجانية وغير مقيّدة بعدد التشغيلات، وهي الأنسب للسير المتكرر. والسحابة المدفوعة مناسبة إن فضّلت عدم إدارة الخادم.
ابدأ ببناء سير عمل الحل في n8n
أنشئ حسابك واحصل على مفتاح API من captchaai.com لتشغيل أول سير عمل حل تلقائي خلال دقائق.