لماذا تُغيّر أتمتة الفوترة بـ n8n قواعد اللعبة للمؤسسات الصغيرة والمتوسطة
في مؤسسة صغيرة أو متوسطة نموذجية في فرنسا أو الجزائر، غالبًا ما تسير الفوترة وفق النمط ذاته: ملف Excel، إرسال يدوي عبر البريد الإلكتروني، وتذكيرات... حين نتذكّرها. النتيجة؟ تأخّرات في الدفع تتراكم، وخزينة تحت الضغط، وساعات تُهدر كل أسبوع.
تتيح أتمتة الفوترة بـ n8n بناء مسار عمل متكامل — من إنشاء الفاتورة إلى التذكير التلقائي — دون الحاجة إلى تطوير تطبيق كامل ودون الاعتماد على برنامج SaaS مُكلف.
في هذا المقال، سنبني معًا نظامًا عمليًا باستخدام n8n (للتنسيق)، وSupabase (قاعدة بيانات + API)، وبعض الأدوات التكميلية.
هيكلة النظام
إليكم المكوّنات التي سنجمعها معًا:
- Supabase (PostgreSQL): تخزين بيانات العملاء والفواتير وحالات الدفع
- n8n: تنسيق سير العمل (الإنشاء، الإرسال، التذكيرات)
- Resend أو Brevo: إرسال رسائل البريد الإلكتروني المعاملاتية
- Claude AI (اختياري): توليد رسائل تذكير مخصّصة
- Vercel: استضافة بوابة عميل مصغّرة (اختياري)
[Supabase DB] → [n8n Workflow] → [إرسال الفاتورة بالبريد الإلكتروني]
↓
[مهمة مجدولة يومية]
↓
[التحقق من الفواتير غير المسددة]
↓
[تذكير ي+7 / ي+15 / ي+30]
المرحلة 1: نمذجة البيانات في Supabase
أنشئوا ثلاثة جداول رئيسية في مشروعكم على Supabase:
-- جدول العملاء
CREATE TABLE clients (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
nom TEXT NOT NULL,
email TEXT NOT NULL,
entreprise TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
-- جدول الفواتير
CREATE TABLE factures (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
client_id UUID REFERENCES clients(id),
numero TEXT UNIQUE NOT NULL,
montant NUMERIC(10,2) NOT NULL,
date_emission DATE DEFAULT CURRENT_DATE,
date_echeance DATE NOT NULL,
statut TEXT DEFAULT 'envoyee', -- envoyee, payee, en_retard
relance_count INT DEFAULT 0,
derniere_relance TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now()
);
-- جدول سجلّ التذكيرات
CREATE TABLE historique_relances (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
facture_id UUID REFERENCES factures(id),
type_relance TEXT NOT NULL, -- J7, J15, J30
envoye_le TIMESTAMPTZ DEFAULT now(),
canal TEXT DEFAULT 'email'
);
فعّلوا سياسات Row Level Security (RLS) لتأمين الوصول عبر API الخاصة بـ Supabase.
المرحلة 2: سير عمل n8n — الإرسال التلقائي للفاتورة
يُفعَّل سير العمل الأول هذا عند كل سطر جديد يُدرج في جدول factures:
- مُشغّل Webhook من Supabase: قوموا بإعداد Webhook في Supabase (أو استخدموا عقدة Supabase Trigger في n8n) للاستماع إلى عمليات
INSERTعلى جدولfactures - عقدة Supabase: استرجعوا معلومات العميل المرتبط عبر
client_id - عقدة HTML/Template: أنشئوا محتوى البريد الإلكتروني متضمنًا رقم الفاتورة والمبلغ وتاريخ الاستحقاق
- عقدة Resend/Brevo: أرسلوا البريد الإلكتروني المعاملاتي مع الفاتورة كمرفق (PDF يُنشأ عبر عقدة HTTP تستدعي API لتوليد ملفات PDF مثل pdf.co أو قالب مخصّص)
نصيحة: خزّنوا قوالب رسائلكم الإلكترونية في جدول email_templates على Supabase لتعديلها دون المساس بسير العمل.
المرحلة 3: سير عمل n8n — تذكيرات تلقائية ذكية
هنا تتجلّى القيمة الحقيقية لـ أتمتة الفوترة بـ n8n. أنشئوا سير عمل مجدولًا (CRON) يُنفَّذ كل يوم في الساعة التاسعة صباحًا:
[Cron 9:00] → [استعلام Supabase: factures WHERE statut = 'envoyee' AND date_echeance < now()]
↓
[عقدة Switch: relance_count]
↓
[0 → تذكير ي+7] [1 → تذكير ي+15] [2 → تذكير ي+30 + تنبيه داخلي]
↓
[إرسال البريد] → [تحديث Supabase: relance_count + 1, derniere_relance = now()]
↓
[إدراج في historique_relances]
منطق التذكير بالتفصيل:
- ي+7 (تذكير لطيف): تذكير ودّي بأسلوب مهني
- ي+15 (تذكير حازم): إشارة صريحة إلى التأخر، مع اقتراح التواصل
- ي+30 (تذكير نهائي): أسلوب رسمي، ذكر العواقب المحتملة، إشعار عبر Slack أو البريد الإلكتروني للمدير
التخصيص باستخدام Claude AI
لتجنّب التذكيرات النمطية، أضيفوا عقدة HTTP تستدعي API الخاصة بـ Claude AI (Anthropic):
{
"model": "claude-sonnet-4-20250514",
"messages": [{
"role": "user",
"content": "Rédige un email de relance professionnel pour une facture de {{montant}}€, en retard de {{jours_retard}} jours, adressé à {{nom_client}}. Ton : {{ton_relance}}. Langue : français."
}]
}
النتيجة: تذكيرات فريدة ومتكيّفة مع السياق، تحقّق معدلات استجابة أعلى.
المرحلة 4: لوحة المتابعة والإشعارات
أكملوا نظامكم بـ:
- عرض Supabase في الوقت الفعلي: استخدموا اشتراكات Realtime من Supabase لتغذية لوحة متابعة (React/Next.js على Vercel)
- تنبيهات Slack: أضيفوا عقدة Slack في n8n لإشعار الفريق عند تجاوز فاتورة ما حدّ ي+30
- تقرير أسبوعي: سير عمل n8n صباح كل إثنين يُرسل ملخّصًا بالفواتير غير المسددة عبر البريد الإلكتروني للمدير
-- عرض مفيد للوحة المتابعة
CREATE VIEW vue_impayes AS
SELECT f.numero, c.nom, c.email, f.montant,
f.date_echeance, f.relance_count,
CURRENT_DATE - f.date_echeance AS jours_retard
FROM factures f
JOIN clients c ON c.id = f.client_id
WHERE f.statut = 'envoyee'
AND f.date_echeance < CURRENT_DATE
ORDER BY jours_retard DESC;
نتائج ملموسة لاحظناها لدى عملائنا
في Otomy، قمنا بنشر هذه الحزمة التقنية لعدة مؤسسات صغيرة ومتوسطة. إليكم النتائج المتوسطة:
| المؤشر | قبل | بعد |
|---|---|---|
| متوسط مهلة الدفع | 38 يومًا | 17 يومًا |
| الفواتير المنسيّة / غير المُتابَعة | ~25% | 0% |
| الوقت المخصّص للتذكيرات أسبوعيًا | 3-4 ساعات | < 10 دقائق |
| معدل التحصيل عند ي+30 | 68% | 94% |
نقاط يجب الانتباه إليها
- الامتثال لـ RGPD: لا تخزّنوا إلا البيانات الضرورية، وخطّطوا للحذف التلقائي بعد الأرشفة
- إدارة الأخطاء في n8n: فعّلوا Error Workflows ليصلكم تنبيه في حال فشل أي إرسال
- حدود الإرسال: التزموا بحصص مزوّد البريد الإلكتروني الخاص بكم (Resend: 100/يوم في الخطة المجانية، Brevo: 300/يوم)
- الموافقة الضمنية المزدوجة: يجب أن يعلم عملاؤكم أنهم سيتلقّون اتصالات آلية
هل أنتم مستعدون لأتمتة فوترتكم؟
توفّر أتمتة الفوترة بـ n8n مقترنةً بـ Supabase حلًا قويًا ومرنًا واقتصاديًا. لا حاجة لنظام ERP بتكلفة 500 يورو شهريًا — فقط هيكلة مدروسة جيدًا.
في Otomy، نرافق المؤسسات الصغيرة والمتوسطة الفرنسية والجزائرية في تنفيذ هذه الأنظمة. من نمذجة البيانات إلى نشر سير العمل، نبني حلولًا تعمل بشكل مستقل تمامًا.
هل تضيّعون وقتكم في التذكيرات؟ تواصلوا معنا للحصول على تدقيق مجاني لعملية الفوترة لديكم.