إتقان ميزة الكود الاحترافي: بناء إضافات Microsoft Copilot باستخدام Azure Functions
By Mirko Peters ·
عندما تحاول المؤسسات أتمتة العمليات التجارية الحرجة، فإنها كثيرًا ما تعتمد على منصات الترميز المنخفض لتسريع الإنتاجية في البداية. لكن مع تطور المتطلبات، يصل المطورون والمهندسون المعماريون التقنيون حتمًا إلى سقف محدد. فقد تفرض خيارات الترميز المنخفض قيودًا على التخصيص، وتؤدي إلى الارتهان بالمورد، وتحدّ من قابلية التوسع، وتطرح مخاطر تكنولوجيا المعلومات الموازية، وتخلّف ثغرات أمنية غير مرئية. ولتجاوز
Automatically translated with AI from the original post. Read the English original
عندما تحاول المؤسسات أتمتة العمليات التجارية الحرجة، فإنها كثيرًا ما تعتمد على منصات الترميز المنخفض لتسريع الإنتاجية في البداية. لكن مع تطور المتطلبات، يصل المطورون والمهندسون المعماريون التقنيون حتمًا إلى سقف محدد. فقد تفرض خيارات الترميز المنخفض قيودًا على التخصيص، وتؤدي إلى الارتهان بالمورد، وتحدّ من قابلية التوسع، وتطرح مخاطر تكنولوجيا المعلومات الموازية، وتخلّف ثغرات أمنية غير مرئية. ولتجاوز هذه الحواجز، تحتاج إلى ميزة الكود الاحترافي. فبالجمع بين قدرة Power Platform السريعة على تنسيق سير العمل وإمكانات Azure Functions الواسعة في التوسعة والأمان، يستطيع المطورون بناء حلول ذكاء اصطناعي قوية وقابلة للتوسع يمكن لـ Microsoft Copilot تنفيذها بسلاسة.
مرحبًا بكم في هذا الدليل الشامل والمعمّق لبناء إضافات Copilot المتقدمة باستخدام بنية Azure الخادمية (Serverless) الأصلية. سواء كنتم مهندسين معماريين تصمّمون سير عمل أتمتة للمؤسسات، أو مطورين يسعون إلى تعظيم إمكانات الشيفرة البرمجية، يرشدكم هذا الدليل خلال كل طبقة من طبقات حزمة المطور الحديثة. وإذا أعجبك هذا العرض، فلا تفوت حلقتنا البودكاست ذات الصلة، Build Microsoft Copilot Plugins with Azure Functions، حيث نتعمّق أكثر في الخيارات المعمارية الأهم.
ميزة الكود الاحترافي للمطورين
ما بعد الترميز المنخفض: لماذا يهم الكود الاحترافي
تريد بناء حلول تتجاوز الأساسيات. تساعدك منصات الترميز المنخفض على التحرك بسرعة، لكنها قد تحدّ من خياراتك عندما تحتاج إلى تحكم كامل. تمنحك ميزة الكود الاحترافي القدرة على تصميم أتمتتك وتخصيصها وتوسيعها بالشكل الذي تريده تمامًا.
تأمل هذه الفروق:
- التخصيص والتحكم: يمكنك إنشاء منطق وواجهات فريدة تناسب احتياجات عملك. توفر أدوات الترميز المنخفض السرعة، أما الكود الاحترافي فيتيح لك ضبط كل التفاصيل بدقة.
- تكلفة التطوير: قد تستغرق حلول الكود الاحترافي وقتًا وموارد أكبر، لكنها تحقق مرونة طويلة الأمد. يتيح لك الترميز المنخفض البدء بسرعة، لكن الاحتياجات المعقدة غالبًا ما تتطلب استثمارًا أعمق.
- التكامل والواجهات: يمكنك الاتصال بأي نظام أو البناء من الصفر. يعمل الترميز المنخفض بكفاءة مع التطبيقات القائمة، لكن الكود الاحترافي يفتح إمكانات أوسع.
- البيانات والبنية التحتية: لديك تحكم كامل في تدفق البيانات والبنية التحتية. قد يحتاج الترميز المنخفض إلى عمل إضافي في الخلفية لمهام البيانات الثقيلة.
مع ميزة الكود الاحترافي، يمكنك حل مشكلات لا يستطيع الترميز المنخفض معالجتها. يمكنك تنسيق سير عمل معقد، والتحقق من صحة البيانات عبر أنظمة متعددة، والتأكد من أن حلك يلبي معايير المؤسسات.
تمكين المطورين بإضافات Copilot
تكتسب قدرات جديدة عندما تستخدم إضافات Copilot مع Azure Functions. يمكنك تنفيذ منطق مخصص، وأتمتة المهام المتخصصة، والاتصال بالأنظمة الخارجية في الوقت الفعلي. وهذا يعني أنك تستطيع بناء إضافات تستجيب للطلبات بلغة طبيعية وتقدم نتائج فورية.
إليك كيف تمكّنك إضافات Copilot:
- يمكنك إنشاء إضافات تنفذ مهامًا فريدة، مصممة خصيصًا لمؤسستك.
- يمكنك استرجاع البيانات ومعالجتها من مصادر متعددة، وكل ذلك ضمن بيئة آمنة.
- يمكنك استخدام عناصر التحكم الإدارية لتحديد الإضافات النشطة، مما يعزز الأمان ويرفع القدرة على التنبؤ.
- يمكنك ربط أدوات الأمان وأتمتة برامج الأمان، مما يجعل بيئتك أكثر أمانًا وكفاءة.
حالات استخدام أتمتة المؤسسات
تلبي إضافات Copilot المبنية باستخدام Azure Functions مجموعة واسعة من احتياجات أتمتة المؤسسات. يمكنك استخدامها في المبيعات والتسويق والموارد البشرية والمالية وتكنولوجيا المعلومات والعمليات. وتحقق المؤسسات نتائج ملموسة مع إضافات Copilot. فعلى سبيل المثال، وصلت Jamf إلى أكثر من 70% من معدل الاعتماد. وخفّضت Mercari تذاكر تكنولوجيا المعلومات بنسبة 74%. وحلّت Hearst أكثر من 50% من مشكلات الدعم. وتُظهر هذه الأرقام كيف تُحدث ميزة الكود الاحترافي تحولًا في العمليات التجارية.
بنية Azure Functions

التصميم الخادمي للإضافات
يمكنك استخدام Azure Functions لتشغيل إضافات Copilot الخاصة بك بنهج حقيقي دون خوادم. وهذا يعني أنك لست بحاجة إلى إدارة الخوادم أو القلق بشأن البنية التحتية. تكتب الشيفرة وتنشرها، وتترك للمنصة التعامل مع بقية المهام. تتوسع Azure Functions تلقائيًا بحسب الطلب. إذا تلقّت إضافتك عددًا كبيرًا من الطلبات، ينشئ النظام مثيلات إضافية للتعامل مع الحمل. وعندما ينخفض الطلب، يقلّص الموارد لتوفير التكاليف.
نموذج Flex Consumption
يغيّر نموذج Flex Consumption طريقة استخدامك لموارد السحابة. يمكنك توسيع نطاق كل دالة بشكل مستقل. وهذا يعني استخدامًا أفضل للموارد واستجابة أسرع. يمكنك ضبط أحجام المثيلات وإعدادات التزامن لتتناسب مع حمل العمل لديك. تُبقي ميزة 'always ready' المثيلات قيد التشغيل، فتستجيب إضافاتك فورًا.
تشمل الميزات المهمة لنموذج Flex Consumption: التوسيع على مستوى المثيل، وتحديد حجم المثيلات حسب الحاجة، والمثيلات النشطة المُهيّأة مسبقًا للقضاء على زمن الانطلاق البارد (Cold Start)، والربط بشبكة VNet بأقل قدر من الأعباء.
OpenAPI وأنماط التكامل
يمكنك ربط Azure Functions بالأنظمة الخارجية باستخدام OpenAPI. يصف OpenAPI واجهة برمجة التطبيقات الخاصة بك بطريقة قياسية، بحيث تفهم الأدوات والخدمات الأخرى كيفية استدعاء دوالك. وهذا يجعل التكامل أسهل وأكثر موثوقية. يمكنك أيضًا نشر Azure API Management كبوابة آمنة للتحكم في حركة المرور، ومعالجة تحديد المعدل، والتحقق من هوية الطلبات الواردة قبل أن تصل إلى نقاط نهاية الدوال.
إعداد تطوير الإضافات
المتطلبات الأساسية والأدوات للمطورين
قبل أن تبدأ ببناء الإضافات، تحتاج إلى الأدوات والبيئة المناسبة. ينبغي أن تثبّت Visual Studio Code على جهازك مع امتداد Azure Functions. تأكد من امتلاكك اشتراكًا نشطًا في Azure، وAzure Functions Core Tools، وبيئات تشغيل اللغات مثل .NET وPython وNode.js. ويتيح لك استخدام Azurite كمحاكٍ محليّ للتخزين اختبار مشغّلات التخزين وقوائم الانتظار بأمان، دون تشغيل بيئات سحابية.
إنشاء Azure Functions
يمكنك إنشاء Azure Functions للتعامل مع مهام مختلفة في إضافتك. أبقِ دوالك صغيرة ومركّزة. يحسّن هذا النهج قابلية التوسع ويجعل الصيانة أسهل. اختر مشغّلات HTTP للتكامل المباشر مع إضافات Copilot، واحرص دائمًا على إنشاء خط أنابيب نشر للبنية التحتية ككود للحفاظ على تطابق البيئات.
أفضل ممارسات الاختبار المحلي
ينبغي أن تختبر دوالك محليًا قبل نشرها. استخدم Postman للتحقق من عمل واجهات برمجة التطبيقات كما هو متوقع. تحقّق من توفر بيانات وصف الإضافة الوصفية على http://localhost:7071/.well-known/ai-plugin.json، وتأكد من أن مخطط OpenAPI معروض بشكل صحيح، وتحقّق من الأصول مثل شعار تطبيقك.
تكامل إضافات Copilot

البيان ومخطط واجهة البرمجة
تبدأ ببناء الوكلاء لـ Microsoft 365 Copilot بتعريف بيان ومخطط لواجهة برمجة التطبيقات. يخبر البيان Copilot بما تستطيع إضافتك فعله. تستخدم Microsoft 365 Agents Toolkit لاختيار وكيل تصريحي، وإضافة إجراء، وضبط معلمات مصادقة OAuth الخاصة بك.
يستخدم مخطط واجهة البرمجة OpenAPI لوصف نقاط النهاية. يعمل هذا المخطط كعقد بين إضافتك وCopilot. يسرد نقاط النهاية والمعلمات التي تقبلها والقيم التي تعيدها. يساعد هذا الإعداد Copilot على فهم كيفية التفاعل مع إضافتك بأمان وبشكل متوقع.
ربط Azure Functions
تربط Azure Functions بإضافتك عبر إنشاء مشاريع داخل Azure AI Foundry وCopilot Studio. وبتعيين تعريف OpenAPI لدالة Azure الخاصة بك إلى إجراءات Copilot Studio، تربط مدخلات المستخدم بلغة طبيعية مباشرة بمحرك التنفيذ المخصص بدون خوادم.
معالجة الطلبات والاستجابات
عندما يُدخل المستخدم مطالبة في Microsoft 365 Copilot، تعالج المنصة المدخل مسبقًا. وقد تصل إلى Microsoft Graph أو منصات أخرى إذا كان ذلك مفعّلًا. يرسل Copilot المطالبة المستندة إلى البيانات إلى نموذج اللغة الكبير LLM، الذي يولّد استجابة ذات صلة بالسياق. تعالج دالة Azure حمولة التنفيذ، وتعيد البيانات المنظمة، ويعرضها Copilot بسلاسة في واجهة المستخدم النهائي.
البيانات والأمان لمطوري الشيفرة الاحترافية
إدارة الحالة
يجب أن تدير الحالة بعناية عند بناء إضافات Copilot باستخدام Azure Functions. يعمل التصميم عديم الحالة (Stateless) بشكل أفضل في معظم السيناريوهات. ينبغي أن تعالج كل دالة الطلبات بشكل مستقل. وعندما يكون تخزين الحالة ضروريًا، استخدم خدمات آمنة وقابلة للتوسع مثل Azure Table Storage أو Cosmos DB أو Azure SQL Database. شفّر دائمًا البيانات الحساسة، واستخدم الهويات المُدارة بدلًا من سلاسل الاتصال المكتوبة في الشيفرة.
تأمين البيانات ونقاط النهاية
يجب أن تحمي بياناتك ونقاط النهاية من الوصول غير المصرح به. توفر Azure Functions عدداً من ميزات الأمان المدمجة. فرض استخدام HTTPS على جميع حركات المرور، واشترط التحقق من مفتاح API أو الرمز المميز، وشغّل الدوال داخل شبكة افتراضية عبر تكامل VNet، ووجّه حركة المرور عبر Azure API Management.
الامتثال والخصوصية
يجب أن تلتزم بمعايير صارمة للامتثال والخصوصية عند دمج Copilot Plugins مع الأنظمة المؤسسية. وبغض النظر عما إذا كانت مؤسستك تخضع للائحة GDPR أو HIPAA أو SOX أو CCPA، يجب أن يسجّل كود الخلفية عملياتك بشكل آمن، وأن يُخفي الخصائص الحساسة، وأن يحافظ على سجلات تدقيق دقيقة وسليمة.
الأداء وقابلية التوسع في Azure
تخفيف تأثير البدء البارد
عند نشر Azure Functions لصالح Copilot Plugins، تريد أن تستجيب حلولك بسرعة في كل مرة. يمكن أن تُبطئ عمليات البدء البارد عمل الplugin، خاصةً إذا لم تُشغَّل الدالة لفترة. خفّف من تأثير البدء البارد عبر الاستفادة من خطط الاستضافة Flex Consumption أو Premium، والحفاظ على كود التهيئة خفيفاً، واستخدام روتينات ping دورية للإبقاء على المثيلات نشطة.
المراقبة والتشخيص
تحتاج إلى مراقبة Azure Functions للتأكد من أدائها الجيد وموثوقيتها. يمنحك Application Insights التابع لـ Azure Monitor رؤية موحدة لعمليات نشر Copilot Plugin. يمكنك تتبع أداء التنفيذ، وتتبع الاعتماديات، وإعداد تنبيهات تشخيصية، وحل أخطاء وقت التشغيل بسرعة.
التوسع لأحمال العمل المؤسسية
تتوسع Azure Functions تلقائياً للتعامل مع أحمال العمل الكبيرة. يمكنك تصميم الـ plugins الخاصة بك بهندسة مفصولة (decoupled)، مما يسهّل إضافة المكونات أو إزالتها عند الحاجة. كما تدعم Azure Functions المعالجة الفورية والمعالجة غير المتزامنة، ما يتيح لك التعامل مع تزامن هائل خلال ساعات الذروة في المؤسسة.
أنماط متقدمة وأفضل الممارسات
تصميم الدوال بشكل نمطي
يمكنك تسهيل إدارة Copilot Plugins الخاصة بك عبر تصميم الدوال بشكل نمطي. يقسّم هذا النهج الكود إلى أجزاء صغيرة ومركّزة. تؤدي كل دالة مهمة واحدة بإتقان. وعند استخدام التصميم النمطي، تساعد Copilot على توليد كود أنظف وأكثر قابلية للتنبؤ، مع تبسيط استراتيجيات اختبار الوحدات الخاصة بك.
معالجة الأخطاء والمرونة
بناء plugins مرنة يعني التخطيط لاحتمالية حدوث الأخطاء. طبّق معالجة قوية لمهلات الانتظار، واسترداداً سلساً من فشل واجهات API، واستراتيجيات للنجاح الجزئي، وسياسات إعادة محاولة بتأخير أُسّي (exponential backoff)، ورسائل خطأ واضحة للمستخدم للحفاظ على استمرارية سلامة سير العمل.
الإصدارات والنشر
يجب أن تدير الإصدارات وعمليات النشر بعناية للحفاظ على استقرار Copilot Plugins الخاصة بك. راجع دائماً الكود المولَّد بالذكاء الاصطناعي للتحقق من صحته، ولا تُضف أبداً أسرار التطبيقات إلى مستودعات المصدر، ونفّذ الإصدار الدلالي المنظّم (semantic versioning) لنقاط نهاية API وملفات بيان الـ plugins.
أمثلة عملية للمطورين
مثال على Azure Function Plugin
يتضمن بناء مثال على Azure Function Plugin إنشاء دالة خفيفة تعمل بمشغّل HTTP ومزوّدة بتعليقات بيانات OpenAPI الوصفية. يتيح لك ذلك الاستجابة فوراً لعمليات webhook الآلية، وعمليات البحث عن البيانات، أو طلبات الإشعارات المؤسسية.
مثال تكامل شامل من البداية إلى النهاية
بالاستناد إلى مثال تكامل واقعي، يمكنك ربط نظام المخزون المؤسسي أو قاعدة بيانات سجلات العملاء مباشرةً بتجربة محادثة Copilot في Teams. يتيح ذلك استرجاع البيانات وتعديلها في الوقت الفعلي دون التفريط في متطلبات الأمان المؤسسي.
التصحيح واستكشاف الأخطاء وإصلاحها
تحتاج إلى مهارات قوية في التصحيح واستكشاف الأخطاء لإبقاء plugins الخاصة بك تعمل بسلاسة. يمكن لـ GitHub Copilot في Visual Studio مساعدتك على حل المشكلات بشكل أسرع، وفحص سجلات التتبع، وتفسير الاستثناءات، والتحقق من صحة هياكل الكود غير المتزامن المعقدة.
المزالق الشائعة والحلول
أخطاء الإعداد الأمني
تجنّب أخطاء الإعداد الشائعة مثل كشف نقاط نهاية HTTP دون رموز مصادقة، أو ترك سلاسل الاتصال داخل ملفات الكود، أو إهمال قواعد جدار الحماية الشبكية المناسبة. اعتمد دائماً على Azure Key Vault والهويات المُدارة (Managed Identities).
اختناقات الأداء
يمكن أن تُبطئ اختناقات الأداء عمل plugins الخاصة بك وتُحبط المستخدمين. امنع بطء أوقات البدء عبر تقليل التهيئات الثابتة الثقيلة، وتحسين تبعيات الحزم، والانتقال إلى خطط استضافة أكثر استجابة عند ارتفاع التزامن.
تحديات التكامل
تنشأ تحديات التكامل غالباً عندما تتغير واجهات API التابعة لجهات خارجية بشكل غير متوقع أو تنحرف مخططات البيانات. طبّق مرشحات تحقق صارمة، وفحوصات قوية لمخطط JSON، ورسائل احتياطية واضحة للأخطاء لحماية سير عمل الـ plugins.
التوصيات القابلة للتنفيذ
قائمة التحقق من البنية
راجع هذه القائمة قبل نشر الإضافة التالية للإنتاج:
- حدِّد أهدافك التجارية ومتطلبات الأتمتة بوضوح.
- اختر المشغِّلات المُحسَّنة (مثل HTTP أو Event Grid).
- حافظ على تقسيم الكود بشكل معياري ونظيف.
- فرض استخدام الهويات المُدارة (Managed Identities) عبر جميع خدمات Azure.
- مركزِ الأسرار داخل Azure Key Vault.
- ألزِم باستخدام HTTPS وقنوات TLS الآمنة.
- اضبط القياس عن بُعد باستخدام Application Insights.
- ادمج بوابات API Management.
- نفِّذ بروتوكولات الاختبار المحلي الشاملة.
- انشر مواصفات OpenAPI نظيفة ومُدارة بالإصدارات.
مصادر تعلم إضافية
عمِّق خبرتك من خلال مراجعة وثائق Microsoft الرسمية، واستكشاف مستودعات GitHub التي تضم أمثلة من المجتمع، ومتابعة الدروس التعليمية المرحلية للمطورين.
تحصل على ميزة المطوِّرين المحترفين عندما تستخدم Azure Functions وإضافات Copilot لأتمتة المؤسسات. يتيح لك Microsoft 365 Copilot بناء تطبيقات مدعومة بالذكاء الاصطناعي تعزز إنتاجية المؤسسة بشكل ملحوظ. ومن خلال الجمع بين منطق خلفي بدون خادم ومخصص وتنسيق قوي للذكاء الاصطناعي، يمكن للمطورين تجاوز قيود بيئات التطوير منخفضة الشيفرة وتقديم حلول آمنة وقابلة للتوسع بدرجة عالية. استمع إلى الحلقة ذات الصلة لدينا، Build Microsoft Copilot Plugins with Azure Functions، لمواصلة إتقان تطوير السحابة الحديثة.
الأسئلة المتداولة
ما هي إضافات Copilot؟
إضافات Copilot هي امتدادات تبنيها لإضافة ميزات جديدة إلى Microsoft 365 Copilot. تستخدمها لربط Copilot بالبيانات الخارجية وواجهات API أو بالمنطق المخصص، لأتمتة مهام الأعمال المعقدة.
لماذا ينبغي أن أستخدم Azure Functions مع إضافات Copilot؟
تتيح لك Azure Functions تشغيل الشيفرة في السحابة دون إدارة الخوادم. يمكنك توسيع نطاق الإضافات بسهولة، والتعامل مع التزامن العالي، وتأمين بيانات المؤسسة بفعالية.
كيف أؤمّن نقاط نهاية إضافات Copilot؟
تؤمّن نقاط النهاية بفرض استخدام HTTPS، واستخدام الهويات المُدارة، والاستفادة من Azure API Management، وتخزين الأسرار بأمان داخل Azure Key Vault.
هل يمكنني اختبار الإضافات محلياً قبل النشر؟
نعم، يمكنك اختبار الإضافات على جهازك المحلي باستخدام Visual Studio Code وPostman ومحاكي التخزين Azurite، للتحقق من عملها قبل دفع الشيفرة إلى Azure.
ما لغات البرمجة التي يمكنني استخدامها مع Azure Functions؟
يمكنك كتابة Azure Functions بلغات C# وJavaScript وTypeScript وPython وPowerShell أو Java، بحسب الخلفية التطويرية لفريقك.
كيف أتعامل مع الأخطاء في الإضافات؟
طبِّق التسجيل المنظم، ومنطق إعادة المحاولة مع التراجع الأسي (exponential backoff)، ورسائل بديلة سلسة عند الفشل، والمراقبة الفورية عبر Application Insights لتشخيص الأخطاء ومعالجتها بسرعة.
ما هي خطة Flex Consumption؟
تمنحك خطة Flex Consumption تحكماً متقدماً في توسيع نطاق الخدمات بدون خادم، وفي حجم المثيلات، والمثيلات النشطة المُسخَّنة مسبقاً، للقضاء على زمن الإقلاع البارد.
أين أجد مزيداً من المصادر لتعلم إضافات Copilot؟
زر Microsoft Docs وعينات GitHub Copilot والدروس التعليمية الرسمية للمطورين للوصول إلى الأدلة والقوالب النموذجية ونقاشات المجتمع.
🎧 استمع إلى هذه الحلقة
هل تريد شرحاً عملياً لموضوع Build Microsoft Copilot Plugins with Azure Functions؟ تشرح هذه الحلقة الموضوع بلغة واضحة وتبيّن لماذا يهم Microsoft 365 وAzure وPower Platform والأمان والذكاء الاصطناعي والعمل الحديث.
استمع إلى هذه الحلقة إذا كنت تريد:
- فهم المفاهيم الأساسية وراء Build Microsoft Copilot Plugins with Azure Functions
- معرفة كيف يتناسب هذا الموضوع مع النظام البيئي الأوسع لتقنيات Microsoft
- معرفة أين يمكن أن يُحدث قيمة عملية لمؤسستك
قد تستمتع أيضاً بهذه الحلقات ذات الصلة من M365 FM:
- Build Custom Microsoft 365 Copilot Plugins
- كيفية بناء وكيل Microsoft Copilot في Fabric
- بناء قوى عاملة وكيلية مع Microsoft Copilot خلال 30 يومًا
- بناء ضوابط حماية آمنة لـ Microsoft 365 Copilot
- بناء Copilot متعدد الوكلاء قابل للتدقيق في Microsoft 365
اكتشف المزيد من الأحاديث العملية حول Microsoft على M365 FM.
آخر مراجعة: يوليو 2026.
لمن يُنصح بالاستماع
هذه الحلقة موجّهة إلى مسؤولي Microsoft والمهندسين المعماريين والمطوّرين وخبراء الأمن ومسؤولي الأعمال الذين يحتاجون إلى أساس عملي قبل اتخاذ قرارات التنفيذ أو التشغيل أو الحوكمة.
🎧 استمع أيضًا إلى
- Azure Resource Manager — خطوة تالية وثيقة الصلة لتوسيع نطاق هذا الموضوع.
- Infrastructure as Code — خطوة تالية وثيقة الصلة لتوسيع نطاق هذا الموضوع.
- Azure Policy — خطوة تالية وثيقة الصلة لتوسيع نطاق هذا الموضوع.