مشروع n8n عملي: إرسال مهام Google Sheets إلى Telegram مع منع التكرار ومعالجة الأخطاء

تريد أن يرسل n8n إشعار Telegram تلقائيًا لكل مهمة جديدة في Google Sheets، دون تكرار الرسائل أو نسيان حالات الفشل؟ هذا مشروع تطبيقي يجمع ما تعلمته عن Google Sheets وTelegram وIF وSchedule Trigger وCredentials ومعالجة الأخطاء في Workflow واحد. سنبني نسخة بسيطة قابلة للاختبار، ثم نوضح ما يلزم قبل الاعتماد عليها في عمل حقيقي.

صورة توضيحية للوحة متابعة البيانات ضمن مشروع أتمتة Google Sheets وTelegram باستخدام n8n
Photo by Luke Chesser on Unsplash

الصورة توضيحية لتحليل البيانات وليست لقطة شاشة فعلية من واجهة n8n.

ماذا سنبني؟ ومتى يناسبك هذا السيناريو؟

افترض أن فريقًا صغيرًا يسجل الطلبات في جدول. بدل أن يفتح المدير الملف كل ساعة، يفحص n8n الصفوف غير المعالجة ويرسل إشعارًا منظمًا إلى Telegram، ثم يحدّث حالة الصف بعد نجاح الإرسال. يصلح المثال لطلبات العملاء والمهام الجديدة والمتابعة الداخلية، ولا يتطلب كتابة JavaScript في النسخة الأساسية.

المسار: Schedule Trigger ← Google Sheets (Get Row(s)) ← IF (الحالة Pending) ← Telegram (Send Message) ← Google Sheets (Update Row).

اقرأ أولًا دليل n8n للمبتدئين إذا كانت مصطلحات Node وExecution جديدة عليك. أما إعداد كل خدمة على حدة فمشروح في ربط Google Sheets مع n8n وربط Telegram مع n8n.

1. جهّز Google Sheets ببيانات واضحة

أنشئ جدولًا باسم Tasks واجعل الصف الأول للعناوين. استخدم الأعمدة التالية؛ لا تضع فيه كلمات مرور أو بيانات شخصية لا تحتاجها:

id task owner status sent_at
T-001 مراجعة عرض العميل الفريق Pending
T-002 إعداد تقرير أسبوعي الفريق Sent 2026-10-11 10:00

اجعل id فريدًا وثابتًا لكل صف. واحتفظ بحقل status بقيمتين واضحتين: Pending للصف الذي ينتظر الإرسال وSent لما اكتمل. حقل sent_at اختياري لكنه مفيد للتدقيق. لا تعتمد على ترتيب الصفوف وحده كمفتاح ثابت، فقد يغير المستخدم الفرز أو يضيف صفوفًا جديدة.

2. أنشئ Workflow واضبط Schedule Trigger

  1. افتح n8n وأنشئ Workflow جديدًا باسم Sheets to Telegram — Tasks.
  2. أضف Schedule Trigger واجعل التشغيل كل 15 دقيقة للتجربة؛ اختر معدلًا يناسب حجم البيانات وحدود خدماتك.
  3. تحقق من المنطقة الزمنية الخاصة بالـWorkflow أو الخادم، ولا تفترض أن الوقت المعروض هو وقت بلدك.
  4. اختبر التشغيل يدويًا قبل تفعيل الجدولة، ثم فعّل Workflow بعد التأكد من جميع الخطوات.

إذا واجهت اختلافًا في التوقيت، راجع دليل Schedule Trigger في n8n قبل تعديل أوقات الجدولة عشوائيًا.

3. اربط Google Sheets واقرأ الصفوف

  1. أضف عقدة Google Sheets بعد Schedule Trigger.
  2. اختر عملية قراءة الصفوف Get Row(s) أو الاسم المقابل في إصدارك.
  3. حدد المستند والتبويب Tasks وتأكد من وصول الصفوف والأعمدة المطلوبة.
  4. استخدم Credential مناسبًا بصلاحيات الحد الأدنى، واختبر الاتصال بحساب لديه إذن للوصول إلى الجدول.

قد تختلف حقول الاختيار بحسب إصدار n8n وطريقة الاتصال. المهم أن ترى عناصر JSON تحتوي id وtask وstatus بعد تنفيذ العقدة. لا تستمر إذا كانت أسماء الأعمدة غير متطابقة أو إذا أعادت العقدة جدولًا آخر.

4. أضف شرط IF لمنع إرسال الصفوف المكتملة

بعد قراءة البيانات، أضف IF واختبر ما إذا كانت قيمة status تساوي Pending. اربط فرع True بالإرسال واترك فرع False بلا إجراء. تأكد من إزالة المسافات غير المقصودة من الخلايا ومن توحيد كتابة الحالة؛ فالقيم pending وPending قد لا تتطابق في المقارنة النصية.

بهذا لا ترسل صف T-002 في كل تشغيل جديد. هذا يمنع معظم التكرار في الاختبار العادي، لكنه لا يضمن التسليم مرة واحدة فقط إذا حدث تشغيل متزامن أو انقطع الاتصال بعد نجاح إرسال Telegram وقبل تحديث Sheets. سنعالج هذه النقطة لاحقًا.

للمقارنة بين شروط IF وSwitch، راجع دليل IF وSwitch في n8n.

5. أرسل رسالة Telegram مفهومة

أنشئ بوتًا من خلال BotFather في Telegram، واحفظ الرمز داخل Credentials في n8n بدل لصقه في النصوص أو نشره في الصور. أضف البوت إلى المحادثة أو القناة المطلوبة بالصلاحيات اللازمة، ثم استخدم عقدة Telegram → Send Message وحدد Chat ID الصحيح.

نموذج رسالة باستخدام Expressions، بعد التأكد من أسماء الحقول:

مهمة جديدة: {{$json.task}}
الرقم المرجعي: {{$json.id}}
المسؤول: {{$json.owner}}

إذا كانت قيم المهام يكتبها أشخاص آخرون، تجنب تفعيل تنسيق HTML أو Markdown دون معالجة الأحرف الخاصة؛ فقد تفشل الرسالة بسبب نص غير متوقع. ابدأ برسالة نصية عادية. اقرأ إدارة Credentials وOAuth في n8n إذا احتجت توضيحًا حول تخزين بيانات الاتصال بأمان.

6. حدّث حالة الصف بعد نجاح الإرسال فقط

اربط مخرج النجاح من Telegram بعقدة Google Sheets ثانية، واختر عملية تحديث صف. استخدم id كمفتاح مطابقة إن كانت إعدادات العقدة تدعم اختيار عمود المطابقة، ثم اضبط status = Sent وsent_at على وقت التنفيذ. تأكد أن العقدة تحدث الصف الصحيح لا أول صف في الجدول.

ملاحظة مهمة حول Mapping: قد تصبح بيانات العنصر الخارج من Telegram مختلفة عن بيانات الصف الأصلي. لا تفترض أن $json.id ما زال متاحًا في عقدة التحديث؛ اختبر البيانات الخارجة واستخدم ربط العناصر بالعقدة الأصلية أو احتفظ بالمفتاح قبل الإرسال. راجع دليل Expressions وJSON عند تعذر قراءة الحقول.

7. اختبار عملي بأربع حالات قبل التفعيل

الاختبار النتيجة المطلوبة
صف جديد حالته Pending رسالة واحدة ثم تحويل الحالة إلى Sent
صف حالته Sent مسبقًا لا تُرسل رسالة جديدة
تعطيل اتصال Telegram مؤقتًا يظهر فشل واضح ولا يتحول الصف إلى Sent
تشغيل جديد بعد معالجة الخطأ تُراجع نتيجة الإرسال السابقة قبل إعادة المحاولة

ابدأ في محادثة Telegram تجريبية وجدول غير حساس. تحقق من نص الرسالة، وعدد الرسائل، وصحة الصف الذي تغير، وسجل التنفيذ داخل n8n. لا تستخدم بيانات عميل حقيقية في اختبار مفتوح.

8. كيف تعالج الأخطاء وتمنع التكرار في الإنتاج؟

المثال الأساسي مناسب للتعلم، لكن هناك ثلاثة أخطار ينبغي فهمها قبل تشغيله لفريق عمل:

  • فشل مؤقت: إذا تعذر الاتصال بـTelegram، استخدم سياسة إعادة محاولة محدودة وتأخير مناسب، مع إشعار إداري عند استمرار الفشل. لا تجعل إعادة المحاولة غير محدودة.
  • تكرار الرسالة: إذا وصل الطلب إلى Telegram ثم انقطع الرد، فقد تعيد المحاولة إرسال الرسالة. يمكن تقليل المخاطر بحالة وسيطة مثل Processing، وقفل يمنع تشغيلين متزامنين، وسجل إرسال بمفتاح فريد، ومراجعة الحالات غير المؤكدة. لا تزعم ضمان exactly-once بمجرد استخدام IF.
  • حدود الطلبات: إذا كان لديك مئات الصفوف، قسّم المعالجة إلى دفعات واضبط المعدل وفق حدود Google وTelegram. راجع Loop Over Items وBatching.

يمكن إنشاء Error Workflow مستقل يسجل رقم التنفيذ واسم العقدة ورسالة الخطأ ويرسل تنبيهًا إلى قناة إدارية مختلفة. لا تضع Tokens أو بيانات شخصية كاملة داخل التنبيه. التفاصيل في دليل Retry on Fail وError Workflow.

9. تحسينات بعد نجاح النسخة الأولى

  1. استبدل الفحص المتكرر بحدث مناسب إذا كانت الخدمة تدعمه وكان ذلك أوفر وأكثر موثوقية.
  2. أضف حقل priority ثم استخدم Switch لإرسال الأولويات العالية إلى قناة مختلفة.
  3. أضف رابطًا للصف أو سجل المهمة بدل نسخ بيانات حساسة إلى Telegram.
  4. احتفظ بسجل مختصر لوقت الإرسال ونتيجته، مع سياسة واضحة للاحتفاظ بالبيانات.
  5. راجع الأذونات والـCredentials دوريًا، وجرّب سيناريو استعادة الخدمة بعد انقطاع.

أسئلة شائعة

هل أحتاج إلى كود لربط Google Sheets مع Telegram في n8n؟

لا في هذا المثال. تستطيع بناء المسار باستخدام Schedule Trigger وGoogle Sheets وIF وTelegram. قد تحتاج Code Node إذا أردت تنسيق بيانات معقدًا أو معالجة متقدمة؛ اقرأ أمثلة Code Node في n8n.

لماذا تصلني رسائل مكررة؟

تحقق من حالة الصف، ومن وجود أكثر من Workflow نشط، ومن التشغيل المتزامن، ومن فشل تحديث الحالة بعد الإرسال. افحص سجل Executions بدل إعادة إرسال كل العناصر تلقائيًا.

هل يمكن استخدام Gmail بدل Telegram؟

نعم، يمكن استبدال خطوة Telegram بخطوة إرسال بريد، مع الاحتفاظ بمبدأ التحقق من الحالة وتحديثها بعد النجاح. راجع ربط Gmail مع n8n.

هل يضمن هذا المثال عدم فقدان أي إشعار؟

لا. النسخة التعليمية توضح التدفق وتقلل الأخطاء الشائعة، لكنها تحتاج تصميمًا إضافيًا للموثوقية والمراقبة إذا كانت الإشعارات حساسة أو عالية الحجم.

الخلاصة والخطوة التالية

ابدأ بصف تجريبي واحد، تأكد من وصول الرسالة، ثم تحقق من تحديث الحالة. بعد ذلك اختبر الفشل والتكرار قبل توسيع الاستخدام. بهذه الطريقة تنتقل من مقالات متفرقة عن Nodes إلى مشروع n8n عملي يمكن فهمه وصيانته وتطويره.

مصادر للمراجعة: توثيق n8n الرسمي وتوثيق عقدة Telegram. تختلف بعض أسماء الخيارات حسب إصدار n8n.

آخر مراجعة: 12 أكتوبر 2026. هذا شرح تعليمي لا يتضمن Workflow تم اختباره على حسابات القارئ؛ اختبر صلاحياتك وحالات الفشل قبل التشغيل الإنتاجي.

Scroll to Top