▲ جلسة المجتمع: أطلق منتجك وتحقق من نجاحه بشكل أسرع باستخدام PostHog + v0

VVercel
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00[صوت صامت]
00:00:30[صوت صامت]
00:01:00[صوت صامت]
00:01:29مرحباً بالجميع.
00:01:32أهلاً بكم في جلسة مجتمع Versailles لهذا الأسبوع.
00:01:36نحن متحمسون جداً لوجودكم معنا.
00:01:41من الرائع حقاً تقديم هذه الجلسات المباشرة لأنني أشعر أنني لم
00:01:44أقدمها منذ فترة طويلة.
00:01:46لذا، مرحباً بالجميع.
00:01:47[ضحك] إذا كانت هذه هي المرة الأولى لكم في إحدى جلساتنا المجتمعية،
00:01:53فأنا بولين نافاس من فريق المجتمع هنا في Versailles.
00:01:57ربما رأيتموني في المساحات المجتمعية على منصتنا الخاصة
00:02:03[www.versailles.com](https://www.google.com/search?q=https://www.versailles.com)، أو ربما على X أو LinkedIn، أجيب على الأسئلة
00:02:08وأتفاعل مع المجتمع لأفهم حقاً ما الذي تبنونه جميعاً
00:02:12على Versailles.
00:02:13هذه دائماً فرصة للتواصل مع مجتمعنا،
00:02:18وعملائنا، ومستخدمينا بشكل مباشر.
00:02:22رائع، من المذهل رؤية هذا العدد الكبير منكم هنا بالفعل.
00:02:25أرى تحية مساء الخير من آدم في الدردشة.
00:02:29أهلاً، أهلاً، أهلاً.
00:02:31لذا، اتركوا رسالة في الدردشة وأخبرونا من أين تتابعوننا اليوم.
00:02:36إذا كنتم تشاهدون هذا على X أو YouTube أو LinkedIn
00:02:39وترغبون في الانضمام للدردشة المباشرة، توجهوا إلى [community.versailles.com/live](https://www.google.com/search?q=https://community.versailles.com/live).
00:02:46ستجدون الجلسة في الأعلى تماماً، ضعوا تعليقاً في الدردشة.
00:02:53بالنسبة لجلسة اليوم، أنا متحمسة جداً كلما كانت لدينا جلسات
00:02:58تكامل متجر Versailles، لأنه من الرائع رؤية ما
00:03:03يمكنكم بناؤه فوق Versailles باستخدام عمليات التكامل الخاصة بنا.
00:03:07اليوم سنتحدث مع Posthog.
00:03:11وإذا لم تصادفوهم من قبل، فالاختصار هو أن Posthog
00:03:16عبارة عن منصة مفتوحة المصدر لتحليلات المنتجات.
00:03:19يمكنكم اعتبارها أداة لعلامات الميزات، واختبارات A/B، وتتبع الأحداث،
00:03:25وببساطة كل الأدوات التي تحتاجونها لمساعدتكم في فهم ما يحدث فعلياً
00:03:29عندما يستخدم الناس منتجكم.
00:03:31ما يجعل جلسة اليوم مثيرة للغاية هو أن Posthog الآن
00:03:36يتكامل مباشرة مع vZero.
00:03:38هذا يعني أنه يمكنك الانتقال من فكرة إلى تجربة حية دون الحاجة
00:03:43لمغادرة أداة البناء الخاصة بك.
00:03:45لذا لا مزيد من “أطلق المنتج ثم ابحث عن التحليلات لاحقاً”.
00:03:50يمكنك إعداد علامات الميزات، وإجراء الاختبارات، وتتبع تلك الأحداث المخصصة
00:03:55كجزء من عملية البناء نفسها.
00:03:58سأتوقف عن الكلام، ولكن مرحباً بالجميع، أرى الكثير منكم ينضم للدردشة هنا.
00:04:06جميل.
00:04:06أخبرونا من أين تتابعوننا يا رفاق.
00:04:09رائع.
00:04:10بدون مزيد من التأخير، يسعدني الترحيب بضيفنا، بروكر، من Posthog.
00:04:16أهلاً بروكر.
00:04:17- مرحباً.
00:04:17سعيد بوجودي هنا.
00:04:19نعم، كما قالت بولين، اسمي بروكر.
00:04:21أنا مهندس منتجات في فريق النمو.
00:04:25وللبدء، سأخبركم قليلاً عما تقدمه Posthog،
00:04:30ولماذا قد ترغبون في استخدام شيء مثل Posthog في vZero.
00:04:34ثم سنستعرض بعض حالات الاستخدام في vZero، في Vercel وvZero.
00:04:41سأقوم بعرض تجريبي مباشر.
00:04:42حيث سنقوم فعلياً بتنفيذ بعض حالات الاستخدام.
00:04:46الحالتان اللتان أريد تغطيتهما بشكل خاص، حسناً، سأبدأ
00:04:49بشرح ما هو Posthog، ولماذا قد يهمكم كمستخدمين لـ vZero
00:04:54وVercel.
00:04:56كما تعلمون، تستخدمون vZero، بنيتم أروع تطبيق على الإطلاق، ونشرتموه،
00:05:02وتريدون رؤية كيف يعمل، فكيف تكتشفون ذلك؟
00:05:06كيف تفهمون كيف يستخدم الناس تطبيقكم، وما الذي يعجبهم فيه،
00:05:11وما الذي لا يعجبهم؟
00:05:12وكيف تفهمون متى يحدث خطأ ما؟
00:05:15في كثير من الأحيان، تنشرون تطبيقاً، كما تعلمون، ويعمل بشكل رائع
00:05:19في وضع المعاينة.
00:05:20ربما أجريتم بعض الاختبارات عليه بأنفسكم، ولكن عندما يعمل في بيئة الإنتاج،
00:05:26يواجه بعض المشكلات التي لم تتوقعوها.
00:05:29عندها قد يحدث استثناء (Exception)، وسيكون من المفيد لكم
00:05:33الحصول على رؤية واضحة لذلك، وخاصة جلب تلك الرؤية
00:05:39والسياق إلى vZero، إلى الوكيل (Agent)، حتى يتمكن الوكيل من فهم كل شيء
00:05:45يدور في بيئة الإنتاج وإصلاح المشكلة نيابة عنكم دون الحاجة
00:05:50للتنقل لجمع السياق من أماكن مختلفة، سواء كان ذلك من
00:05:55نظام السجلات، أو نظام الأخطاء، أو محاولة
00:05:59إعادة إنتاج الخطأ بنفسكم والنسخ واللصق من أدوات مطوري Chrome.
00:06:02ليس وكأنني اضطررت لفعل ذلك من قبل.
00:06:04- أعتقد أننا جميعاً فعلنا ذلك.
00:06:07- نعم.
00:06:09لذا، إحدى حالات الاستخدام التي أريد استعراضها هي معالجة الأخطاء.
00:06:13والأخرى هي علامات الميزات واختبارات A/B.
00:06:17لقد استمتعت حقاً بهذا الأسلوب في التطوير.
00:06:23أنت تعمل مع فريقك.
00:06:26وتتحدثون عن ميزة تريدون إضافتها.
00:06:29وربما يكون لديك رأي مختلف عن زميلك في الفريق حول كيفية
00:06:33تنفيذ هذه الميزة.
00:06:34أنا أريد القيام بذلك بهذه الطريقة.
00:06:36وهم يريدون القيام بذلك بتلك الطريقة.
00:06:39إحدى الطرق الرائعة لحل ذلك هي القيام بالأمرين معاً ثم اختبارهما
00:06:42في بيئة الإنتاج ومعرفة أيهما يعطي نتائج أفضل.
00:06:46لذا سنقوم باستعراض ذلك أيضاً.
00:06:48بدون مزيد من اللغو، دعوني أشارك شاشتي.
00:06:51وسأأخذكم عبر العملية كاملة من البداية إلى النهاية.
00:06:55هناك جزء صغير تم إعداده مسبقاً في هذا الحساب.
00:06:58لذا سأنتقل إلى حساب لم أقم بتثبيت Posthog عليه بعد.
00:07:06وأرجو إخباري عندما تظهر شاشتي.
00:07:09- الشاشة واضحة يا بروكر.
00:07:11هيا بنا.
00:07:11- عظيم.
00:07:12حسناً.
00:07:12نحن الآن في Vercel.
00:07:14سنذهب إلى عمليات التكامل وسنبحث عن Posthog.
00:07:18لا أعرف لماذا يقول... أوه، تصفح المتجر.
00:07:21سنذهب إلى تصفح المتجر (Browse Marketplace).
00:07:22سنبحث عن Posthog ونختاره هنا ونضغط على تثبيت (Install).
00:07:29سيسألني عما إذا كنت أريد إنشاء حساب جديد أو الربط بحساب موجود.
00:07:32إذا كان لديك حساب Posthog بالفعل، يمكنك ربطهما.
00:07:35وما سيفعله هذا لي هو... وسنقوم بتثبيته هنا.
00:07:39سيقوم بـ... دعوني فقط... عذراً، لا يمكنني النقر والتحدث في نفس الوقت.
00:07:46لماذا يجب علي إدخال عنوان فواتير؟
00:07:48حسناً.
00:07:49ستملأ هذا النموذج.
00:07:52اضغط متابعة.
00:07:53هذا سيقوم فعلياً بمزامنة... دعوني أريكم ما سيفعله.
00:07:59سيقوم بمزامنة متغيرات البيئة الخاصة بك، بحيث إذا ذهبت إلى الإعدادات...
00:08:06سأذهب إلى النظرة العامة (Overview).
00:08:09أوه، ظننت أنني قمت بتثبيت هذا بالفعل.
00:08:14لنقم بذلك بسرعة.
00:08:15سنقوم بتثبيته لمشروع ما.
00:08:17سأختار المشروع الذي أريد تثبيته فيه.
00:08:20اضغط متابعة.
00:08:22رائع.
00:08:23هذا سيـ... لقد اخترت المشروع.
00:08:25لنرى.
00:08:30عذراً، ظننت أن لدي واحداً هنا.
00:08:32أوه، عرفت ما الأمر.
00:08:33لدي الحساب الخاطئ مفتوح هنا.
00:08:35أعتقد أنني في هذا الحساب.
00:08:37- هذا هو الأفضل، بالمناسبة، استكشاف الأخطاء وتجاوز الخطوات.
00:08:41هذا رائع.
00:08:42- نعم.
00:08:44حسناً، نعم، لقد قمت بتوصيله هنا.
00:08:47ما أردت استعراضه، الأمر الرائع حقاً في هذا التكامل هو أنك
00:08:51لست مضطراً لإدارة متغيرات البيئة بنفسك.
00:08:55إذا كانت لديك خبرة في ذلك، فهو ليس بالأمر الممتع، خاصة عندما تضطر
00:08:59لتدوير مفاتيحك (rotate keys)، وهي فكرة جيدة جداً.
00:09:03تكامل Vercel مع PostHog سيتولى كل ذلك نيابة عنك.
00:09:08كل ما عليك فعله هو النقر خلال عملية التثبيت،
00:09:12التي عرضتها للتو.
00:09:13كما أنه يتعامل مع الفواتير، ولدينا فئة مجانية سخية جداً.
00:09:17لذا نأمل ألا تضطر للتعامل مع ذلك في البداية حتى ينجح
00:09:21منتجك، وعندها سيكون ذلك آخر همومك.
00:09:24ولكن نعم، هذا سيقوم بمزامنة متغيرات البيئة الخاصة بك.
00:09:28الأشياء الرئيسية التي نحتاجها هنا، مضيف PostHog هو... لن أعرض هذه
00:09:33لأنني لا أريد التعرض للانتقاد، لكن المضيف هو مجرد عنوان URL.
00:09:39سيكون شيئاً مثل us.i.posthog.com.
00:09:43مفتاح PostHog هذا هو الجزء المهم، وهو ما سيخبر PostHog،
00:09:48سيعرف مشروعك لدى PostHog.
00:09:50عندما يعمل تطبيقك في بيئة الإنتاج، ويتم الإبلاغ عن الأخطاء والاستخدام
00:09:58وعلامات الميزات إلى PostHog، هذا المفتاح هو ما
00:10:02سيربط منتجك بمشروع PostHog معين.
00:10:07لذا من المفيد جداً إعداد ذلك تلقائياً لك هنا.
00:10:12أي أسئلة حول جانب Vercel؟
00:10:16الأمر بسيط للغاية.
00:10:17لقد شرحت الأمر بسرعة وواجهت بعض المشكلات، فأنا آسف لذلك.
00:10:21لكن ببساطة، تقوم بتثبيته، وربطه بالمشروع، مشروع Vercel الذي تريد
00:10:25استخدامه فيه، وبعدها تنطلق بقوة.
00:10:28هناك أيضاً أدلة لبدء الاستخدام هنا.
00:10:32يمكنك رؤية علامات الميزات الخاصة بك هنا إذا كنت قد أعددتها.
00:10:35ليس لدي أي منها في هذا المشروع بعد، لكن سيكون لدينا بعد دقيقة.
00:10:40- نعم، هذا رائع.
00:10:41كنت سأقول، لا توجد أسئلة حالياً، مما أظن أنه يظهر مدى سلاسة الأمر.
00:10:47لقد سألت في الدردشة، هل جرب أي شخص هذا التكامل من قبل؟
00:10:51إذا فعلتم، فأخبرونا بالتأكيد واسألوا الأسئلة بينما نمضي قدماً.
00:10:54- نعم، ولا تترددوا في المقاطعة.
00:10:58لننتقل إلى العرض التجريبي الآن.
00:10:59لدي تطبيق يعمل.
00:11:01لقد بنيت لعبة صغيرة.
00:11:02تسمى Hog Hop.
00:11:04وهنا لدي PostHog صغير.
00:11:06هناك بعض الحشرات (bugs) التي تركض حوله، وأنا أحاول جمع نقاط البيانات.
00:11:12ماكس يقفز في الأرجاء لجمع نقاط البيانات.
00:11:15لدي خطأ برمجبي (bug).
00:11:16عندما أجمع نقاط بيانات معينة، يتجمد التطبيق تماماً.
00:11:21لا يمكنني فعل أي شيء الآن.
00:11:23لقد واجهت هذا في بيئة الإنتاج، وأحتاج لمساعدة في معرفة ما يحدث.
00:11:28يمكنني، كما قلت سابقاً، فتح أدوات المطور (DevTools).
00:11:32أو يمكنني النظر في سجلات Vercel لمحاولة العثور على الأخطاء.
00:11:41لكن سأريكم كيف أنكم لستم مضطرين لفعل أي من ذلك.
00:11:44وفي v0، يمكنك جمع كل السياق الذي تحتاجه حول الخطأ وإصلاحه
00:11:50مباشرة هناك.
00:11:51أولاً، سأريكم كيف نضيف الـ MCP.
00:11:54في الركن السفلي الأيسر من الدردشة في v0، يوجد زر زائد صغير،
00:12:01وفيه مكان للـ MCPs.
00:12:04ويمكنك ببساطة النقر على إضافة MCP.
00:12:06وPostHog معد كنوع من الـ MCP المسبق الضبط.
00:12:10لقد قمت بتوصيله بالفعل لهذا العرض، لذا لن أقوم بفصله.
00:12:13لكن ستقوم فقط بالنقر على زر الزائد، وسيسألك عن تسجيل الدخول
00:12:18باستخدام حساب PostHog الخاص بك.
00:12:19شيء واحد لم أعرضه وهو أنه عند إنشاء هذا التكامل مع PostHog
00:12:25وVercel، ستحصل على زر “فتح في PostHog”، وهذا سيقوم بتسجيل
00:12:30دخولي إلى PostHog حتى لا أضطر لإدارة بيانات الاعتماد أو أي شيء من هذا القبيل.
00:12:36لقد سجلت الدخول هنا، وبعد ذلك في v0، عندما أريد توصيل الـ MCP،
00:12:42سأنقر فقط للمصادقة، وسيفتح علامة تبويب PostHog لمصادقة
00:12:48الـ MCP.
00:12:50لقد أدركت للتو أنني لم أعرف الـ MCP، وأنا آسف جداً.
00:12:52الـ MCP، أو Model Context Protocol، هو ببساطة وسيلة لجمع المعلومات
00:12:58لمنح الوكيل، وكيل v0، القدرة على جمع المعلومات أو
00:13:03استدعاء الوظائف المرتبطة بهذا الحساب.
00:13:07في هذه الحالة، نحن نقول: “يا v0، إذا كنت بحاجة لطرح أي أسئلة أو إدارة
00:13:14الأشياء في PostHog،” وهذا... إنه منتج غني جداً بالمميزات،
00:13:19الـ MCP الخاص بـ PostHog، لذا يمكنك القيام بالكثير هناك.
00:13:24سأعرض لكم في الواقع... لدينا وثائق... وثائق PostHog، بروتوكول سياق النموذج.
00:13:29هذا يوضح لكم نوعاً ما كل الأشياء التي يمكنك القيام بها.
00:13:33لا تشعروا بالارتباك الشديد من هذه القائمة.
00:13:35كل هذا محمل بالفعل في الوكيل الذكي.
00:13:36لذا يمكنك في الواقع أن تسأل، مثل، "ماذا يمكنني أن أفعل باستخدام PostHog MCP؟"
00:13:42وسوف يخبرك.
00:13:43وتأكد فقط من تفعيل هذا المفتاح الصغير هنا.
00:13:50ونعم، ما أردت إظهاره هنا هو، مرة أخرى،
00:13:55عندما أحاول جمع نقطة البيانات الثالثة هذه، أواجه خطأً برمجياً.
00:14:00إنه يتجمد فحسب.
00:14:01لذا سأصف ذلك هنا.
00:14:04لقد أخبرني بكل هذه الأشياء التي يمكنني فعلها باستخدام PostHog MCP.
00:14:08لذا سأصف ذلك للوكيل.
00:14:10سأقول، "عندما أجمع نقاط البيانات باستخدام max، فإنه يتجمد أحياناً.
00:14:23هل يمكنك العثور على الخطأ باستخدام أخطاء PostHog MCP وإصلاحه لي؟"
00:14:35وبينما يقوم بذلك، سأقوم فقط باستعراض لوحة تحكم PostHog.
00:14:39لذا عندما أكون في PostHog هنا، يمكنني الذهاب إلى التطبيقات ثم تتبع الأخطاء.
00:14:47وكما قلت، PostHog يقوم بالكثير من الأشياء.
00:14:50لذا هناك الكثير من الميزات التي يمكنك استكشافها هنا.
00:14:55نحن نركز فقط على ميزتين لإعطائكم فكرة ملموسة عما يمكنك القيام به.
00:15:01لذا إذا كنت مهتماً بالجانب التقني وتريد رؤية ما يحدث فعلياً
00:15:04مع هذه الأخطاء، يمكنك فتح هذا ورؤية، كما تعلم، يمكنك، مثلاً،
00:15:11النقر داخل الخطأ ورؤية تتبع المكدس (stack trace).
00:15:14يمكنك معرفة عدد المرات التي تكرر فيها.
00:15:17وماذا يمكنك أن ترى أيضاً؟
00:15:20مشاكل مماثلة.
00:15:21دعونا نرى ما إذا كان هذا لا يزال يعمل.
00:15:25أوه، لقد تم إصلاحه.
00:15:26حسناً. سأريكم شيئاً آخر في المرة القادمة التي نضطر فيها لانتظار الوكيل.
00:15:30هذا يشير إلى أنه تم الإصلاح.
00:15:32دعوني أرى ما إذا كان بإمكاني النشر أو اختبار ذلك في المعاينة.
00:15:37لنقم بذلك فحسب.
00:15:39تمام.
00:15:39سأتحرك قليلاً وأجمع شيئاً ما.
00:15:41أوه، إنه يعمل.
00:15:42رائع. الأمر بهذه السهولة.
00:15:46كان لدي خطأ برمجياً.
00:15:48أخبرته بما رأيته يحدث.
00:15:51حتى لو لم يكن لديك الكثير من المعلومات حول كيفية إعادة إنتاجه،
00:15:55يمكنك إعطاؤه معلومات أقل، فقط أخبره بالبحث عن الأخطاء.
00:15:59لذا يمكنني القول، هل هناك أخطاء أخرى في PostHog MCP يجب علينا إصلاحها؟
00:16:09سأقول "منذ اليوم" فقط لكي لا نغرق في التاريخ القديم.
00:16:12الشيء الآخر الذي أردت إظهاره هو ميزة إعادة تشغيل الجلسة (session replay)، وهي ميزة رائعة حقاً.
00:16:21حيث يمكنني فعلياً رؤية -- أوه، لا يبدو ذلك جيداً هنا.
00:16:27أوه، هذا مثير للاهتمام.
00:16:28حسناً. سنتجاوز ذلك، لكنني سأبحث في الأمر.
00:16:33عادةً، ستتمكن من رؤية ما يفعله الأشخاص فعلياً.
00:16:36أعتقد أنه ربما بسبب التكنولوجيا التي نستخدمها في هذه اللعبة،
00:16:42فإن التسجيل يتعطل.
00:16:44ولكن ربما في أنواع أخرى من التطبيقات، أو بالتأكيد في أنواع أخرى.
00:16:50لم أرَ هذا يحدث في أي تطبيق آخر.
00:16:51لذا يمكنك أن ترى كيف يستخدم الناس تطبيقك والمشاكل التي قد يواجهونها.
00:16:58ومجرد رؤية ذلك الفيديو الحي لما يفعلونه يساعد حقاً في فهم السياق.
00:17:04ويمنحك معلومات أكثر بكثير من محاولة النظر
00:17:08إلى النشاط أو الأحداث أو أشياء من هذا القبيل، أو السجلات.
00:17:13حسناً، لدينا بضعة أخطاء أخرى.
00:17:16وهذا شيء أريد التأكيد عليه أيضاً.
00:17:18أنت كمطور قد لا تعرف كل الأشياء التي يواجهها الناس في بيئة التشغيل الفعلية.
00:17:25قد لا يقومون بإبلاغك بها.
00:17:26وقد لا تواجهها أنت بنفسك.
00:17:28لذا فإن امتلاك رؤية واضحة لكل الأخطاء يمكن أن يكون مفيداً جداً لك.
00:17:34في هذه الحالة، لدينا بضعة أخطاء أخرى نواجهها -- أو نجري فيها.
00:17:40أوه، يبدو أنه تم إصلاح كليهما.
00:17:43رائع. أي أسئلة حول ذلك؟
00:17:47وأريد الانتقال إلى ميزة علامات الميزات (feature flags) هنا.
00:17:51>> لا توجد أسئلة في الدردشة حالياً، ولكن هناك تعليقات.
00:17:54لقد قال أحدهم في الدردشة أن لديهم الكثير من الأدوات في مكان واحد، ونسخة مجانية سخية للغاية
00:18:01وتجربة مطور (DX) مذهلة في منصتهم، وهو أمر يسعدنا دائماً سماعه.
00:18:05كان لدي سؤال في الواقع، وأنا متأكد من أنك ستتطرق إليه في هذا القسم التالي.
00:18:11ولكن بعيداً عن الأخطاء، ما هي بعض الأشياء الأخرى عالية القيمة التي يمكن لـ PostHog MCP القيام بها
00:18:19لمستخدمي v0 والتي تعتقد أن الناس يتغافلون عنها؟
00:18:23>> نعم. في رأيي، علامات الميزات والتجارب هي واحدة من أكثر الأشياء فائدة.
00:18:30أعتقد أن هناك الكثير من الفرق والتطبيقات التي لا تستخدمها بينما ينبغي عليها ذلك.
00:18:38لذا سأعرض ذلك سريعاً.
00:18:40>> نعم، بكل تأكيد.
00:18:41تمهيد مثالي.
00:18:42>> نعم. لنضف -- في هذه الحالة، لدي هذه اللعبة.
00:18:46ليس لدي طريقة الآن للقضاء على الحشرات.
00:18:48هناك حشرة على وجه الخصوص تتحرك ذهاباً وإياباً على هذه المنصة الصغيرة.
00:18:52وأواجه صعوبة حقيقية في الحصول على نقطة البيانات تلك.
00:18:55ومستخدمي يواجهون نفس المشكلة أيضاً.
00:18:57لذا أريد بناء بعض الوظائف الإضافية.
00:19:01لذا دعونا نبني شيئاً مثل منح القنفذ القدرة على إطلاق الليزر من عينيه.
00:19:16لكنني أريد اختبار ذلك مقابل وظيفة مختلفة.
00:19:22أفكر في الليزر.
00:19:24أعتقد أنه يمكننا القيام بشيء كلاسيكي مثل ماريو.
00:19:27أيضاً -- حسناً، لنبدأ بإنشاء علامة ميزة متعددة المتغيرات مع الليزر كأحد المتغيرات
00:19:43والقدرة على القفز فوق الحشرات لقتلها كمتغير آخر.
00:19:52وبعد ذلك -- هذا سيقوم بـ -- ما أريد إظهاره هنا هو بضعة أشياء.
00:19:59إن MCP قوي جداً.
00:20:02لذا يمكنك استخدام MCP لمعظم الأشياء التي تستخدم لوحة التحكم من أجلها.
00:20:07يمكنك القيام بذلك في لوحة التحكم.
00:20:10سأريكم إذا ذهبنا إلى التطبيقات.
00:20:17ثم علامة الميزة.
00:20:21يمكنك أيضاً -- معظم الأشياء التي يمكنك فعلها في MCP يمكنك فعلها في هذه الدردشة أيضاً.
00:20:25لذا إذا استخدمت -- سأفتح تبويباً جديداً هنا.
00:20:29أوه، لا توجد طريقة للدردشة في هذا التبويب.
00:20:33أوبس.
00:20:34لقد فقدته.
00:20:37لذا سأفتح دردشة جديدة، ها هي.
00:20:39يمكنني إعطاؤه طلباً مشابهاً.
00:20:43الفرق الوحيد هو أن هذه الدردشة لن تملك القدرة على تحديث كود v0 الخاص بي، بالطبع.
00:20:48يجب أن أقبل التغييرات.
00:20:52لكن لا يزال بإمكاني استخدامه لإدارة علامات الميزات.
00:20:55أو هنا يمكنني إنشاء علامة ميزة، كما تعلمون، باستخدام -- ومن المفترض أن يتم إنشاؤها
00:21:01الآن.
00:21:02ها نحن ذا.
00:21:03تجربة، إنشاء.
00:21:04كان بإمكاني إنشاؤها عبر واجهة المستخدم.
00:21:07أنا أوضح كيفية القيام بذلك عبر وكيل v0 باستخدام MCP لأنني أجد أنه كلما
00:21:16تمكنت من فعل المزيد في وكيلي مثل v0، كان ذلك أفضل.
00:21:20لا أريد أن أضطر لقضاء وقتي في النقر هنا وهناك لتعلم واجهة مستخدم جديدة.
00:21:24على الرغم من أن لوحة التحكم رائعة جداً وأنا أحب هذه الواجهة، إلا أنني أفضل قضاء
00:21:31مزيد من الوقت في البناء داخل v0 مباشرة.
00:21:35جميل.
00:21:36لقد قام بإعداد هذه التجربة.
00:21:39وقمنا بإعداد بعض المقاييس.
00:21:40هذا هو أحد المفاتيح للتجربة -- أو المفتاح الأساسي للتجربة هو: ما هي
00:21:47الفرضية التي تحاول اختبارها؟
00:21:49لقد تقدم v0 وقام بوضع فرضية لنا.
00:21:53هذا أمر رائع.
00:21:55قد أرغب في قراءة هذا وتحديثه.
00:21:58هذا يقول اختبار أيهما يؤدي إلى معدلات إكمال أفضل للعبة.
00:22:02هذا جيد.
00:22:03ربما يكون هدفي هو معدلات إكمال اللعبة.
00:22:05ولكن ربما يكون هدفي هو مجرد الوقت المستغرق في لعب اللعبة.
00:22:09أعتقد أن معدل إكمال اللعبة منطقي نوعاً ما.
00:22:13لذا قام بتعيين ذلك كمقياس أساسي.
00:22:16لذا ستبدأ أولاً بوضع فرضية.
00:22:18ما الذي أقوم باختباره؟
00:22:19في هذه الحالة، أختبر هل "السحق" أكثر جاذبية أم "الليزر" أكثر جاذبية؟
00:22:26ثم سنقوم بإعداد المقاييس الأساسية.
00:22:29وهناك أيضاً مفهوم المقاييس الثانوية الذي أعتقد أنه مهم جداً.
00:22:33المقاييس الأساسية ستكون الأهداف الرئيسية التي تريد تحقيقها.
00:22:38ولكن مع أي ميزة تضيفها أو تغيير تجريه، قد تكون هناك نوع من الآثار
00:22:43الثانوية لذلك.
00:22:44في هذه الحالة، ربما يقتلون عدداً أكبر أو أقل من الحشرات في كل جلسة.
00:22:49مثلاً، ربما يكملون اللعبة بمعدل أعلى ولكن يقتلون حشرات أقل.
00:22:52هذا مستبعد على الأرجح.
00:22:53أو، كما تعلمون، عدد الوفيات في كل جلسة هو شيء آخر يجب النظر إليه.
00:22:57لذا في أي وقت تقوم فيه بإعداد تجربة، من المهم التفكير في: ما هو
00:23:02هدفي؟
00:23:03ثم ما هي الأشياء التي قد يتأثر بها هذا، والتي ربما لا تمثل
00:23:09الهدف الأساسي، ولكنني أريد أن أكون على دراية بها أثناء اتخاذ هذا القرار.
00:23:14سؤال سريع هنا، بروكر.
00:23:17إذا قام شخص ما بتعيين مقياس الهدف الخاطئ عن طريق الخطأ في البداية، فما مدى سهولة
00:23:23تعديل ذلك في PostHog مثل تلك التجربة دون فقدان كل شيء على v0؟
00:23:30نعم، يمكنك القيام بذلك إما عبر MCP مرة أخرى أو الدردشة أو في واجهة المستخدم هنا.
00:23:36هناك أيقونة قلم رصاص صغيرة بجوار المقياس.
00:23:39فقط اضغط عليها.
00:23:41وبعد ذلك، لنفترض أنك تريد تغييره من إكمال اللعبة إلى الوقت المستغرق في
00:23:46التطبيق أو شيء من هذا القبيل.
00:23:47ستضغط هنا وتجد حدثاً (event)، أو ربما قررنا
00:23:53أننا نريد في الواقع التحقق مما إذا كانوا يغادرون بمعدل أعلى.
00:23:58لذا يمكنني تغييره إلى "مغادرة الصفحة".
00:24:00وفي هذه الحالة، سأجعل الهدف من ذلك هو تقليل هذا المعدل.
00:24:03لذا أريد أن يغادر الناس الصفحة بمعدل أقل.
00:24:08الأمر بهذه السهولة.
00:24:10يمكنك أيضاً استخدام MCP للقيام بذلك، وهو ما أجده أسهل بكثير شخصياً.
00:24:16ولكن من الجيد رؤية كلتا الطريقتين.
00:24:19نعم.
00:24:20رائع.
00:24:21نعم.
00:24:22وسيقوم بإعادة حساب ذلك.
00:24:23أحياناً ما أواجهه هو، مثلاً، قد أجري تجربة.
00:24:27وأرى النتائج وهذا يساعدني نوعاً ما في إدراك أن لدي سؤالاً آخراً
00:24:32أريد طرحه.
00:24:33كما قلت، أريد تحديث المقاييس التي أتتبعها.
00:24:36هناك أوقات ربما لا يكون لدي فيها حدث أو طريقة لتتبع ذلك بعد.
00:24:43لذا فهذا مكان آخر حيث يمكن لـ MCP أن يكون مفيداً حقاً.
00:24:46يمكنك قول شيء مثل "أضف حدثاً".
00:24:48أحاول التفكير في مثال جيد، مثل، لا أعرف، ربما القفزات.
00:24:53يمكنني أن أضيف "أضف حدثاً في كل مرة يقفز فيها القنفذ".
00:25:02في هذه الحالة، ستحصل فقط على تلك الأحداث بناءً على ماهيتها
00:25:08التي تتبعها، لمعظم الأشياء من هذا القبيل.
00:25:10قد يتم تتبع ذلك فقط من اللحظة التي تضيفه فيها إلى تطبيقك.
00:25:15وفي هذه الحالة، يمكنك تغيير مدة تجربتك لتبدأ من
00:25:21وقت معين.
00:25:22يمكنك أيضاً استهداف -- أوه، آسف.
00:25:24أنا آسف جداً.
00:25:25ولكن إذا قمت بتغيير ذلك في منتصف التجربة، هل هناك نوع من أفضل
00:25:31الممارسات الموصى بها حول ما إذا كان يجب عليك إعادة تشغيل الاختبار أم أنه من الآمن الاستمرار في جمع البيانات
00:25:38في نفس التجربة، إذا كان ذلك منطقياً؟
00:25:40نعم، هذا سؤال جيد.
00:25:42طالما أنك تدرك التغييرات المختلفة التي قد تؤثر على ما
00:25:48تفعله.
00:25:49لا أرى مشكلة في مجرد الاستمرار في نفس التجربة.
00:25:55قد يكون هناك سيناريو حيث توجد تغييرات أخرى تحدث في نفس الوقت
00:25:59والتي قد تؤثر على تجاربك.
00:26:02لذا تريد أن تكون مدركاً حقاً لكل الاختبارات المختلفة التي تجريها،
00:26:06وكيف يمكن أن تؤثر على بعضها البعض.
00:26:09لهذا السبب أشعر بشكل عام، إذا حدث أي شيء، مثل هذه الحالة، فقد أجرينا تجربة متعددة المتغيرات،
00:26:15حيث لدي السحق والليزر، أعتقد أنها فقط وضعت الليزر كمجموعة ضابطة (control).
00:26:20ولكنني قد أريد مجموعة ضابطة تكون مثل "لا سلاح".
00:26:30من المفيد تجميع كل ذلك في تجربة واحدة حتى لا تواجه
00:26:35مشاكل حيث تتنافس التجارب المختلفة مع بعضها البعض.
00:26:38هل هذا منطقي؟
00:26:39نعم، هذا منطقي.
00:26:41نعم.
00:26:42ودعونا نرى أين وصلنا، أوه، لم أضف ذلك إلى قائمة الانتظار.
00:26:45حسنًا، لقد انتهى الأمر.
00:26:47إذًا، لدينا عيون الليزر.
00:26:48دعونا نرى ما سيحدث إذا استخدمنا التطبيق الآن.
00:26:51حسنًا، رائع.
00:26:52لدي ليزر، لكنه لا يقتل الأعداء.
00:26:57هذا محبط.
00:26:58على أي حال، قد تواجهون هذا أيضًا.
00:27:02لم أقم بصياغة الأوامر لـ v0 بشكل فعال.
00:27:05لذا لن نلوم v0 على ذلك.
00:27:07لقد قلت فقط اطلق الليزر من عينيه.
00:27:10لكنني لم أقل اقتل الحشرات بالليزر.
00:27:12لذا يمكنك أيضًا استهداف مستخدمين مختلفين.
00:27:16يمكنني مثلًا استهداف حسابي لميزة السحق.
00:27:23وسنرى ما إذا كان بإمكانه العثور على حسابي.
00:27:26هذا يختبر قدرات العميل والـ MCP لأقصى حد،
00:27:31لكن الـ MCP لديه القدرة على العثور على المستخدم.
00:27:35ومن ثم تحديد نسخة التجربة لهذا المستخدم.
00:27:41ويمكنك استهداف مجموعات مختلفة لنسخ تجريبية مختلفة.
00:27:46فإذا أردت مثلًا أن يحصل الجميع في أستراليا على عيون الليزر،
00:27:51يمكنك فعل ذلك أيضًا.
00:27:53ويبدو أننا نقترب من نهاية وقتنا، أليس كذلك؟
00:27:56لقد نسيت كم من الوقت مضى.
00:27:57نعم، بالفعل.
00:27:58لقد تحققت من ذلك للتو.
00:27:59لكن نعم.
00:28:00حسناً، نعم.
00:28:02يمكنني الاستمرار في هذا.
00:28:03ولكن إذا كانت لديكم أي أسئلة أخرى أو أي شيء لم أغطّه،
00:28:08سيكون من المثير للاهتمام معرفتها.
00:28:09نعم، هناك سؤال آخر وصلنا،
00:28:15بالنسبة لمستخدمي v0 الجدد على مجال التجارب،
00:28:21هل لديكم قائمة مرجعية لتجنب إعداد تجربة “سيئة” أو مضللة؟
00:28:27نعم، هذا... لست متأكداً بنسبة 100%.
00:28:31أعلم أن لدينا أدلة إرشادية.
00:28:32لا أريد محاولة البحث عنها هنا على الهواء مباشرة.
00:28:34لكن يمكنني بالتأكيد تزويدكم بدليل لاحقاً.
00:28:38يمكننا ذلك.
00:28:39نعم، يمكننا بالتأكيد إرفاقه في قسم الموارد في هذه الدردشة.
00:28:43نعم، بكل تأكيد.
00:28:44نعم.
00:28:45وأيضاً يمكنك الاستعانة بالذكاء الاصطناعي، وأشجع الناس على
00:28:50سؤال الدردشة، وتصفح واجهة المستخدم، فهناك الكثير من الأمور المفيدة،
00:28:55مثل “الفرضية” التي ذكرتها، لم تظهر في v0.
00:28:58لذا قد يفيد فتح واجهة المستخدم ورؤية ما هو متاح هناك
00:29:02لتجربته واللعب به.
00:29:05أو حتى سؤال v0، “ما هي الأشياء
00:29:10التي قد تفوتني هنا؟”
00:29:11ما الذي يمكننا فعله أيضاً بهذا؟
00:29:13لذا أشجعكم على استغلال v0 قدر الإمكان لأمور كهذه،
00:29:18أو استخدام PostHog AI كخيار آخر للدردشة داخل PostHog.
00:29:23واو، لم أكن أعلم حتى أن لديكم ذلك.
00:29:26هذا رائع حقاً.
00:29:27أعتقد أنني أسأل هذا في كل جلسة من جلسات التكامل لدينا،
00:29:35ولكن على المدى الطويل، ما الذي تخططون له؟
00:29:36هل هناك أي شيء يمكنك مشاركته معنا؟
00:29:38نعم، نحن نرى مستقبل تطوير البرمجيات والمنتجات كعملية أكثر استقلالية.
00:29:45وأعتقد أن هذا بدأ يحدث بالفعل.
00:29:47لكنني أظن أنه لا يزال هناك طريق لنقطعه.
00:29:53أشياء مثل ما عرضته بخصوص حل الأخطاء،
00:29:59لا أظن أن الوقت سيطول قبل أن يصبح ذلك معياراً في التطبيقات،
00:30:04بأن يكون لدي تطبيق يعمل، وهناك شيء في الخلفية
00:30:09يقوم بإصلاح الأخطاء دون الحاجة لإخباره بذلك،
00:30:15وربما أحصل على تقرير عما حدث. لكن في النهاية،
00:30:20لا أريد أن أضطر لتوجيه الذكاء الاصطناعي للتحقق من الأخطاء،
00:30:24أو تلقي تنبيه في منتصف الليل يوقظني بسبب خطأ ما.
00:30:26أعتقد في المستقبل أن نوعاً من الأنظمة،
00:30:35سواء كانت PostHog أو Vercel أو كلاهما معاً،
00:30:38سوف يقومون بجمع المعلومات، والأخطاء مجرد جزء بسيط.
00:30:43هناك ميزة إعادة تسجيل الجلسات، وتحليلات المنتج، والتجارب،
00:30:49فهل أحتاج حقاً لإنشاء مقاييس مختلفة يدوياً؟
00:30:53كان من المثير للاهتمام هنا رؤية v0
00:30:57وهو يختار بالفعل بعض المقاييس المثيرة للاهتمام لنا.
00:31:00لكن غالباً سيكون لدي عميل يراقب هذه الأمور في المستقبل
00:31:05ويقوم بتحديثات الكود دون الحاجة لإعطائه أوامر بهذه الدقة،
00:31:14سأقوم بالتأكيد بالتوجيه الاستراتيجي،
00:31:19مثل نوع التجربة التي أريدها في لعبتي،
00:31:20وما هي المقاييس التي أستهدفها.
00:31:22ولكن بالنسبة للتفاصيل التقنية الدقيقة،
00:31:26أعتقد أن الكثير منها سيتم إنجازه بشكل مستقل.
00:31:28نعم، تطوير مستقل.
00:31:30نعم.
00:31:31أحب تلك الرؤية لأنها تتماشى تماماً مع كل ما نتحدث عنه
00:31:37في Vercel ومع v0 أيضاً.
00:31:40الأمر كله يتعلق بإغلاق الدائرة من النشر،
00:31:43إلى المراقبة في PostHog، ثم الإصلاح والتكرار تلقائياً.
00:31:49هذا رائع.
00:31:50سؤال أخير قبل أن نختم، لأنني أعلم أن وقتنا انتهى.
00:31:56كيف يمكن للناس المشاركة في مجتمع PostHog؟
00:32:00لقد ذكرت في البداية أن PostHog مفتوح المصدر.
00:32:03هل تقبلون المساهمات؟
00:32:05لا أعرف إن كانت هذه المعلومة صحيحة،
00:32:06بالمناسبة.
00:32:07لقد قرأت ذلك.
00:32:08نعم.
00:32:09بنسبة 100%.
00:32:10هناك طلبات سحب (PRs) تأتينا من كل مكان ونقوم بمراجعتها.
00:32:16هناك أيضاً منتدى PostHog حيث يمكنك طرح الأسئلة.
00:32:21ولدينا فعاليات مباشرة.
00:32:22أتمنى لو كان الرابط جاهزاً بيدي الآن، لكنني سأعطيك إياه لاحقاً.
00:32:26نعم، بكل تأكيد.
00:32:27نعم، هناك فعاليات حية.
00:32:29فقط قم بالتسجيل.
00:32:30استخدم التطبيق.
00:32:31وأخبرنا برأيك.
00:32:32تواصل معنا عبر X أو LinkedIn أو أي منصة تستخدمها.
00:32:37أخبرنا برأيك، فنحن نشطون جداً على تلك المنصات.
00:32:40مذهل.
00:32:41شكراً جزيلاً لك يا بروكر.
00:32:43كان هذا رائعاً.
00:32:44ولكل من يشاهدنا، إذا كانت لديكم أي أسئلة متابعة،
00:32:49اطرحوها في الدردشة وسنتأكد من أن فريق PostHog سيتابعها.
00:32:54لكن نعم، شكراً جزيلاً لك يا بروكر.
00:32:56أقدر تواجدك معنا هنا.
00:32:58شكراً لك.
00:32:59نعم.
00:33:00شكراً لاستضافتي.
00:33:02مذهل.
00:33:03شكراً جزيلاً للجميع على الانضمام لهذه الدردشة وجلستنا المباشرة اليوم.
00:33:08إذا كنتم لا تعلمون، فنحن نستضيف جلسة مجتمعية مباشرة كل أسبوع تقريباً.
00:33:14لذا إذا توجهتم إلى [community.vercel.com/events](https://www.google.com/search?q=https://community.vercel.com/events)،
00:33:21ستجدون تقويماً رائعاً حيث ننشر جميع فعالياتنا الواقعية وعبر الإنترنت.
00:33:24أخبرونا ما هو التكامل القادم الذي تودون رؤيته في جلستنا المجتمعية؟
00:33:31وسنعمل بالتأكيد على استضافتهم.
00:33:33لا يُصدق.
00:33:34حسناً، شكراً جزيلاً لكم جميعاً على الانضمام إلينا اليوم.
00:33:39وآمل أن أراكم في جلستنا المباشرة القادمة.

Key Takeaway

يركز هذا العرض على كيفية تسريع دورة تطوير المنتجات الرقمية من خلال دمج تحليلات PostHog مباشرة في بيئة v0، مما يتيح اكتشاف الأخطاء وإجراء تجارب A/B وتحسين تجربة المستخدم بشكل آلي وفعال.

Highlights

تقديم PostHog كمنصة مفتوحة المصدر متكاملة لتحليلات المنتجات، تتبع الأحداث، واختبارات A/B.

شرح كيفية التكامل المباشر بين PostHog وv0 لتسهيل عملية التطوير والاختبار دون مغادرة أداة البناء.

استعراض ميزة بروتوكول سياق النموذج (MCP) التي تمنح ذكاء v0 القدرة على الوصول لبيانات PostHog.

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

التركيز على أهمية علامات الميزات (Feature Flags) والتجارب متعددة المتغيرات في اتخاذ قرارات مبنية على البيانات.

رؤية PostHog لمستقبل تطوير البرمجيات المستقل حيث يقوم الذكاء الاصطناعي برصد وإصلاح المشكلات ذاتياً.

Timeline

مقدمة الجلسة والتعريف بمنصة PostHog

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

إعداد التكامل وإدارة متغيرات البيئة

ينضم بروكر، مهندس المنتجات في PostHog، ليشرح الجوانب التقنية لربط المنصة مع Vercel وv0. يستعرض بروكر كيفية تثبيت التكامل عبر متجر Vercel، مؤكداً على ميزة الإدارة التلقائية لمتغيرات البيئة ومفاتيح المشروع دون عناء يدوي. يتم توضيح أهمية مفتاح PostHog في ربط التطبيق بمشروع محدد لضمان تدفق البيانات الصحيحة حول الأخطاء والاستخدام. يشير المتحدث إلى أن هذه الخطوة توفر وقت المطورين وتحميهم من تعقيدات إدارة الهوية والفواتير في المراحل الأولى. ينتهي القسم بتمهيد للعرض التجريبي الحي للعبة Hog Hop التي تعاني من بعض المشكلات البرمجية.

استخدام MCP لإصلاح الأخطاء وتتبع الجلسات

يقدم بروكر مفهوم بروتوكول سياق النموذج (MCP) كجسر يربط بين ذكاء v0 وبيانات PostHog العميقة. يتم استعراض كيفية إضافة PostHog كـ MCP داخل واجهة v0، مما يسمح للوكيل بالبحث عن الأخطاء وإصلاح الكود مباشرة بناءً على سجلات الإنتاج. يظهر العرض التجريبي نجاح الوكيل في إصلاح خطأ تجميد اللعبة بمجرد تزويده بوصف بسيط للمشكلة وسياق من التحليلات. يتطرق القسم أيضاً لميزة إعادة تشغيل الجلسة (Session Replay) التي تتيح للمطورين رؤية تفاعل المستخدمين الحقيقي بالصوت والصورة. يعتبر هذا الجزء جوهرياً لإظهار قوة الذكاء الاصطناعي في اختصار وقت استكشاف الأخطاء وإصلاحها (Debugging).

إدارة التجارب وعلامات الميزات عبر الذكاء الاصطناعي

ينتقل النقاش إلى أحد أكثر الجوانب قيمة وهو إجراء تجارب A/B باستخدام علامات الميزات متعددة المتغيرات. يشرح بروكر كيفية توجيه v0 لإنشاء ميزات جديدة مثل "ليزر العين" واختبارها مقابل ميزات أخرى مثل "السحق" لتحديد أيهما أكثر جاذبية للمستخدمين. يتم التأكيد على ضرورة وضع فرضية واضحة وتحديد مقاييس أساسية وثانوية لضمان دقة نتائج التجربة. يوضح المتحدث سهولة تعديل المقاييس أو استهداف فئات محددة من المستخدمين (مثل مستخدمي منطقة جغرافية معينة) عبر أوامر بسيطة للوكيل. يساعد هذا النهج الفرق البرمجية على بناء ميزات يطلبها المستخدمون فعلياً بناءً على بيانات حقيقية بدلاً من التخمين.

الرؤية المستقبلية للمنتجات المستقلة والختام

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

Community Posts

View all posts