---
title: "المشغلات Triggers في Apps Script: الأنواع والحدود"
description: "شرح Triggers في Apps Script: المشغلات الزمنية والمرتبطة بالأحداث، وحدود التشغيل اليومية، وحل الأخطاء الشائعة بأمثلة عملية."
url: "https://ahmed-abdelhamed.com/blog/apps-script-triggers/"
date_published: "2026-10-06T07:57:21+00:00"
date_modified: "2026-10-06T20:24:21+00:00"
author: "احمد عبدالحميد"
categories: ["الأتمتة والذكاء الاصطناعي"]
---

# المشغلات Triggers في Apps Script: الأنواع والحدود

**المشغلات Triggers في Apps Script** هي الآلية اللي بتخلّي دالة تشتغل لوحدها من غير ما تدوس عليها: إما حسب الوقت (كل ساعة أو كل يوم)، أو لما حدث معين يحصل (فتح الشيت، تعديل خلية، إرسال نموذج). وفي نوعين: **مشغلات بسيطة** بتعمل بأسماء دوال جاهزة بدون إعداد، و**مشغلات قابلة للتثبيت** بتتعمل من لوحة Triggers وبتدعم صلاحيات أكتر. وفي حدود تشغيل يومية لازم تفهمها قبل ما تبني أتمتة عليها. المقال ده بيشرح الأنواع والحدود والأخطاء وحلها.

لو لسه بتبدأ مع Apps Script، اقرا [Apps Script للمسوّقين](https://ahmed-abdelhamed.com/blog/apps-script-for-marketers/) الأول.

## يعني إيه Triggers في Apps Script وليه محتاجها؟

من غير مشغّل، الكود بيشتغل لما تضغط «تشغيل» بنفسك. المشغّل بيحوّل السكريبت لأتمتة حقيقية:

- تقرير بيتبعت كل أسبوع من نفسه، [التقرير الأسبوعي الآلي](https://ahmed-abdelhamed.com/blog/automated-weekly-client-report/).
- تنبيه لما رقم يعدّي حد معين، [تنبيهات تليجرام من Google Sheets](https://ahmed-abdelhamed.com/blog/telegram-alerts-google-sheets/).
- تنظيف بيانات بعد كل استيراد.
- معالجة طلب جديد لما نموذج يتبعت، [نموذج الموقع إلى Sheets](https://ahmed-abdelhamed.com/blog/website-form-to-google-sheets/).

## النوع الأول: المشغلات البسيطة (Simple Triggers)

دي دوال بأسماء محجوزة بتشتغل تلقائيًا بدون ما تضيفها من أي قائمة:

- **`onOpen(e)`:** بتشتغل لما حد يفتح الملف. مفيدة لإضافة قائمة مخصصة في الشيت.
- **`onEdit(e)`:** بتشتغل لما حد يعدّل خلية. مفيدة لتتبع التعديلات أو التحقق من القيم.
- **`onInstall(e)`:** للإضافات.
- **`doGet(e)` و`doPost(e)`:** لما السكريبت يتنشر كتطبيق ويب يستقبل طلبات.

**قيودها:** بتشتغل بصلاحيات محدودة. مثلًا مش بتقدر عادة تبعت إيميل أو تستخدم خدمات بتحتاج تفويض، ولا تتصل بخدمات خارجية، وليها حد أقصى لوقت التنفيذ أقصر. لو احتجت أي حاجة من دي، استخدم النوع التاني.

## النوع الثاني: المشغلات القابلة للتثبيت (Installable Triggers)

بتتضاف من أيقونة المنبه في محرر Apps Script أو بالكود. بتشتغل بصلاحيات الشخص اللي ثبّتها، وبتدعم خدمات أكتر زي إرسال الإيميل والاتصال بالخارج. أنواعها:

### 1) المشغلات الزمنية (Time-driven)

أشهر نوع للتقارير والتنبيهات. اختيارات التكرار:

- **كل دقيقة أو كل عدد معين من الدقايق/الساعات.**
- **كل يوم** في نافذة زمنية.
- **كل أسبوع** في يوم ووقت.
- **كل شهر** في يوم معين.
- **في تاريخ ووقت محددين.**

تنبيه: التوقيت بيتحدد على هيئة نافذة تقريبية، مش ثانية بالضبط. المشغّل اليومي مثلًا بيشتغل في مدى زمني خلال الساعة اللي حددتها. لو احتجت دقة أعلى فكّر في حلول تانية.

### 2) مشغلات مرتبطة بجداول البيانات

- **عند الفتح (On open)**
- **عند التعديل (On edit)**
- **عند التغيير (On change):** لتغييرات الهيكل (إضافة صف أو تبويب).
- **عند إرسال نموذج (On form submit):** بيتفعل لما حد يملأ نموذج جوجل مرتبط بالشيت.

### 3) مشغلات النماذج والمستندات والتقويم

نفس الفكرة لخدمات جوجل التانية: نموذج جوجل (عند الإرسال)، وتقويم جوجل (عند تغيير حدث). كل خدمة ليها أنواعها.

## إزاي تضيف مشغّل خطوة بخطوة؟

1. افتح مشروع Apps Script.
2. من القائمة الجانبية اضغط على **Triggers** (أيقونة المنبه).
3. اضغط **Add Trigger**.
4. اختار **الدالة** اللي هتشتغل.
5. اختار **مصدر الحدث** (Time-driven أو From spreadsheet).
6. اختار **نوع الحدث** والتكرار.
7. حدد **إعدادات الإشعار بالفشل** (هتجيلك رسالة لو السكريبت فشل، وده مفيد جدًا).
8. احفظ وامنح الصلاحيات.

ولو حبيت تضيفه بالكود:

```
ScriptApp.newTrigger('checkCost').timeBased().everyHours(1).create();
```

**حذر:** لو شغّلت سطر زي ده أكتر من مرة، هتتكوّن مشغلات مكررة وتبقى الدالة بتشتغل عدة مرات. اعمل دالة بتحذف المشغلات القديمة للدالة دي قبل ما تنشئ جديد.

## حدود Triggers في Apps Script والحصص

Apps Script ليه حصص (Quotas) وحدود، وبتختلف بين الحسابات الشخصية وحسابات Workspace وبتتغير مع الوقت. أنواع الحدود اللي لازم تعرفها (راجع وثائق جوجل الرسمية للأرقام الحالية):

- **حد وقت التنفيذ للسكريبت الواحد:** لو الدالة اشتغلت أطول من المسموح، بتتوقف بخطأ.
- **حد إجمالي وقت المشغلات اليومي:** مجموع وقت تشغيل كل المشغلات في اليوم.
- **عدد المشغلات المسموح لكل مستخدم ولكل سكريبت.**
- **حدود الخدمات:** عدد الإيميلات اللي ممكن تتبعت يوميًا، وعدد استدعاءات `UrlFetchApp` وغيرها.

عملياً، الحدود دي بتضرب غالبًا لما تعمل مشغّل كل دقيقة على سكريبت تقيل، أو تعالج صفوف كتير في دالة واحدة. حلول:

- **قلّل التكرار:** هل التنبيه فعلًا محتاج كل دقيقة؟ غالبًا كل ساعة كفاية.
- **اشتغل على دفعات:** عالج عدد من الصفوف في كل تشغيل واحفظ مكان التوقف.
- **قلّل الاستدعاءات:** اقرا نطاق كامل مرة واحدة (`getValues`) بدل خلية خلية.
- **استخدم `LockService`** لمنع تشغيلين متزامنين على نفس البيانات.

### أخطاء شائعة وحلها

### «Authorization is required»

المشغّل البسيط مش بيقدر ينفّذ عمليات محتاجة تفويض. حوّله لمشغّل قابل للتثبيت.

### المشغّل مبيشتغلش

افحص: هل الصلاحيات اتمنحت؟ هل الدالة موجودة بنفس الاسم؟ هل المشغّل اتحذف عند تغيير ملكية الملف؟ اطّلع على سجل التنفيذات (Executions) لتشوف الخطأ.

### «Exceeded maximum execution time»

الدالة أطول من المسموح. قسّمها لدفعات أو بسّطها.

### «Service invoked too many times»

وصلت لحد استدعاءات الخدمة اليومي. قلّل التكرار أو جمّع الطلبات.

### المشغّل بيشتغل مرتين

غالبًا مشغلات مكررة. من لوحة Triggers احذف الزايد.

### onEdit مش بيلتقط تعديل جاي من سكريبت أو استيراد

المشغّل البسيط `onEdit` بيشتغل لتعديلات المستخدم اليدوية فقط، ومش للتغييرات اللي بتحصل برمجيًا أو من استيراد خارجي. استخدم مشغّل «عند التغيير» أو نادي الدالة بنفسك بعد الاستيراد.

### المشغّل بيتوقف لما صاحبه يغادر الشركة

المشغلات بتتبع حساب اللي أنشأها. لو الحساب اتحذف أو اتعطل، المشغلات بتوقف. اعمل المشروع تحت حساب خدمة أو حساب ثابت للنشاط.

### ممارسات تنظيم للمشغلات

1. **سجّل كل مشغّل:** في تبويب «توثيق» بالشيت: الدالة، التكرار، الغرض، المسؤول.
2. **سجّل الأخطاء:** اكتب نتيجة التنفيذ (نجاح أو فشل) في تبويب سجل.
3. **فعّل إشعارات الفشل.**
4. **اختبر يدويًا قبل الجدولة.**
5. **ابدأ بتكرار بسيط وزوّد عند الحاجة.**
6. **راجع المشغلات كل فترة** واحذف المهجورة.

## سيناريو: تقرير أسبوعي بمشغّل زمني

عايز تبعت لنفسك ملخص كل يوم أحد الصبح. الخطوات:

1. اكتب دالة `weeklySummary` بتقرا أرقام الأسبوع من الشيت وتبعتها بالإيميل أو تليجرام.
2. اختبرها يدويًا للتأكد إنها شغالة وبتبعت.
3. من لوحة Triggers أضف مشغّل: الدالة `weeklySummary`، مصدر الحدث Time-driven، نوع Week timer، يوم الأحد، وفترة الصبح.
4. فعّل إشعار الفشل.
5. بعد أول تشغيل فعلي، راجع Executions وتأكد من النتيجة.
6. سجّل المشغّل في ملف التوثيق.

ولو الرقم اللي بتقراه محتاج بيانات اتسحبت من ميتا، رتّب المشغّلين بحيث السحب يخلص قبل التقرير، [سحب بيانات إعلانات ميتا](https://ahmed-abdelhamed.com/blog/meta-ads-data-google-sheets/).

### متى ما تستخدمش Trigger؟

مش كل حاجة تحتاج مشغّل:

- **لو بتشتغل على الملف بنفسك كل مرة:** زر يدوي أو قائمة مخصصة كفاية (`onOpen` بيضيفها).
- **لو المطلوب لحظي جدًا:** المشغلات الزمنية ليها تأخير، ومش مناسبة لشغل بالثانية.
- **لو الحجم ضخم:** قاعدة بيانات أو أداة مخصصة أنسب من شيت.
- **لو المسؤول عن السكريبت غير ثابت:** المشغّل بيرتبط بحساب، وده مخاطرة.

### قاعدة بيانات بسيطة لتتبع التشغيل

لو الأتمتة مهمة، اعمل تبويب «سجل» وكل تشغيل بيكتب سطر فيه: التاريخ والوقت، اسم الدالة، حالة (نجاح/فشل)، وملاحظات (عدد الصفوف المعالجة مثلًا). بعد أسبوعين هتعرف:

- هل المشغّل بيشتغل في ميعاده؟
- هل في فشل متكرر؟
- كام وقت بياخد التشغيل؟ وهل قارب حد الوقت؟

وده بيخلّيك تكتشف مشاكل الحصص قبل ما توقف الأتمتة فجأة. وفصل [سلم الأتمتة في ميتا](https://ahmed-abdelhamed.com/book/meta-automation-ladder/) بيشرح ليه المراقبة جزء أساسي من أي أتمتة، مش إضافة.

للتأكد من أحدث التفاصيل، راجع [شرح Triggers في توثيق Apps Script الرسمي](https://developers.google.com/apps-script/guides/triggers)، لأن الواجهات والسياسات بتتغيّر باستمرار.

**مقالات ذات صلة بتفيدك:**

- [Looker Studio: بناء تقرير عميل من الصفر](https://ahmed-abdelhamed.com/blog/looker-studio-client-report/)
- [برنامج CRM مجاني لمشروع صغير: الخيارات وإزاي تبنيه في Google Sheets](https://ahmed-abdelhamed.com/blog/free-crm-small-business/)
- [تصميم إعلانات بالذكاء الاصطناعي: الأدوات والطريقة والحدود](https://ahmed-abdelhamed.com/blog/ai-ad-design/)
- [شات بوت واتساب لمتجرك: الأنواع وإمتى يفيدك](https://ahmed-abdelhamed.com/blog/whatsapp-chatbot-guide/)

## أسئلة شائعة

### أقدر أجدول بالثانية؟

لأ. أقل تكرار للمشغلات الزمنية بالدقيقة تقريبًا، وبنافذة تقريبية. لو محتاج أسرع، فكّر في طريقة تانية.

### المشغلات بتشتغل لو الشيت مقفول؟

أيوه. المشغلات الزمنية بتشتغل على سيرفرات جوجل مش على جهازك، لكن محتاجة إن حساب المالك شغال وصلاحياته سليمة.

### فيه تكلفة؟

الاستخدام العادي للحسابات الشخصية بدون تكلفة مباشرة ضمن الحصص. لو احتجت أكتر من الحصص، ممكن تحتاج حلول تانية أو حساب Workspace. راجع الوثائق الرسمية.

### إزاي أعرف إن مشغّل فشل؟

فعّل إشعار الفشل عند إنشائه، وراجع صفحة Executions لتشوف الأخطاء. ومن الأفضل تسجّل في الشيت نفسه.

لو عايز نصمّم أتمتة آمنة ومستقرة لتقاريرك وتنبيهاتك، [احجز استشارة](https://ahmed-abdelhamed.com/consultation/).
