هذا المقال يتطلب مستوى متوسط. لو تعرف يعني إيه API و JSON وعملت قبل كده docker compose up، انت جاهز. مش لازم تكون كتبت سطر كود في n8n قبل كده.
أتمتة تفريغ الفواتير من الإيميل لـ Google Sheets بـ n8n
لو بتفتح كل فاتورة موردين جاية على الإيميل وتنقل رقمها ومبلغها وتاريخها بإيدك في شيت، سير عمل n8n واحد هيشيل الشغل ده بالكامل. النتيجة المتوقعة: كل فاتورة جديدة بتتحوّل لصف في Google Sheets خلال ثواني من وصولها، من غير ما تلمس الكيبورد.
المشكلة باختصار
الافتراض هنا إن عندك حوالي 150 فاتورة PDF بتوصل على إيميل واحد كل شهر. لو كل فاتورة بتاخد 4 دقايق إدخال يدوي، ده 10 ساعات شغل شهريًا بتروح في نسخ ولصق. والأسوأ إن الإدخال اليدوي بيغلط: رقم متبدّل، تاريخ ناقص، فاتورة اتنست. المشكلة مش إنك بطيء، المشكلة إن الشغل ده متكرر وقابل للأتمتة بالكامل.
يعني إيه n8n، وليه مش سكربت Python عادي؟
تخيّل خط تجميع في مصنع. كل محطة بتعمل حاجة واحدة: محطة بتستلم القطعة، محطة بتفحصها، محطة بتركّبها، محطة بتعبّيها في الكرتونة. انت مش بتكتب كل ده من الصفر، انت بترتّب المحطات وتوصّلها ببعض. n8n بالظبط كده بس للداتا.
بالتعريف الدقيق: n8n أداة أتمتة سير عمل مفتوحة المصدر (fair-code) بتشتغل على مبدأ العُقد (nodes). كل عقدة بتمثّل خطوة: trigger يبدأ السير، أو action ينفّذ عملية على خدمة خارجية. الداتا بتتنقل بين العُقد على شكل JSON. تقدر تشغّلها على سيرفرك بدل ما تعتمد على خدمة SaaS.
ليه مش سكربت Python؟ لأن السكربت بيحتاج منك تكتب وتصون كود التعامل مع Gmail API و OAuth و إعادة المحاولة عند الفشل و التسجيل. n8n بيدّيك العُقد دي جاهزة. بتكسب سرعة بناء وصيانة أقل، بتخسر المرونة الكاملة اللي بيدّيهالك الكود الخام لو احتجت منطق معقّد جدًا.
سير العمل خطوة بخطوة
السير اللي هنبنيه 6 عُقد، وده ترتيبها ووظيفة كل واحدة:
- Gmail / IMAP Trigger: يراقب صندوق الوارد وينطلق مع كل إيميل جديد فيه مرفق PDF.
- Extract From File: يقرأ الـ PDF ويحوّله لنص خام (string).
- AI Agent: ياخد النص ويرجّع JSON منظم بالحقول اللي محتاجها بس.
- IF: يفحص درجة الثقة، ولو أقل من 0.85 يحوّل الفاتورة لمراجعة بشرية بدل ما يحفظها على عمياني.
- Google Sheets (Append Row): يضيف صف واحد لكل فاتورة.
- Slack: يبعت تنبيه بالملخص اليومي.
أول حاجة، شغّل n8n على سيرفرك بـ Docker. ده ملف docker-compose جاهز قابل للنسخ: