نبذة عن المشروع:
قمت ببناء نظام أتمتة احترافي متكامل لعمليات التوظيف باستخدام منصة n8n، يعمل بشكل تلقائي من لحظة نشر وظيفة جديدة حتى إرسال رسائل تواصل مخصصة لكل مرشح.
ما يفعله النظام بالكامل:
يبدأ النظام بـ Webhook يستقبل تفاصيل الوظيفة المنشورة (المسمى الوظيفي، الوصف، الموقع، رابط التقديم)، ثم يعمل بالتوازي على ثلاثة مسارات:
1. البحث في قاعدة البيانات الداخلية:
يحلل الذكاء الاصطناعي (Gemini) وصف الوظيفة ويولّد استعلام PostgreSQL ذكي يبحث في جدول المرشحين الداخليين (candidates_internal) بالمطابقة النصية الكاملة والترتيب حسب الصلة.
2. البحث في قاعدة البيانات المؤقتة:
نفس الآلية لكن على جدول candidates_temp الذي يحتوي على مرشحين تم جمعهم مسبقاً.
3. استخراج مرشحين جدد من LinkedIn:
يحلل Gemini وصف الوظيفة ويُنشئ استعلام بحث متقدم لـ Google
يُرسل الاستعلام لـ SerpAPI مع pagination تلقائية
يستخرج بيانات المرشحين (الاسم، الدور، الشركة، رابط LinkedIn، الـ snippet)
يحفظهم في candidates_temp مع إزالة المكررات
بعد جمع المرشحين:
يُوحّد الكل في جدول mailing_list
يُرسل روابط LinkedIn لـ SignalHire API لاستخراج الإيميلات وأرقام الهواتف عبر Callback Webhook
بعد استقبال البيانات يُحدّث قاعدة البيانات بالمعلومات الجديدة
مرحلة إرسال الإيميلات:
يقرأ النظام قائمة المرشحين ذوي الإيميلات
يُمرّرهم للـ AI Agent (Gemini) الذي يكتب رسالة توظيف مخصصة لكل مرشح بناءً على بياناته ووصف الوظيفة
يُرسل الرسائل عبر SendGrid بـ Dynamic Template احترافي
يُضيف تأخيراً (30 ثانية) بين كل رسالة لتجنب spam filters
التقنيات المستخدمة:
n8n (workflow automation)
Google Gemini AI (تحليل الوظائف + كتابة الإيميلات)
SerpAPI (Google Search scraping)
SignalHire API (استخراج إيميلات LinkedIn)
PostgreSQL (3 جداول: candidates_internal, candidates_temp, mailing_list)
SendGrid (إرسال الإيميلات بـ Dynamic Templates)
ما يُميّز هذا النظام:
✅ يعمل بالكامل بدون تدخل بشري بعد نشر الوظيفة
✅ يتجنب مراسلة نفس المرشح مرتين بنظام مكافحة التكرار
✅ الإيميلات مخصصة بالكامل لكل مرشح وتبدو طبيعية وغير آلية
✅ يدعم التوسع ومعالجة مئات المرشحين في كل دورة