منصة رقم ثانٍ عالمي: تطبيق وخلفية ولوحة تشغيل
كلّف عميلٌ بايمنتري ببناء منتج يتيح للمستخدم الحصول على رقم هاتف افتراضي في دولة أخرى والاتصال وإرسال الرسائل منه، بالعربية والإنجليزية. لا يُذكر اسم العميل بناءً على طلبه. أُنجز نطاق التطوير الموصوف هنا وسُلِّم، وما يبقى قبل الإطلاق مذكور في القسم الأخير.
الحاجة
كان على المنتج أن يبقى بسيطًا لمن يستخدمه: احصل على رقم، اتصل، راسل، أدِر. وخلف ذلك واجهة مشغّل اتصالات لخدمة هاتفية حقيقية، واشتراكات ومدفوعات، ومتطلبات تنظيمية تختلف من دولة إلى أخرى، وفريق تشغيل يحتاج أن يرى الأرقام والمكالمات والأموال ومحاولات الإساءة دون أن يلمس قاعدة البيانات.
كان مطلوبًا أن تكون اللغتان أساسيتين من أول شاشة، على iOS وAndroid، وأن يبقى تعقيد الاتصالات في الخلفية ولوحة التشغيل لا أن يتسرّب إلى التطبيق.
ما الذي بُني؟
تطبيق الجوال
تطبيق Flutter لنظامي iOS وAndroid: كتالوج أرقام بحسب الدولة، شراء وتفعيل، مكالمات عبر الإنترنت مع شاشة المكالمة الواردة الأصلية للنظام، رسائل، بريد صوتي، إعدادات الرقم، إشعارات، وفوترة. العربية والإنجليزية قابلتان للتبديل من أول شاشة.
الخلفية
خدمة NestJS معيارية على PostgreSQL وRedis: الحسابات، الكتالوج، الطلبات، الاشتراكات، المكالمات، الرسائل، الامتثال، ضوابط الاحتيال، دفتر الحسابات، الويب هوكس، وطوابير المعالجة الخلفية، كلها منشورة تحت عقد واجهة برمجية موثّق واحد يُختبر التطبيق ولوحة التشغيل مقابله.
لوحة التشغيل
لوحة ويب لفريق التشغيل: المستخدمون، الأرقام، المكالمات، الرسائل، الطلبات، المدفوعات، الاستردادات، مراجعة الامتثال، طابور الاحتيال، سجل التدقيق، وصحة النظام. الدخول يتطلب عامل تحقق ثانيًا ويُقيَّد بحسب الدور.
نظام التصميم
ملف Figma بمتغيرات ومكوّنات ومجموعة الشاشات الكاملة بالإنجليزية والعربية. تُولَّد رموز التصميم من مصدر واحد إلى التطبيق ولوحة التشغيل معًا، ويفشل البناء إن انحرف أيٌّ منهما عنه.
القرارات الهندسية
واجهة واحدة للمشغّل
منطق العمل لا يخاطب مشغّل الاتصالات مباشرة أبدًا. كل عملية على الأرقام تمر عبر واجهة محوّل واحدة، فيمكن اختبار المشغّل بنسخة وهمية واستبداله دون إعادة كتابة المنتج. ويبقى المشغّل مصدر الحقيقة فيما يستطيع الرقم فعله.
القدرات كبيانات
كل رقم وكل عرض يخزّن ما يدعمه فعلًا: المكالمات الواردة والصادرة، الرسائل النصية، الوسائط، البريد الصوتي، التحويل، وهل تلزم وثائق هوية أو عنوان. لا يعرض التطبيق إلا ما هو مثبت، لا ميزة مفترضة.
الامتثال كبيانات
تُجلب المتطلبات التنظيمية من المزوّد لكل دولة وتُخزَّن كبيانات، بحقول ووثائق مطلوبة ممثَّلة صراحة. لا شيء من قواعد أي دولة مكتوب في الكود، فتغييرٌ عند المزوّد لا يستلزم إصدارًا جديدًا.
حالات صريحة
تتبع المكالمات والرسائل والاشتراكات آلات حالة محدّدة، ولا يستطيع ويب هوك وارد أن يعيد سجلًا منتهيًا إلى الوراء. تُمثَّل المكالمة كمكالمة بأطراف، فتُوصف المكالمة المحوَّلة أو الجماعية بدقة.
أموال لا تُعدَّل
الرصيد دفتر قيود يُضاف إليه فقط، لا حقلًا يُستبدل. يلتقط كل طلب تكلفة المزوّد وسعر البيع وسعر الصرف والضريبة لحظة الشراء، ويحمل كل شراء ودفع واسترداد وإرسال رسالة مفتاح تكرار يمنع تنفيذه مرتين.
الويب هوكس والطوابير
تُتحقَّق توقيعات أحداث المزوّد على النص الخام، وتُزال المكررات بمعرّف الحدث، وتُحمى من إعادة الإرسال، وتُعالج بشكل غير متزامن. تمر الأحداث الداخلية الحرجة عبر صندوق صادر معاملاتي، وللطوابير إعادة محاولة وتباطؤ تدريجي ومسار للرسائل الميتة يظهر في لوحة التشغيل.
العربية لغةً أولى
صُمّمت الواجهة العربية في Figma أصلًا لا انعكاسًا لاحقًا للإنجليزية. تبقى أرقام الهواتف ورموز الدول والمدد والمعرّفات التقنية من اليسار إلى اليمين داخل النص العربي عبر عزل اتجاهي صريح، وكل مكوّن قابل لإعادة الاستخدام مفهرس بالعربية والإنجليزية، مع نص طويل وحجم خط كبير.
لوحة التشغيل
لوحة التشغيل هي المكان الذي يُسمح فيه لتعقيد الاتصالات بالظهور. يستطيع المشغّلون تتبّع دورة حياة الرقم وتحريره بعد تأكيد وقيد في سجل التدقيق، ومراجعة طلبات الامتثال، ومعالجة طابور الاحتيال، وتتبّع أي دفعة حتى قيودها في الدفتر، ورؤية زمن استجابة المزوّد وإخفاقات الويب هوكس وعمق الطوابير في شاشة واحدة.
الجودة والأمان
- اختبارات وحدة وتكامل آلية للخلفية، منها اختبارات تكامل على نسخ حقيقية من PostgreSQL وRedis، واختبارات عقد للمزوّد تغطي النجاح وحدود المعدل والمهلات والويب هوكس المكررة والتوقيعات غير الصالحة وأخطاء المزوّد.
- اختبارات عقد تربط التطبيق ولوحة التشغيل بوصف الواجهة البرمجية المنشور، فأي تغيير في طرف يُفشل بناء الطرف الآخر.
- مسارات شاملة على محاكي Android باللغتين، تشمل مسار الشراء الكامل وشاشة مكالمة عربية، إضافة إلى اختبارات Playwright للوحة التشغيل مقابل الواجهة الحية.
- اختبارات حمل على الواجهة للبحث وتسجيل الدخول واستقبال الويب هوكس وإرسال الرسائل، كشفت وأصلحت محدّد معدل كان سيخنق جميع المستخدمين خلف عنوان IP مشترك واحد معًا.
- فاحصات الأسرار والتبعيات والثغرات تعمل كبوابات إلزامية بلا تجاوز. كلمات المرور بخوارزمية Argon2id، ورموز التجديد تُدوَّر، ودخول لوحة التشغيل يحتاج عامل تحقق ثانيًا، ووثائق الهوية مشفّرة في التخزين ولا تُقدَّم إلا عبر روابط قصيرة العمر.
- أسرار المشغّل ومزوّد الدفع لا تصل إلى التطبيق أبدًا؛ لا يتلقى التطبيق سوى رموز عميل قصيرة العمر.
ما الذي يقوله المنتج لمستخدميه؟
يحمل التطبيق الإفصاحات التي يحتاجها منتج كهذا بدل إخفائها: هو ليس بديلًا عن خط الهاتف الأساسي ولا يدعم مكالمات الطوارئ؛ ووصول رمز التحقق من بنك أو تطبيق مراسلة تقرره تلك الجهة لا التطبيق؛ والبيانات التجريبية معلَّمة كذلك أينما ظهرت.
وهو منتج تواصل شخصي، فلا تُقدَّم فيه المراسلة الجماعية، وفيه حدود معدل وسرعة مع كشف للإساءة مدمجان.
النتيجة
سُلِّم وأُنجز: مصدر التطبيق والخلفية ولوحة التشغيل؛ ملف Figma؛ عقد الواجهة البرمجية؛ تعريفات البنية التحتية مع مراقبة ونسخ احتياطي واستعادة مجرَّبة؛ خطوط تكامل مستمر بالبوابات الاختبارية والأمنية أعلاه؛ وتوثيق تقني يغطي المعمارية ودورة حياة الرقم والمكالمات والرسائل والامتثال والاحتيال والمدفوعات والفوترة.
يعتمد الإطلاق على حسابات لا يملك فتحها إلا العميل: حساب الإنتاج لدى مشغّل الاتصالات وموافقة إعادة البيع، ومزوّد الدفع، وحسابات المتاجر، وبيئة بناء Apple. هذه الخطوات موثّقة كقائمة إطلاق وكانت خارج نطاق التطوير. الشاشات في هذه الصفحة ببيانات تجريبية، ولا تُعرض أرقام أو مدفوعات حقيقية.
تبني منتج تواصل أو اشتراكات؟
اشرح الحاجة والدول المعنية. تُقيَّم قيود المزوّد والامتثال والمتاجر قبل تحديد النطاق.
ناقش منتجك · البرمجة · الأعمال