لقد رأيت الكثير من المدمجين يخسرون صفقات لأن كاميراتهم لا تستطيع التحدث إلى أنظمة خارجية. الكاميرا تجلس هناك، تكتشف متسللاً، ثم لا تفعل شيئًا مفيدًا بخلاف التسجيل. هذه فرصة ضائعة.
نعم، كاميرات PTZ الخاصة بنا تدعم بالكامل أوامر HTTP(S) Post (Webhook)1 إلى بوابات إنترنت الأشياء التابعة لجهات خارجية. يمكنك إرسال بيانات إنذار منظمة بتنسيق JSON أو XML إلى منصات مثل Node-RED، أو Home Assistant، أو n8n، أو خادم الواجهة الخلفية الخاص بك. عندما تكتشف الكاميرا بالذكاء الاصطناعي شخصًا أو مركبة أو عبورًا للحدود، فإنها ترسل فورًا طلب Post إلى نقطة النهاية المحددة الخاصة بك - مما يؤدي إلى تشغيل إجراءات واقعية مثل الأضواء أو صفارات الإنذار أو الإشعارات الآلية.

أدناه، سأستعرض معك الأسئلة الدقيقة التي أسمعها غالبًا من مدمجي الأنظمة ومديري الهندسة. كل منها يغطي سيناريو حقيقي ستواجهه عند توصيل كاميرا PTZ بنظام إنترنت الأشياء أوسع. دعنا نبدأ.
جدول المحتويات
هل يمكنني تشغيل بوابة ذكية أو ضوء وامض مباشرة من اكتشاف الذكاء الاصطناعي للكاميرا؟
هذا هو السؤال الأول الذي يطرحه عليّ كل مدير مشروع. لديك كاميرا على عمود، ووحدة تحكم بوابة على السياج، وضوء وامض على المبنى. تشغيل أسلاك فعلية بينها يكلف الوقت والمال. يجب أن تكون هناك طريقة أفضل.
يمكنك تشغيل بوابة ذكية، أو ضوء وامض، أو أي جهاز متصل بالشبكة مباشرة من حدث اكتشاف الذكاء الاصطناعي للكاميرا. ترسل الكاميرا طلب HTTP Post إلى بوابة إنترنت الأشياء الخاصة بك في اللحظة التي تكتشف فيها شخصًا أو مركبة. ثم تقوم البوابة بالتحكم في محرك البوابة، أو الضوء الوامض، أو أي مشغل آخر - لا حاجة لأسلاك فعلية بين الكاميرا والجهاز.

كيف يعمل التشغيل المباشر
الفكرة الأساسية هنا بسيطة. الكاميرا هي المستشعر. بوابة إنترنت الأشياء هي العقل. البوابة أو الضوء الوامض هما العضلات. يتحدثون عبر الشبكة، وليس عبر سلك نحاسي.
إليك التدفق خطوة بخطوة:
- يكتشف محرك الذكاء الاصطناعي المدمج في الكاميرا شكل إنسان يعبر سلكًا افتراضيًا قمت برسمه في واجهة الويب.
- في غضون أجزاء من الثانية، تقوم الكاميرا بتجميع الحدث في طلب HTTP Post. تتضمن هذه الحزمة نوع الحدث، والطابع الزمني، ومعرف الجهاز، وإحداثيات مربع تحديد الكائن اختياريًا.
- ترسل الكاميرا طلب Post هذا إلى عنوان URL الذي قمت بتكوينه - على سبيل المثال،,
http://192.168.1.50:1880/gate-trigger. - يتلقى جهاز البوابة الخاص بك (لنفترض أنه نود-ريد2 يعمل على جهاز Raspberry Pi) الطلب، ويقوم بتحليل JSON، ويرسل أمر ترحيل إلى وحدة التحكم في البوابة أو ضوء الوميض.
- تعيد البوابة
200 موافقإلى الكاميرا، مؤكدة الاستلام.
لماذا هذا مهم للمواقع خارج الشبكة
في العديد من المشاريع التي أدعمها - مواقع البناء في ريف كندا، ومزارع الطاقة الشمسية في الشرق الأوسط، والأراضي الزراعية في جنوب شرق آسيا - فإن مد كابل من عمود الكاميرا إلى البوابة غير عملي ببساطة. قد تكون المسافة 200 متر. قد تكون التضاريس وعرة. تكاليف الحفر أكثر من الكاميرا نفسها.
مع التشغيل المستند إلى Webhook، تحتاج فقط إلى اتصال بالشبكة. إذا كانت كل من الكاميرا والبوابة موجودتين على نفس الشبكة المحلية (حتى شبكة LAN الخاصة بجهاز توجيه 4G)، فإن طلب POST ينتقل عبر IP. لا حفر. لا أنابيب. لا عمالة إضافية.
ما هي الأجهزة التي يمكنك التحكم فيها؟
| نوع الجهاز | الاتصال بالبوابة | حالة الاستخدام النموذجي |
|---|---|---|
| محرك بوابة ذكي | خرج مرحل أو RS-485 | فتح تلقائي للمركبات المصرح بها، إغلاق تلقائي بعد انتهاء المهلة |
| ضوء وامض / صفارة إنذار | خرج مرحل أو Zigbee | رادع بصري/صوتي فوري عند التسلل |
| مكبر صوت PA | صوت شبكة أو مرحل | تشغيل تحذير صوتي مسجل مسبقًا |
| ذراع الحاجز | خرج التتابع | التحكم في الوصول لمواقف السيارات أو نقاط التفتيش |
| مصباح كاشف LED | زيجبي / لورا / مرحل | إضاءة المناطق المظلمة عند اكتشاف الحركة |
النقطة هي هذه: لا تحتاج الكاميرا إلى معرفة الجهاز الذي تتحكم فيه. إنها ترسل فقط Webhook. البوابة الخاصة بك تتعامل مع الباقي. هذا الفصل في المهام يجعل النظام معياريًا وسهل الصيانة.
سيناريو حقيقي مع Node-RED
دعني أرسم لك صورة. ديفيد، أحد شركائنا المتكاملين في أمريكا الشمالية، يدير مشروع مراقبة موقع بناء. لديه كاميرا PTZ تعمل بالطاقة الشمسية 4G الخاصة بنا على سارية محمولة. على بعد حوالي 80 مترًا، توجد حاوية شحن بها بوابة Node-RED بالداخل، تعمل بنفس المصفوفة الشمسية.
عندما تكتشف الكاميرا شخصًا بعد ساعات العمل، فإنها تطلق Webhook إلى Node-RED. يتحقق Node-RED من الوقت. إذا كان بين الساعة 10 مساءً و 6 صباحًا، فإنه يشغل إجراءين: يقوم بتشغيل مصباح كاشف متصل بـ LoRa على بعد 50 مترًا، ويرسل تنبيهًا عبر Telegram إلى هاتف مشرف الموقع. كل هذا يحدث في أقل من ثانيتين. لا يوجد اعتماد على السحابة. لا توجد رسوم اشتراك شهرية.
هل يدعم Webhook حمولات JSON مخصصة للتكامل مع Home Assistant؟
أتلقى هذا السؤال كثيرًا من المتكاملين الذين يستخدمون Home Assistant كمركز تحكم رئيسي لهم. يريدون معرفة ما إذا كان خرج Webhook الخاص بالكاميرا مرنًا بما يكفي ليناسب تدفقات الأتمتة الحالية لديهم. الإجابة المختصرة هي نعم، ولكن دعني أشرح التفاصيل.
يدعم Webhook حمولات JSON القياسية المتوافقة تمامًا مع محرك الأتمتة الخاص بـ Home Assistant. ترسل الكاميرا بيانات منظمة بما في ذلك نوع الحدث، والطابع الزمني، ومعرف الجهاز، وبيانات وصفية للذكاء الاصطناعي. يمكنك تحليل JSON هذا مباشرة في Home Assistant باستخدام مشغل Webhook المدمج أو من خلال وسيط Node-RED لمنطق أكثر تعقيدًا.

فهم بنية حمولة JSON
عندما تطلق الكاميرا Webhook، يحتوي جسم HTTP POST على كائن JSON. تعتمد الحقول الدقيقة على نوع الحدث، ولكن حمولة نموذجية تبدو كالتالي:
{
"event": "human_detection",
"timestamp": "2025-01-15T03:22:11Z",
"device_id": "CAM-PTZ-4G-0032",
"channel": 1,
"region": "Zone-A",
"confidence": 0.92,
"bounding_box": {
"x": 320,
"y": 180,
"width": 85,
"height": 210
}
} هذا هو JSON عادي قياسي. يمكن لأي خلفية يمكنها تحليل JSON - Python، Node.js، PHP، Go، أو محلل Home Assistant المدمج - قراءته دون أي SDK أو مكتبة خاصة.
كيف يستقبل Home Assistant Webhook
في Home Assistant، تقوم بإنشاء مشغل أتمتة Webhook. يمنحك Home Assistant عنوان URL فريدًا مثل http://your-ha-ip:8123/api/webhook/camera-alert. تقوم بلصق عنوان URL هذا في صفحة تكوين HTTP Post للكاميرا. هذا كل شيء.
عندما تكتشف الكاميرا حدثًا، فإنها تقوم بإرسال طلب POST إلى عنوان URL هذا. يستقبل Home Assistant بيانات JSON، ويبدأ التشغيل الآلي الخاص بك. يمكنك تشغيل الأضواء، أو قفل الأبواب، أو إرسال إشعارات فورية، أو تسجيل الحدث في قاعدة بيانات.
ماذا لو احتجت إلى تحويل الحمولة؟
يحتاج بعض المدمجين إلى إعادة تشكيل JSON قبل وصوله إلى Home Assistant. ربما يتوقع التشغيل الآلي الخاص بك اسم حقل مختلف، أو تريد إضافة سياق إضافي مثل بيانات الطقس أو معلومات جدول المناوبات. في هذه الحالة، تضع Node-RED أو n8n بين الكاميرا و Home Assistant.
يبدو التدفق كالتالي:
| الخطوة | المكوّن | الإجراء |
|---|---|---|
| 1 | الكاميرا | ترسل بيانات JSON الأولية إلى عنوان URL لـ Node-RED Webhook |
| 2 | نود-ريد | تستقبل بيانات JSON، وتحول الحقول، وتضيف السياق |
| 3 | نود-ريد | تعيد توجيه بيانات JSON المعدلة إلى عنوان URL لـ Home Assistant Webhook |
| 4 | مساعد المنزل | تشغل التشغيل الآلي بناءً على البيانات المستلمة |
يمنحك هذا النهج ثلاثي الطبقات أقصى قدر من المرونة. تتعامل الكاميرا مع الكشف. يتعامل Node-RED مع تحويل البيانات. يتعامل Home Assistant مع الإجراء. كل طبقة تقوم بمهمة واحدة بشكل جيد.
MQTT كبديل
إذا كان إعداد Home Assistant الخاص بك يعتمد بالفعل بشكل كبير على MQTT (وهو أمر شائع في عمليات النشر التي تعتمد بشكل كبير على إنترنت الأشياء)، فإن كاميراتنا تدعم أيضًا MQTT3 النشر. يمكنك تكوين الكاميرا لنشر أحداث الإنذار إلى موضوع MQTT محدد، ويشترك Home Assistant في هذا الموضوع. هذا أخف على الموارد من HTTP Post ويعمل بشكل أفضل عندما يكون لديك عشرات الكاميرات التي تبلغ عن نفسها إلى نفس الوسيط.
ولكن بالنسبة لمعظم المشاريع الصغيرة والمتوسطة - على سبيل المثال، من 1 إلى 15 كاميرا - فإن HTTP Post Webhook أبسط في الإعداد وتصحيح الأخطاء. لا تحتاج إلى تشغيل وسيط MQTT منفصل. ما عليك سوى توجيه الكاميرا إلى عنوان URL والبدء.
كيف أقوم بتكوين رأس HTTP والمصادقة لخادم السحابة الآمن الخاص بي؟
الأمان ليس اختياريًا. إذا كان نقطة نهاية Webhook الخاصة بك تقع على خادم سحابي بعنوان IP عام، فأنت بحاجة إلى المصادقة. بخلاف ذلك، يمكن لأي شخص يكتشف عنوان URL الخاص بك إرسال بيانات إنذار وهمية وتشغيل الأتمتة الخاصة بك. لقد رأيت هذا يحدث، وهو ليس ممتعًا لتصحيح الأخطاء في الساعة 2 صباحًا.
يمكنك تكوين رؤوس HTTP والمصادقة مباشرة في واجهة المستخدم الرسومية للكاميرا ضمن إعدادات ربط الأحداث. تدعم الكاميرا المصادقة الأساسية (Basic) والموجزة (Digest) لطلبات Webhook Post. يمكنك أيضًا تعيين رؤوس مخصصة، بما في ذلك مفاتيح API أو رموز Bearer، لمطابقة متطلبات الأمان للخادم السحابي أو بوابة API الخاصة بك.

أين تجد الإعدادات
على كاميرات PTZ الخاصة بنا، يكون مسار التكوين عادةً:
واجهة المستخدم على الويب → حدث → طريقة الربط → HTTP Post
في هذه الصفحة، سترى الحقول التالية:
- عنوان URL للخادم: نقطة النهاية الكاملة، بما في ذلك البروتوكول، عنوان IP أو النطاق، المنفذ، والمسار. مثال:
https://api.yourserver.com:443/v1/camera-alerts - طريقة HTTP: Post (افتراضي وموصى به لـ Webhook).
- نوع المصادقة: None، Basic، أو Digest.
- اسم المستخدم / كلمة المرور: يُستخدم للمصادقة الأساسية أو المصادقة الهضمية.
- رؤوس مخصصة: يمكنك إضافة أزواج المفاتيح والقيم. على سبيل المثال،,
X-API-Key: مفتاحك السري هنا.
المصادقة الأساسية مقابل المصادقة الهضمية
سأشرح الخيارين حتى تتمكن من اختيار الخيار المناسب لمشروعك.
المصادقة الأساسية5 ترسل اسم المستخدم وكلمة المرور مشفرة بـ Base64 مع كل طلب. إنها بسيطة ومدعومة على نطاق واسع. لكن Base64 ليس تشفيرًا - إنه مجرد ترميز. إذا اعترض شخص ما حركة المرور، فيمكنه فك تشفير بيانات الاعتماد الخاصة بك بسهولة. لذا، إذا كنت تستخدم المصادقة الأساسية، فاستخدم دائمًا HTTPS (تشفير TLS) لحماية طبقة النقل.
المصادقة الهضمية6 أكثر أمانًا عبر HTTP العادي. بدلاً من إرسال كلمة المرور مباشرة، يقوم الكاميرا والخادم بإجراء مصافحة تحدي واستجابة. لا تنتقل كلمة المرور أبدًا عبر السلك في شكل قابل للقراءة. هذا خيار أفضل إذا، لسبب ما، لا يمكنك استخدام HTTPS - على سبيل المثال، في شبكة محلية حيث لم تقم بإعداد شهادات TLS.
HTTPS و TLS
لأي Webhook مواجه للسحابة، أوصي بشدة بـ HTTPS. تدعم كاميراتنا TLS 1.24, ، مما يعني أن طلب Post بأكمله - الرؤوس، الجسم، بيانات الاعتماد - مشفر من طرف إلى طرف. حتى لو قام شخص ما بالتقاط اتصال 4G، فإنه يرى فقط هراءً مشفرًا.
رؤوس مخصصة لبوابات API
تستخدم العديد من المنصات السحابية (AWS API Gateway، Azure Functions، Cloudflare Workers) مفاتيح API التي يتم تمريرها في رؤوس مخصصة للمصادقة. تتيح لك كاميراتنا إضافة هذه الرؤوس مباشرة. إليك إعداد شائع:
| مفتاح الرأس | قيمة الرأس | الغرض |
|---|---|---|
X-API-Key | sk_live_abc123xyz | يصادق الكاميرا على بوابة API |
Content-Type | application/json | يخبر الخادم بتوقع JSON |
X-Device-ID | CAM-PTZ-4G-0032 | يحدد الكاميرا التي أرسلت التنبيه |
هذا مفيد بشكل خاص عندما تدير أسطولًا من الكاميرات عبر مواقع متعددة. يمكن لكل كاميرا حمل معرف الجهاز الخاص بها في الرأس، لذلك يعرف نظامك الخلفي بالضبط الوحدة التي أثارت الإنذار دون الحاجة حتى إلى تحليل جسم JSON.
ملاحظة حول قواعد جدار الحماية
إذا كان خادم Webhook الخاص بك يقع خلف جدار حماية، فأنت بحاجة إلى إضافة IP الصادر للكاميرا إلى القائمة البيضاء. بالنسبة لكاميرات 4G، يتم تعيين هذا IP بواسطة شركة الاتصالات وقد يتغير. في هذه الحالة، فكر في استخدام نفق VPN أو بطاقة SIM ذات IP ثابت. يستخدم بعض شركائنا المتكاملين Tailscale7 أو WireGuard لإنشاء نفق مشفر دائم بين الكاميرا وخادمها السحابي. هذا يحل مشكلة جدار الحماية ومشكلة الأمان في خطوة واحدة.
هل ستحاول الكاميرا إعادة إرسال طلب Webhook Post إذا فشلت المصافحة الأولية للشبكة؟
هذا هو السؤال الذي يفصل بين العرض التوضيحي والنشر الإنتاجي. في المختبر، تكون الشبكة مثالية. في الميدان - خاصة على شبكة 4G في منطقة ريفية - تسقط الحزم، وتتلاشى الإشارات، وتفشل المصافحات. إذا استسلمت الكاميرا بعد محاولة فاشلة واحدة، فستفقد الإنذارات. وفقدان الإنذارات يعني فقدان الثقة مع عميلك النهائي.
نعم، تتضمن الكاميرا آلية إعادة محاولة قابلة للتكوين لمحاولات Webhook Post الفاشلة. إذا فشلت المصافحة الأولية لـ TCP أو طلب HTTP - بسبب انتهاء مهلة الشبكة، أو عدم توفر الخادم، أو خطأ في تحليل DNS - ستقوم الكاميرا تلقائيًا بإعادة محاولة طلب Post بناءً على عدد مرات إعادة المحاولة والفاصل الزمني الذي قمت بتعيينه في التكوين. هذا يضمن تسليم الإنذارات حتى على روابط 4G أو الأقمار الصناعية غير المستقرة.

كيف تعمل منطق إعادة المحاولة
عندما ترسل الكاميرا Webhook ولا تتلقى 200 موافق استجابة خلال نافذة المهلة (عادةً 5-10 ثوانٍ)، فإنها تحدد المحاولة على أنها فاشلة. ثم تنتظر فاصلًا زمنيًا قابلاً للتكوين - على سبيل المثال، 3 ثوانٍ - وتحاول مرة أخرى. تكرر هذه العملية حتى الحد الأقصى لعدد مرات إعادة المحاولة الذي قمت بتعيينه.
إليك التسلسل:
- المحاولة الأولى: ترسل الكاميرا Post. لا توجد استجابة خلال 5 ثوانٍ. تم تحديدها على أنها فاشلة.
- انتظر 3 ثوانٍ.
- المحاولة الثانية: ترسل الكاميرا Post مرة أخرى. يستجيب الخادم بـ
200 موافق. نجاح. تم تسليم الحدث.
إذا فشلت جميع محاولات إعادة المحاولة، تسجل الكاميرا الفشل محليًا. اعتمادًا على التكوين الخاص بك، يمكنها أيضًا تشغيل إجراء ربط ثانوي - مثل حفظ لقطة على بطاقة SD أو إرسال تنبيه بريد إلكتروني عبر قناة مختلفة.
ما الذي يسبب الفشل في الميدان؟
أريد أن أكون صريحًا بشأن هذا. في تجربتي في دعم عمليات النشر خارج الشبكة، هذه هي الأسباب الأكثر شيوعًا لفشل Webhook Post:
- انقطاع إشارة 4G: الكاميرا موجودة على سارية شمسية في وادٍ. تتذبذب إشارة الخلية بين شريطين وصفر. انقطاع قصير أثناء محاولة Post يقتل الاتصال.
- الحمل الزائد على الخادم: يعمل مثيل Node-RED الخاص بك على جهاز Raspberry Pi، وهو مشغول بمعالجة طلب كاميرا أخرى. قائمة انتظار اتصال TCP ممتلئة.
- انتهاء مهلة DNS: تحاول الكاميرا حل اسم نطاق (مثل
api.yourserver.com)، ولكن خادم DNS على شبكة 4G بطيء. يستغرق البحث وقتًا أطول من نافذة المهلة. - فشل مصافحة TLS: انتهت صلاحية شهادة SSL الخاصة بالخادم، أو هناك عدم تطابق في الإصدار. لا يمكن للكاميرا إكمال مصافحة HTTPS.
أفضل الممارسات للتسليم الموثوق
بناءً على سنوات من عمليات النشر الميدانية، إليك ما أوصي به:
استخدم عناوين IP بدلاً من أسماء النطاقات لعنوان URL لـ Webhook عند الإمكان. هذا يلغي DNS كنقطة فشل. إذا كان يجب عليك استخدام نطاق، فتأكد من أن خادم DNS الخاص بالكاميرا سريع وموثوق.
اضبط عدد المحاولات على 3 على الأقل. هذا يغطي معظم حالات الفشل العابرة. ضبطه على قيمة أعلى (مثل 5 أو 10) لا بأس به للإنذارات الهامة، ولكن كن على علم بأن كل محاولة إعادة تستهلك النطاق الترددي والبطارية - وهو أمر مهم للإعدادات التي تعمل بالطاقة الشمسية.
اضبط فاصل المحاولة على 3-5 ثوانٍ. قصير جدًا (مثل ثانية واحدة) وقد تصل إلى الخادم قبل أن يتعافى. طويل جدًا (مثل 30 ثانية) ويفقد الإنذار إلحاحه.
استخدم MQTT كقناة احتياطية. إذا كان نشرك في منطقة ذات اتصال ضعيف جدًا، فقم بتكوين الكاميرا لنشر الإنذارات عبر MQTT بالإضافة إلى HTTP Post. تم تصميم MQTT للشبكات غير الموثوقة. يستخدم جلسات مستمرة ومستويات QoS لضمان التسليم حتى عند انقطاع الاتصال وإعادة الاتصال.
تخزين الحافة كشبكة أمان
حتى مع المحاولات المتكررة، هناك دائمًا احتمال ضئيل لفشل Webhook Post بالكامل - ربما تنقطع شبكة 4G لمدة 10 دقائق أثناء عاصفة. في هذه الحالة، تعمل مساحة التخزين المحلية للكاميرا كشبكة أمان. يتم حفظ حدث الإنذار، جنبًا إلى جنب مع مقطع الفيديو والصورة المصغرة المرتبطين به، على الجهاز المدمج بطاقة SD8. عندما تعود الشبكة، يمكنك استرداد اللقطات يدويًا أو من خلال ميزة تحميل FTP الخاصة بالكاميرا.
هذا النهج متعدد الطبقات — Webhook أولاً، وإعادة المحاولة عند الفشل، والتخزين المحلي كنسخة احتياطية — يمنحك نوع الموثوقية التي يتطلبها عملاء المؤسسات. إنه الفرق بين منتج يعمل في صالة عرض ومنتج يعمل على جبل.
الخاتمة
ترسل كاميرات PTZ الخاصة بنا طلبات HTTP Post Webhooks إلى أي بوابة إنترنت للأشياء (IoT) تابعة لجهة خارجية مع دعم كامل لحمولات JSON والمصادقة ورؤوس مخصصة وإعادة المحاولة التلقائية — مما يمنحك أتمتة موثوقة في العالم الحقيقي من الاكتشاف إلى الإجراء.
1. تعرف على أساسيات الـ webhooks وكيف تمكن الاتصال في الوقت الفعلي بين الأنظمة. ︎↩︎ 2. استكشف Node-RED، وهي أداة تطوير قائمة على التدفق لربط الأجهزة الطرفية وواجهات برمجة التطبيقات. ︎↩︎ 3. MQTT هو بروتوكول مراسلة خفيف الوزن مثالي للشبكات المقيدة وأجهزة إنترنت الأشياء. ︎↩︎ 4. يوفر TLS 1.2 اتصالاً مشفرًا لحماية بيانات الـ webhook أثناء النقل. ︎↩︎ 5. ترسل المصادقة الأساسية بيانات الاعتماد مشفرة بتنسيق Base64؛ قم دائمًا بالاقتران مع HTTPS للأمان. ︎↩︎ 6. تستخدم مصادقة Digest مصافحة تحدي واستجابة، متجنبة إرسال كلمة المرور كنص عادي. ︎↩︎ 7. تنشئ Tailscale شبكة VPN شبكية آمنة، مما يبسط الاتصال بين الكاميرات وخوادم السحابة. ︎↩︎ 8. توفر بطاقات SD تخزينًا محليًا موثوقًا ومنخفض التكلفة لمقاطع الفيديو وسجلات الأحداث. ︎↩︎