Prodantix
لمحة سريعة
- الفئة
- منصة للمطوّرين
- الموقع
- prodantix.com
- لوحة التحكم
- app.prodantix.com
- التوثيق
- prodantix.com/en/docs/overview
- واجهة GraphQL
- api.prodantix.com/graphql
- استقبال الأحداث
- eu.api.prodantix.com/v1/events
- البث الفوري
- eu.ws.prodantix.com
- واجهة MCP
- eu.mcp.prodantix.com/mcp
- إعادة تشغيل الجلسات
- eu.replay.prodantix.com
برودانتيكس مصنوع لمن يبنون البرمجيات. كل فريق منتج يطرح الأسئلة الثلاثة نفسها: ماذا يفعل الناس فعلًا داخل تطبيقنا، ومن ينبغي أن يرى أي جزء منه، ومتى الوقت المناسب لنقول لهم شيئًا.
معظم الشركات تشتري أداة مختلفة لكل مهمة من هذه المهام. هنا تبدأ المتاعب. فكل أداة تحتفظ بسجلّ منفصل خاص بها عن مستخدميك، وهذه السجلات تتباعد شيئًا فشيئًا. أداة تظن أن العميلة أنهت إعداد حسابها، وأخرى لم تلحق بعد فترسل إليها تعليمات لخطوة أنجزتها الأسبوع الماضي. ولا ينتبه أحد حتى تشتكي هي، أو حتى تُظهر لوحتان رقمين مختلفين.
كيف بُني المحرّك
يتكوّن المحرّك من أربع لبنات أساسية، وكل ما عداها مبني فوقها. ومن المفيد فهمها بالترتيب، لأن كلًّا منها تغذّي التي تليها. ويغطيها مرجع المفاهيم بالكامل.
الحدث
شيء واحد فعله المستخدم، يُلتقط لحظة حدوثه: تسجيل اكتمل، صفحة فُتحت، نموذج تُرك في منتصفه. الأحداث هي الإشارة الخام، وهي الشيء الوحيد الذي يدخل النظام من الخارج. أما كل ما عداها فمشتقّ منها.
حالة المستخدم
إسقاط حيّ وقابل للاستعلام لكل ما يُعرف عن المستخدم، مشتقّ من أحداثه ويُحدَّث لحظة وصول حدث جديد. هذا هو مصدر الحقيقة الذي تقرأ منه التحليلات وأعلام الميزات والرسائل جميعًا. ليس تجميعة ليلية ولا نسخة تُبقيها مهمّة ما متوافقة؛ إنه واحد لا غير.
القرار
قاعدة تُقيَّم على حالة المستخدم: من ينتمي إلى شريحة، ومن يحصل على ميزة، ومن يستحق رسالة. ولأن القرار يقرأ الحالة الحية في اللحظة التي يُسأل فيها، لا يمكن أن يجيب انطلاقًا من صورة قديمة.
الإجراء
ما يفعله المحرّك حين ينطلق قرار: كشف ميزة، إرسال رسالة، بدء سير عمل. والإجراء نفسه يُسجَّل كحدث، وهذا ما يُغلق الحلقة: ما فعله المحرّك يصير جزءًا مما يعرفه.
التحليلات هي قراءة الحالة
التحليلات في برودانتيكس ليست مخزنًا منفصلًا يحتفظ بنسخته من مستخدميك، بل هي قراءة مباشرة لحالة المستخدم. فالمسارات ومعدلات البقاء والشرائح كلها استعلامات على الإسقاط الحيّ نفسه الذي يعمل عليه بقية المحرّك. لا رحلة SQL إلى مستودع ولا انتظار لتجميعة ليلية: الحالة مهيّأة سلفًا للسؤال. والشرائح هنا كائنات من الدرجة الأولى: لها أسماء، وتُعرَّف ببنود، وتبقى عضويتها محدَّثة كلما استوفى أحدهم الشرط أو خرج عنه.
حفظ سؤال ستطرحه مرة أخرى
اللوحة مجموعة مسمّاة من البطاقات، والبطاقة استعلام سبق أن شغّلته مع الطريقة التي تريد رسمه بها. ويُحفظ الاستعلام تمامًا كما أرسله المستكشف، فالبطاقة تحمل السؤال لا صورة إجابته: فتحُها يشغّل الاستعلام من جديد ويعيدك إلى المستكشف عند الاستعلام نفسه، حرًّا في تغيير النافذة الزمنية أو التقسيم. فاللوحة إذن ليست تصديرًا قديمًا، بل مجموعة أسئلة يجيب عنها المحرّك من الحالة الحيّة في كل مرة تنظر فيها.
حين يتحرّك رقم من تلقاء نفسه
لا أحد يراقب كل رسم بياني. يقوم Prodantix بجزء المراقبة: يقرأ السلسلة قسمًا قسمًا، ويحسب خط الأساس ومدى تشتّت تلك السلسلة، ثم يؤشّر الأقسام التي ابتعدت عنه كثيرًا، في الاتجاهين معًا. ويُبلَّغ عن الهبوط والقفزة كليهما، ومع كل منهما خط الأساس الذي غادره ومقدار ابتعاده، فتستطيع تمييز انكسار حقيقي من ضجيج عادي. والحساسية إعداد لا قاعدة ثابتة، والكاشف يمتنع عن التخمين: سلسلة شبه مستوية، أو أقصر من أن يكون لها شكل بعد، لا تنتج شيئًا بدل أن تنتج إنذارًا كاذبًا.
الأشخاص الذين تدور الحالة حولهم
حالة المستخدم إسقاط، ودليل الأشخاص هو المكان الذي تقرأ فيه ذلك الإسقاط شخصًا واحدًا في كل مرة. تسرد لوحة التحكم كل من رآه المشروع، الأحدث نشاطًا أولًا، مع خانة بحث وقائمة تواصل التحميل كلما تابعت. ويحمل كل صف ما جمعه المحرّك عن ذلك الشخص: كم حدثًا، وكم جلسة متمايزة، ومتى شوهد أول مرة وآخر مرة، وما آخر ما فعله، وإلى أي المجموعات ينتمي، إضافة إلى السمات المحجوزة (الاسم والبريد والهاتف والصورة) مُخرَجة في أعمدة خاصة بها. وفتح الصف يعرض جدول الخصائص كاملًا، وهو يحمل ما وضعته أحداثك فيه لا مجموعة حقول ثابتة. وللمجموعات تبويبها وخصائصها الخاصة، لأن الشركة أو مساحة العمل شيء قائم بذاته وحقائقه تخصّه هو لا كل عضو فيه.
شخص واحد بعدّة معرّفات
يصل الزائر قبل أن تعرف من هو. يمنحه الـ SDK معرّفًا، فيقرأ ثلاث صفحات، ثم بعد ذلك فقط يسجّل. وإلى أن يخبر أحدهم المحرّك من هو، يبقى الملف بلا اسم، ويقول الدليل ذلك بدل أن يخمّن. وعندما يقع التسجيل، تُربط المعرّفات في سلسلة تنتهي إلى هوية أساسية واحدة، فينطوي الأثر المجهول داخل الحساب المسمّى بدل أن يبدأ ملفًا ثانيًا. ويبيّن كل صف كم معرّفًا ينتهي إليه، ويسردها الملف. وحيث لا يستطيع المحرّك الحسم بنفسه، تستطيع أنت ضمّ ملفين يدويًا: تختار الهوية التي تبقى، وتغلب خصائصها عند التعارض، وتُجمع الأعداد. وهذا الضمّ لا ينفكّ بعدها. ويُحفظ الملف كما كان قبل الضمّ في سجل التدقيق، فما كان يقوله قابل للاسترجاع، أما الشخصان فلا ينفصلان بعد أن يُضمّا.
مشاهدة جلسة واحدة كما جرت
تخبرك التحليلات أن أحد عشر شخصًا تركوا النموذج نفسه أمس دون إكماله، لكنها لا تخبرك لماذا. تسجيل الجلسات يسجّل الصفحة ذاتها: تلتقط حزمة المتصفح المستند وكل تغيير يطرأ عليه أثناء عمل الشخص، وتجمّع تلك التغييرات في أجزاء مرتّبة وترفعها إلى المسجّل، ثم تعيد لوحة التحكم تشغيل الجلسة كما جرت. ويُحفظ كل تسجيل تحت المعرّف نفسه الذي يستخدمه بقية المحرّك، فالجلسة تعود إلى شخص تستطيع البحث عنه أصلًا، لا إلى معرّف زائر لا وجود له خارج أداة منفصلة.
ما يُسمح للتسجيل بالاحتفاظ به
الإخفاء مُفعّل قبل أن تضبط أي شيء. فكل حرف يُكتب في حقل يُستبدل بنجمة داخل المتصفح، قبل رفع الجزء، فما يصل إلى المسجّل لم يحمل المحتوى قط: يبقى الطول وحدود الكلمات، وهو ما يُبقي التسجيل شبيهًا بالصفحة، بينما تختفي الكلمات نفسها. وتُحجب حقول كلمة المرور والبريد والهاتف سواء كان الإخفاء مُفعّلًا أم لا، فإيقافه لا يمكن أن يكشف حقل اعتماد. أما نص الصفحة الظاهر فيبقى ما لم تطلب إخفاءه هو أيضًا. ويسجّل كل جزء ما إذا كان مُخفى، وتضع لوحة التحكم علامة على الجلسة تبعًا لذلك، فتعرف دائمًا أيّ النوعين تشاهد. وتوجد التسجيلات في تخزين خاص: تطلب لوحة التحكم رابطًا موقّعًا قصير الأجل لجزء واحد في كل مرة، ولا شيء متاح من دونه. أما مدة بقاء الجلسة متاحة بعد ذلك فتحدّدها خطتك.
عرض أشياء مختلفة لأشخاص مختلفين
كثيرًا ما تريد الفرق أن تطلق شيئًا جديدًا لحفنة من المستخدمين أولًا لترى كيف يسير الأمر قبل أن يصل إلى الجميع. ويقرّر برودانتيكس من يرى ماذا بتقييم شروط على حالة المستخدم: سمة ومُعامل وقيمة، تُفحص في اللحظة التي يُسأل فيها العلم لا اعتمادًا على قائمة مخزّنة. يمكنك أن تمنح الميزة الجديدة لاثنين بالمئة من العملاء، وتراقب كيف يستخدمونها، ثم توسّعها أو تسحبها دون انتظار إصدار جديد.
رسائل تصل في اللحظة التي تنفع فيها
الرسالة لا تنفع إلا ما دامت تساعد. يستطيع برودانتيكس إرسالها في اللحظة التي يفعل فيها الشخص شيئًا، أو يخفق في فعله. فإذا بلغ عميل حدّ خطته، يعرف ذلك في حينه، لا في صباح اليوم التالي بعد أن يكون قد يئس وذهب إلى مكان آخر.
حين يردّون عليك
تسير الرسائل في اتجاه واحد إلى أن يردّ أحدهم، فتصير عندئذ محادثة دعم. ويحمل Prodantix هذه أيضًا، والذكاء الاصطناعي فيها يصوغ مسوّدة ولا يرسل. ولا يُعطى النموذج إلا المحادثة وحالة ذلك الشخص نفسه، ولا شيء غير ذلك: لا محادثة عميل آخر، ولا بقية مشروعك. يكتب ردًّا مقترحًا، ولا يصير الرد دورًا في المحادثة إلا حين يضغط موظفك على الإرسال، فـ«اقترح ولا ترسل» هو شكل الشيفرة نفسها لا قاعدة على أحد أن يتذكّرها. وللمحادثة اعتمادها الخاص كذلك. مفتاح المشروع يعرّف مشروعًا ويسافر داخل كل صفحة تركّب الـ SDK، فلا يصلح أن ينوب عن شخص؛ ولكل محادثة رمزها الخاص المقصور على تلك المحادثة وحدها، والمعرّف في جسم الطلب لا يقرّر أبدًا مع من تتحدّث. وفتح محادثة هو المسار الوحيد الذي لا يحتاج غير المفتاح العام، ولذلك يُحدَّد معدّله لكل مشروع ولكل مُتّصل.
أن تركّب التسلسل بنفسك
بعض الاستجابات أكثر من خطوة واحدة، وأنت تريد ترتيبها بنفسك. سير العمل رسم صغير: يبدأ يدويًا أو حين يدخل أحدهم مجموعة أو يخرج منها، ثم يتنقّل بين العقد. عقدة إجراء تفعل شيئًا (تكتب سطر سجل، أو تستدعي خطّافك). عقدة تأخير تنتظر، حتى ثلاثين يومًا. عقدة انتظار تتوقّف حتى تصل إشارة مسمّاة، ولها مخرجها الخاص إن لم تصل الإشارة أبدًا. عقدة تفرّع تختبر شروطًا على حالة المستخدم وتسلك المسار المطابق أو المسار البديل. وتتقدّم التنفيذات عقدةً واحدة في كل مرة، وتُثبَّت كل خطوة قبل المطالبة بالتالية، فإعادة التشغيل تستأنف من حيث وصل التنفيذ فعلًا بدل إعادته من البداية. وتُفحص الخطّافات قبل استدعائها: يجب أن يكون الهدف عنوان https عامًّا، والعناوين التي أقرّها الفحص هي التي يذهب إليها الطلب، ولا تُتّبع عمليات إعادة التوجيه، والاستدعاء المعلّق يُقطع.
تنسيق الذكاء الاصطناعي، وكيف تُغلق الحلقة
الواجهات السابقة تترك لك مهمة وصل الخطوات: أن تلاحظ شيئًا، وتحدّد على من ينطبق، وتقرّر ما تفعله. وبإمكان برودانتيكس تشغيل هذه الحلقة بنفسه. فالمحرّك يكتشف اللحظة المهمة في الحالة الحية، ويختار الشريحة المعنية، ويحدّد الإجراء. وما يجعل ذلك أكثر من مجرد أتمتة هو الجزء الأخير: الإجراء يُسجَّل كحدث، فينطوي عائدًا في حالة المستخدم نفسها التي سيقرأها القرار التالي. فيصير سلوك النظام ذاته جزءًا مما يعرفه عن الشخص، لا شيئًا جرى له على الهامش.
الاقتراح ينتظر إنسانًا
لا يتصرّف المحرّك بناءً على استنتاجه وحده. ما ينتجه اقتراح، والاقتراح خطة مكتوبة: هذه الرايات، وهذه المجموعات، وهذه الرسالة. وقبل أن يُعتمد، تُحلّ كل راية ومجموعة ومحادثة يسمّيها مقابل مستأجرك أنت، والمرجع الذي لا يُحلّ يُسقط الاقتراح كلّه بدل أن يُحذف بصمت، وهذا هو ما يمنع نموذجًا قرأ شيئًا خبيثًا من الوصول إلى ما وراء مشروعك. والاعتماد فعل بشري، وهو اللحظة التي يحدث عندها أي شيء: يجري التنفيذ عبر مسارات الرايات والرسائل نفسها التي تستخدمها يدويًا، فتظل الصلاحيات وسجل التدقيق وحدود خطتك سارية جميعًا. والاعتماد مرتين لا يفعل شيئًا في المرة الثانية.
إدخال الأحداث
كل شيء يبدأ بحدث يُرسَل إلى نقطة الاستقبال، فيطويه المحرّك في حالة المستخدم فورًا. وتغطي حِزم التطوير الويب والهواتف والخوادم. وReact هو الاستثناء الوحيد: دورة حياته تحتاج محوّلًا مخصّصًا يثبّت العميل مرة واحدة ويتوافق مع StrictMode. ودليل البدء السريع يربطه في بضعة أسطر.
المفاتيح والبيئات
كل استدعاء من حِزم التطوير يحمل مفتاح مشروع، مصدره لوحة التحكم. وإنشاء مشروع يولّد بيئتين، حيّة واختبارية، لكل منها مفتاحها: تبني بمفتاح الاختبار وتُطلق بالمفتاح الحيّ. ويظهر المفتاحان مرة واحدة فقط بعد الإنشاء، لأن الخادم لا يخزّن سوى بصمة، فلا تستطيع أي شاشة عرضهما ثانية. والتدوير يصكّ بديلًا للبيئة التي تختارها، وأنت من يقرّر هل يتوقف المفتاح القديم فورًا أم بعد مهلة.
أربع طرق للتحدّث إليه
يمتد REST على ثلاثة مضيفات: واحد لأعلام الميزات والرسائل، وواحد لاستقبال الأحداث، وواحد لإعادة تشغيل الجلسات، ويقدّم كل منها وثيقة OpenAPI خاصة به على /openapi.json. ويردّ الاستقبال بـ 202، ما يعني أن الحدث قُبل للمعالجة لا أنه خُزّن: فقد يُسقَط حدث مشوّه لاحقًا في المسار. ويغطي GraphQL نموذج التطبيق كاملًا، بما فيه المشاريع والأعلام وسير العمل والتحليلات والرسائل والشرائح والفوترة. أما واجهة البث الفوري فتبثّ تغييرات الأعلام والرسائل ودورات سير العمل، وتقطع أي اتصال غير موثّق فورًا. وتتيح واجهة MCP للوكلاء القراءة والكتابة عبر استدعاءات أدوات، وهي من آلة إلى آلة وترفض طلبات المتصفح.
البيانات تبقى بياناتك
يمكنك تشغيل برودانتيكس على خوادمنا أو على خوادمك، ويعمل بالطريقة نفسها في الحالتين. وكل ما تضعه فيه يمكنك إخراجه كاملًا متى شئت. نحن لا نبيع بياناتك ولا نستخدمها لتدريب نماذج الذكاء الاصطناعي. وبحكم تصميمه يحتفظ برودانتيكس بأكمل سجل لعملائك موجود لديك في أي مكان، ولذلك يزن هذا الوعد هنا أكثر مما يزن في غيره.
لمن هذا المنتج
يناسب برودانتيكس الفرق التي تشغّل أداتين أو ثلاثًا منفصلة لهذا الغرض وسئمت من تناقضها. وهو أنفع ما يكون حين يصبح لديك من العملاء ما يكفي لئلا تعود قادرًا على تتبّع ما يفعلونه بمجرد السؤال هنا وهناك.
زيارة Prodantix: prodantix.com