هذا المقال يتطلب مستوى متوسط. لو تعرف يعني إيه 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 جاهز قابل للنسخ:
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- GENERIC_TIMEZONE=Africa/Cairo
- N8N_ENCRYPTION_KEY=ضع_هنا_مفتاح_عشوائي_طويل
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:شغّلها بـ docker compose up -d، وبعدين افتح http://SERVER_IP:5678 علشان تبني السير من الواجهة. حِط Nginx أو Caddy قدامها لـ HTTPS قبل ما تربطها بـ Gmail.
قلب السير العقدة بتاعة الـ AI. عقدة الـ AI Agent بتاخد نص الفاتورة وتطلّع JSON ثابت الشكل. الـ schema اللي بتفرضه على المخرجات علشان ميرجعش لك كلام حر:
{
"invoice_number": "string | null",
"vendor": "string | null",
"date": "YYYY-MM-DD | null",
"currency": "string | null",
"total": "number | null",
"vat": "number | null",
"confidence": "number"
}فرض الـ JSON Schema مهم: من غيره النموذج ساعات بيرجّع نص فيه فاصلة زيادة أو حقل ناقص فيكسر العقدة اللي بعده. مع تفعيل المخرجات المنظمة، الالتزام بالشكل بيبقى شبه مضمون.
الفخ اللي بيوقّع الأوتوميشن: الثقة العمياء
الغلطة الشائعة إنك تحفظ كل مخرجات الـ AI في الشيت على طول. ده بيفشل لما النموذج يقرأ فاتورة بصورة ضبابية أو خط غريب فيطلّع رقم غلط، وانت تكتشف بعد شهرين إن أرقامك مش مظبوطة. الحل عقدة الـ IF: أي فاتورة درجة ثقتها أقل من 0.85 متروحش الشيت مباشرة، تتحوّل لتاب "للمراجعة" أو رسالة Slack لحد ما حد يأكّدها. في تجربة على فواتير PDF نصية، الاستخراج بيجيب الحقول صح في حوالي 92 إلى 96% من الحالات، والباقي بيتفرز للمراجعة بدل ما يلوّث الداتا.
الأرقام: n8n self-hosted مقابل Zapier
السير ده بيعالج الفاتورة في حدود 8 إلى 15 ثانية من لحظة وصول الإيميل. التكلفة الشهرية: سيرفر VPS صغير بحوالي 5 دولار، زائد تكلفة استخراج الـ AI حوالي 0.002 دولار للفاتورة، يعني 150 فاتورة بـ 0.30 دولار تقريبًا. الإجمالي تحت 6 دولار شهريًا لعدد تنفيذات غير محدود.
قارن ده بـ Zapier: كل فاتورة بتمر بـ 4 أو 5 خطوات، وكل خطوة بتتحسب task. 150 فاتورة في 5 = 750 task شهريًا، وده بيدخّلك في خطة مدفوعة تبدأ من حوالي 30 دولار شهريًا، والرقم بيكبر مع كل فاتورة زيادة. الـ trade-off هنا: n8n self-hosted بيوفّر الفلوس ويخلّي بياناتك على سيرفرك، مقابل إنك تتحمّل مسؤولية الصيانة والتحديث والباكب والـ uptime بنفسك. Zapier بيكلّفك أكتر مع الحجم، مقابل صيانة صفر وبياناتك عند طرف تالت.
متى لا تستخدم هذه الطريقة
- أقل من 20 فاتورة شهريًا: الإدخال اليدوي أرخص من بناء وصيانة سير عمل.
- فواتير صور ممسوحة بجودة سيئة: هتحتاج OCR ثقيل ومراجعة كتير، ومعدّل الخطأ هيعلّي.
- عندك ERP فيه استيراد رسمي أو EDI: استخدم القناة الرسمية، أدق وأضمن.
- محاسبة قانونية صارمة بدون أي مراجعة: أي أتمتة استخراج محتاجة طبقة تأكيد بشري قبل الاعتماد.
الخطوة التالية
نزّل ملف الـ docker-compose اللي فوق، شغّله بـ docker compose up -d، واربط عقدة Gmail Trigger بصندوق وارد تجريبي فيه 5 فواتير قديمة بس. شوف الـ JSON الراجع من عقدة الـ AI قبل ما توصّل Google Sheets خالص. لو الحقول طلعت مظبوطة على الخمسة، كمّل باقي السير. لو في حقل بيغلط دايمًا، عدّل الـ prompt وجرّب تاني قبل ما تشغّلها على الوارد الحقيقي.
المصادر
- توثيق n8n الرسمي — مفهوم العُقد وأنواع الـ triggers و self-hosting بـ Docker: docs.n8n.io
- توثيق n8n — تثبيت Docker Compose: docs.n8n.io/hosting/installation/docker
- n8n — عقدة Gmail / IMAP Email Trigger: docs.n8n.io/integrations
- أسعار Zapier حسب عدد الـ tasks: zapier.com/pricing
- مفهوم المخرجات المنظمة (Structured Outputs / JSON Schema) من توثيق Anthropic و OpenAI الرسمي.