كل فريق هندسي يحمل طبقة من الأعمال المتكررة لم يخطط لها أحد، لكن الجميع يدفع ثمنها. أحدهم يجمع ملخص الاجتماع اليومي. وأحدهم يقرأ كل تقرير خطأ وارد ويوجّهه إلى الجهة المناسبة. وأحدهم يجمّع تقرير حالة يوم الجمعة من ستة تبويبات مفتوحة لحالات متفرقة. لا شيء من هذا صعب. لكنه كله عمل روتيني مضنٍ: متوقّع، متكرر، ومكلف بهدوء، لأنه يقع في النهاية على عاتق من يلاحظه أولًا.
وهذا بالضبط نوع العمل الذي يتقنه وكيل الذكاء الاصطناعي، شرط أن يبدأ الوكيل عمله في اللحظة المناسبة دون أن يكتب أحدهم أمرًا نصيًا. وتلك الآلية المُشغِّلة هي ما توفره الأتمتة في Sharkly. الأتمتة تعريف تملكه المساحة لعمل متكرر يقوم به وكيل أو طاقم: تعليمات مكتوبة، وجهة تنفيذ مكلَّفة، ومشغّل واحد أو أكثر، وسجل تشغيل يمكنك فحصه.
الهدف ليس أتمتة الحكم والتقدير. وصياغة Sharkly نفسها واضحة وصريحة: تتوقف الأتمتة حيث يلزم حكم الفريق. يمكن للأتمتة أن تصوغ مسودة ملخص الاجتماع اليومي، وأن تقرأ تقرير الخطأ قراءة أولية، وأن تجمّع التقرير الأسبوعي. لكن القرار فيما يفعله الفريق حيال أي من ذلك يبقى بيد إنسان. وإذا كنت جديدًا على Sharkly نفسه، فابدأ بـ ما هو Sharkly ثم عُد إلى هنا.
الخلاصة السريعة
الأتمتة في Sharkly قاعدة تملكها المساحة وتُشغّل وكيلًا أو طاقمًا بمجموعة ثابتة من التعليمات كلما عمل أحد المشغّلات. وهناك أربعة أنواع من المشغّلات: جدول زمني (تعبير cron خماسي الحقول مع منطقة زمنية)، وتغيّر حالة مهمة، وتعليق يحتوي على عبارة محددة مسبقًا، ورابط webhook سري للخدمات الخارجية، إضافة إلى زر Run now للاختبار اليدوي. ويُسجَّل كل تشغيل في سجل التشغيل مع مصدره ونتيجته وسبب فشله، ويمكن إيقاف الأتمتة مؤقتًا واستئنافها أثناء تعديلها. استخدم الأتمتة في الأعمال المتكررة المحددة بوضوح: ملخصات الاجتماع اليومي، والفرز الأولي للأخطاء، والتقارير الدورية. يتولى الوكيل القراءة وصياغة المسودة، ويراجع إنسان الناتج ويتخذ القرار.
ما هي الأتمتة وما ليست عليه
تخزّن الأتمتة تعريفًا صغيرًا وكاملًا لمهمة واحدة متكررة: اسمًا وتعليمات تصف الهدف والخطوات والقيود والنتيجة المتوقعة؛ والمساحة التي تملكها؛ وجهة التنفيذ المكلَّفة، أي الوكيل أو الطاقم الذي ينفذ العمل؛ والأولوية؛ والحالة: نشِط أو موقوف مؤقتًا؛ ومشغّلًا واحدًا أو أكثر؛ وسجل تشغيل يوثّق مصدر كل تشغيل ونتيجته وتشغيل الوكيل وسبب الفشل.

وهناك حدّان قد يفاجئانك لولا توضيحهما.
أولًا، لا تُنشئ الأتمتة مهمة عند كل تشغيل، بل تبدأ تشغيل الوكيل أو الطاقم مباشرة. ويستقر التشغيل وناتجه وأي فشل في سجل تشغيل الأتمتة لا في قائمة مهامك، فلا تمتلئ لوحتك بمهام مولّدة آليًا كل صباح عند التاسعة.
ثانيًا، الأتمتة ليست لوحة سير العمل في Sharkly. فللمساحة سطحان للأتمتة: الأتمتة، وهي القاعدة الواحدة الموصوفة هنا، ومسارات عمل الأتمتة، وهي لوحة من عُقد المشغّلات والإجراءات يمكنها استدعاء موصّلات خارجية. استخدم الأتمتة عندما يُفترض أن يشغّل وكيل أو طاقم واحد مجموعة تعليمات واحدة استجابةً لحدث متوقّع. واستخدم مسار العمل عندما تحتاج إلى خطوات متعددة أو إجراءات عبر تطبيقات مختلفة قبل أن يدخل الوكيل على الخط.
ولأن المكلَّف وكيل Sharkly كامل، ينطبق عليه كل ما ضبطته مسبقًا على ذلك الوكيل: تعليماته وبيئة التشغيل والمهارات والمستودعات وإعدادات التشغيل. وإذا لم تكن قد أنشأت وكيلًا بعد، فإن الوكلاء في Sharkly يشرح كيف تتحول إعدادات عمل محفوظة إلى شيء يستطيع الفريق إعادة استخدامه. والأتمتة في جوهرها موعد دائم مع ذلك الوكيل.
أنواع المشغّلات الأربعة
يمكن أن تحتوي الأتمتة على عدة مشغّلات، ويُفعَّل كل منها أو يُعطَّل بشكل مستقل. ويمكن لتعريف واحد أن يخدم عدة نقاط دخول: فالتعليمات نفسها الخاصة بالفرز يمكن أن تنطلق عند تغيّر الحالة وعند أمر بشرطة مائلة، دون تكرار أي شيء.
| المشغّل | ينطلق عندما | الأفضل لـ | احترس من |
|---|---|---|---|
| جدول زمني | تطابق تعبير cron ضمن منطقة زمنية مختارة | الفحوصات المتكررة والملخصات والتذكيرات وأعمال الصيانة | اختيار المنطقة الزمنية؛ فالتشغيل يحدث سواء تغيّر شيء أم لا |
| تغيّر حالة مهمة | انتقال مهمة إلى حالة واحدة محددة على مستوى المؤسسة | قوائم الاستقبال ومتابعة المراجعة والفرز | المطابقة على مستوى المؤسسة كلها، وليست مقتصرة على المساحة |
| عبارة في تعليق | احتواء تعليق على مهمة لعبارة محددة مسبقًا، دون حساسية لحالة الأحرف | الأوامر عند الطلب مثل /triage من داخل نقاش | يستمع أيضًا على مستوى المؤسسة كلها؛ فاختر عبارة مميزة |
| Webhook | إرسال خدمة خارجية طلب POST إلى رابط سري | نتائج CI وأحداث GitHub والتنبيهات من أنظمة أخرى | الرابط سر من نوع bearer؛ احفظه وبدّله بعناية |
الجدول الزمني يستخدم تعبير cron خماسي الحقول قياسيًا مع منطقة زمنية، إلى جانب إعدادات مسبقة شائعة للفترة كل ساعة أو يوميًا أو في أيام الأسبوع أو أسبوعيًا. هذا هو المشغّل المناسب للعمل الذي يجب أن يحدث لأن اليوم ثلاثاء، لا لأن شيئًا ما تغيّر.
تغيّر حالة مهمة يُشغّل الأتمتة عندما تنتقل مهمة إلى حالة واحدة محددة على مستوى المؤسسة. وهنا تفصيل مهم: الحالات تعريفات قابلة لإعادة الاستخدام على مستوى المؤسسة، ومطابقة الأحداث الحالية تجري على مستوى المؤسسة كلها. فإذا استخدمت عدة مساحات الحالة نفسها «Needs Triage»، فإن أي انتقال مطابق في أي منها قد يُشغّل أتمتتك. لذا اكتب التعليمات بحيث يتحقق الوكيل من المهمة المُشغِّلة قبل التصرف.
عبارة في تعليق تبدأ تشغيلًا عندما يحتوي تعليق على مهمة على عبارة محددة مسبقًا. والمطابقة لا تفرّق بين الأحرف الكبيرة والصغيرة، وتبحث في أي موضع من التعليق، وتستمع أيضًا على مستوى المؤسسة كلها. ونصيحة الوثائق: فضّل أمرًا مميزًا بشرطة مائلة مثل /triage-bug بدلًا من «check»، واجعل التعليمات تتحقق من المهمة المُشغِّلة.
Webhook ينشئ رابطًا سريًا يستقبل طلب POST من خدمة خارجية. ويُعرض الرابط الكامل عند إنشاء المشغّل أو إعادة توليده ولا يمكن عرضه لاحقًا، لأن الرابط نفسه يعمل افتراضيًا كسر من نوع bearer. وإذا ضبطت سر توقيع، وجب أن تجتاز الطلبات أيضًا التحقق من التوقيع، وهو النمط نفسه الذي يستخدمه GitHub في الـ webhooks الخاصة به. أبقِ هذه الأسرار بعيدة عن أنظمة إدارة الشيفرة المصدرية، وأعد توليدها إذا انكشفت. وللتعامل البرمجي مع Sharkly بما يتجاوز الـ webhooks، راجع واجهة سطر الأوامر وواجهة برمجة التطبيقات في Sharkly.
وهناك طريقة أخرى لبدء التشغيل ليست مشغّلًا على الإطلاق: زر Run now يبدأ الأتمتة مباشرة، وهو الوسيلة لاختبار التعليمات وتوافر المكلَّف قبل أن تأتمن المشغّلات الأربعة على هذه المهمة.
ما الذي تشغّله الأتمتة فعليًا
عندما ينطلق مشغّل، تشغّل Sharkly الوكيل أو الطاقم المكلَّف وفق تعليمات الأتمتة. وهذه التعليمات هي العقد بأكمله، ولذلك توضح الوثائق بدقة ما ينبغي أن تتضمنه: النتيجة المطلوب إنتاجها، والمدخلات التي يجب فحصها، والخطوات التي يجب اتباعها، ومكان تسجيل النتيجة، والتغييرات المسموح بها، واللحظة التي يجب أن يراجع فيها إنسان أو يتخذ قرارًا.

وتستحق النقطة الأخيرة تأكيدًا. فالأتمتة الجيدة تحدد نقطة توقفها بوضوح. فعبارة «اكتب مسودة الملخص وسجّلها؛ لا تغيّر حالات المهام» تعليمة أفضل من تعليمة أطول تترك حدود الصلاحية غامضة. وإرشادات الوثائق للطرح التدريجي واضحة بالقدر نفسه: ابدأ بعمل قابل للملاحظة والتراجع، وراجع عدة تشغيلات قبل توسيع النطاق.
ثلاث مهام روتينية تستحق الأتمتة أولًا
تلتزم كل واحدة من هذه المهام بمستوى الدقة الذي يدعمه المنتج: الوكيل يقرأ ويصوغ المسودات ويسجّل، والناس يحتفظون بالقرارات.
ملخص الاجتماع اليومي. المشغّل: جدول زمني بإعداد مسبق لأيام الأسبوع، وبالمنطقة الزمنية للفريق. المكلَّف: وكيل تقارير يملك صلاحية قراءة السياق ذي الصلة. التعليمات: افحص مهام السبرنت الحالي، وسجّل ما تحرّك وما هو متعطل وما ينتظر المراجعة، ثم سجّل ملخصًا قصيرًا حيث يقرأه الفريق، دون تغيير أي مهمة. يتولى الوكيل الجزء الذي لا يستمتع به أحد في الاجتماع اليومي، وهو تجميع الصورة، ليتحول الاجتماع إلى حديث عن البندين اللذين يحتاجان إلى حكم وتقدير. وإذا كان فريقك يدير إيقاع عمله عبر Sharkly، فإن السبرنتات توفّر البنية التي يفحصها الوكيل.
الفرز الأولي للأخطاء. المشغّل: مشغّل تغيّر حالة المهمة على حالة استقبال الأخطاء لديك، أو مشغّل تعليق على عبارة مميزة مثل /triage، أو كليهما. المكلَّف: وكيل فرز تغطي مستودعاته الشيفرة المتأثرة. التعليمات: تحقق من أن المهمة المُشغِّلة خطأ في المساحة المقصودة، واقرأ التقرير، وافحص المنطقة ذات الصلة في قاعدة الشيفرة، ثم سجّل ما يبدو أن الخطأ يمسّه، وهل يحتوي التقرير ما يكفي للتصرف، وأولوية مقترحة مع تبريرها. اقترح؛ لا تقرّر. وخطوة التحقق ليست زخرفة: فبما أن مطابقة الحالة والتعليق تجري على مستوى المؤسسة كلها، فإن التعليمات هي مرشّح النطاق لديك. والمكسب أن كل خطأ يحصل على القراءة الأولية المتأنية نفسها في غضون دقائق من وصوله. والتقسيم نفسه للعمل ينطبق عندما تأتي المهام من خارج Sharkly؛ راجع كيف تتحول تذكرة Jira إلى مهمة وكيل.
التقرير الدوري. المشغّل: جدول زمني بإعداد مسبق أسبوعي. المكلَّف: وكيل تقارير من النوع نفسه، وتعليمات محدودة بنطاق زمني أطول: لخّص ما أُنجز وما تأخر وما هو متعطل. والفرق عن حالة الاجتماع اليومي هو النطاق والجمهور فقط، وهذا بالتحديد سبب انتمائه إلى الأتمتة. فتقرير موجود كل جمعة بالمستوى نفسه من الدقة يتفوق على تقرير أفضل لا يوجد إلا عندما يجد أحدهم وقتًا.
وفي المهام الثلاث كلها، لاحظ ما لا يظهر أبدًا في التعليمات: اقبل، وافق، أطلق، أغلق، قرّر.
سجل التشغيل والحالة والإيقاف المؤقت والاستئناف
الأتمتة التي لا تستطيع فحصها هي أتمتة لا تستطيع الوثوق بها، ولذلك يُسجَّل كل تشغيل. يسجّل سجل التشغيل كل تشغيل بحالة قيد التشغيل أو مكتمل أو فاشل أو متخطّى، وتتيح لك تفاصيل التشغيل فتح بيانات المشغّل المُرسلة، وتشغيل الوكيل، والناتج، وسبب الفشل المسجّل. وفوق التشغيلات الفردية، يلخّص مؤشر الحالة آخر وضع مفيد: لم يُختبر بعد، قيد التشغيل، سليم، متخطّى، أو يحتاج إلى انتباه.
وثمة حدّ يجب أن يبقى بارزًا في ذهنك: حالة «مكتمل» تصف تشغيل الأتمتة، ولا تعني ضمان أن كل نتيجة لاحقة كانت صحيحة. «مكتمل» تعني أن الآلية عملت. أما إن كان الملخص دقيقًا أو قرار الفرز سليمًا، فهذا يبقى قراءة بشرية.
الإيقاف المؤقت والاستئناف موجودان تحديدًا للحظات التي تتوقعها. أوقف الأتمتة مؤقتًا لإيقاف التشغيلات الجديدة المُطلَقة أثناء تعديل تعليماتها أو مشغّلاتها أو المكلَّف بها، ثم استأنفها عندما يصبح الإعداد جاهزًا؛ ويبقى التعريف وسجله كما هما في الأثناء. والحذف هو مسار الإزالة الوحيد، لذا احتفظ به للتعريفات التي لم تعد بحاجة إلى سجل تشغيلها. وقبل أرشفة أي وكيل، تحقق مما إذا كانت هناك أتمتات لا تزال تعتمد عليه.
وقبل الاعتماد على أي أتمتة، تقترح الوثائق قائمة تحقق قصيرة: شغّلها يدويًا بزر Run now، وتأكد من أن الوكيل أو الطاقم يملك الصلاحية المطلوبة، وافحص التشغيل وناتجه، واختبر كل مشغّل على حدة، واستخدم حالة ضيقة النطاق أو عبارة تعليق مميزة، وأبقِ أسرار الـ webhook بعيدة عن أنظمة إدارة الشيفرة المصدرية.
أين تتوقف الأتمتة
قد يسهل الاستنتاج بأن الهدف هو خط أنابيب يعمل بلا إشراف. لكن الأمر ليس كذلك، وتصميم المنتج نفسه يقول ذلك. فالأتمتة لا تقبل ناتجها بنفسها، بل تسجّل كل تشغيل للمراجعة.
لذا فقاعدة القرار الصادقة هي التالية. استخدم الأتمتة عندما يجب أن يبدأ العمل نفسه المحدد بوضوح بشكل متكرر أو استجابةً لحدث متوقّع، وعندما تتفوق مسودة أولى ثابتة الجودة على مسودة ممتازة تحدث من حين لآخر. وأسند المهمة إلى وكيل مباشرة عندما تكون المهمة لمرة واحدة، وأبقِ العمل بالكامل مع البشر عندما يكون العمل هو الحكم نفسه: قرار أولوية تحت ضغوط متعارضة، أو قرار قبول، أو أي أمر يكون فيه الخطأ المستمر أسوأ من البطء من حين لآخر.
ابدأ صغيرًا ومملًا. جهّز حسابك، وأنشئ وكيل تقارير واحدًا، واكتب أتمتة واحدة بجدول زمني لأيام الأسبوع وتعليمات تنتهي بعبارة «لا تغيّر أي مهمة»، وشغّلها يدويًا مرة واحدة. اقرأ الناتج. وإذا كان مفيدًا، دع الجدول الزمني يتولى الأمر. وتغطي الوثائق الأتمتة ولوحة سير العمل بتفصيل أوسع.
الأسئلة الشائعة
ما أنواع المشغّلات التي تدعمها أتمتات Sharkly؟
أربعة: جدول زمني يستخدم تعبير cron خماسي الحقول مع منطقة زمنية، ومشغّل تغيّر حالة مهمة ينطلق عندما تنتقل مهمة إلى حالة محددة على مستوى المؤسسة، ومشغّل تعليق ينطلق عند عبارة محددة مسبقًا، ومشغّل webhook يستقبل طلب POST على رابط سري. ويمكن للأتمتة أن تجمع عدة مشغّلات، يُفعَّل كل منها أو يُعطَّل بشكل مستقل، كما يبدأ زر Run now تشغيلًا يدويًا لأغراض الاختبار.
هل تُنشئ الأتمتة مهمة في كل مرة تعمل فيها؟
لا. تبدأ الأتمتة الحالية تشغيلات الوكيل أو الطاقم مباشرة ولا تُنشئ مهمة عند كل تشغيل. ويُسجَّل التشغيل وناتجه وأي سبب فشل في سجل تشغيل الأتمتة. وإذا أردت أن تظهر النتيجة في مكان يقرأه الفريق، فاذكر ذلك في التعليمات.
كيف تختلف الأتمتة عن مسارات عمل الأتمتة؟
هما سطحان منفصلان في المساحة. الأتمتة قاعدة واحدة: متى تبدأ، وأي وكيل أو طاقم يُشغَّل، وما التعليمات التي يتبعها. أما مسارات عمل الأتمتة فهي لوحة من عُقد المشغّلات والإجراءات يمكنها استدعاء تطبيقات خارجية عبر الموصّلات. استخدم القاعدة الواحدة للفحوصات المتكررة وأوامر التعليقات، واستخدم اللوحة للتدفقات متعددة الخطوات والتي تعبر تطبيقات عدة.
هل يمكن للأتمتة التعامل مع فرز الأخطاء بمفردها؟
يمكنها تولي المرحلة الأولى: التحقق من المهمة المُشغِّلة، وقراءة التقرير، وفحص الشيفرة ذات الصلة، وتسجيل النتائج مع أولوية مقترحة. أما قرار الفرز فيبقى بيد إنسان، وينبغي أن تنص التعليمات على ذلك صراحةً. وتوصي الوثائق بالبدء بعمل قابل للملاحظة والتراجع، ومراجعة عدة تشغيلات قبل توسيع النطاق.
ماذا يحدث عندما يفشل تشغيل الأتمتة؟
يُسجَّل التشغيل كفاشل في سجل التشغيل مع سبب الفشل عند توفره، وينتقل مؤشر الحالة إلى «يحتاج إلى انتباه». افتح تفاصيل التشغيل لفحص بيانات المشغّل وتشغيل الوكيل والناتج، وأصلح التعليمات أو المشغّل أو المكلَّف، ثم استخدم زر Run now للتحقق من الإصلاح قبل أن تأتمن المشغّلات مرة أخرى.



