الدروس التطبيقية

n8n + CaptchaAI: حل اختبار CAPTCHA بدون رمز لسير العمل

تستطيع في 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:

  1. افتح بيانات الاعتماد ← إضافة بيانات اعتماد ← مصادقة الرأس (Header Auth)
  2. سمِّها CaptchaAI API Key
  3. احفظ المفتاح بأمان

أو اعتمد على متغيرات البيئة:

# 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 لتشغيل أول سير عمل حل تلقائي خلال دقائق.

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.