أضف لعبة من المتجر
نموذج تواصل BananaSeed لديه بالفعل أداة عاملة من الدرس السابق. في هذا الدرس الأخير نستبدل خانة الاختيار العادية بلعبة حقيقية قابلة للّعب يجب على كل زائر اجتيازها.
ولِمَ العناء، ما دامت خانة الاختيار تعمل أصلًا؟ خانة الاختيار هي الحدّ الأدنى الهادئ. اللعبة تحوّل لحظة "أثبت أنك إنسان" التي لا مهرب منها إلى شيء يستمتع به الزائر بدل أن يتحمّله، وهي الجزء الذي يصمد أمام المهاجمين المتطوّرين. ذكاء اليوم الاصطناعي يستطيع تأشير خانة اختيار وحلّ شبكات الصور، لكن اللعبة الحقيقية هي التحدّي الوحيد الذي لا يقدر على الغش فيه، لأن لا آلة تلعب كما يلعب الإنسان. 💪
هذا الدرس أكثر تفصيلًا قليلًا من إسقاط الأداة: تختار لعبة، وتثبّتها على مفتاح موقعك، وتشغّل البوّابة التي تشترطها. والمردود أن اللعبة تصير الشيء الفعلي الواقف بين الروبوت ونموذجك، لا زينةً يمكن تخطّيها. آلية الرمز تحتها متطابقة، فلا يتغيّر خادمك الخلفي البتّة. كل ما هنا يعمل على الباقة المجانية.
ما الذي سيكون لديك في النهاية
- لعبة من المتجر مثبّتة على مفتاح موقعك.
- تلك اللعبة مشترَطة للتحقّق، فلم تعد خانة اختيار عارية قادرة على المرور.
- نموذج التواصل نفسه، محروسًا الآن باللعبة، وفحص خادمك الخلفي دون تغيير.
1. اختر لعبة من المتجر
المتجر هو الكتالوج العام الذي تختار منه. افتحه وتصفّح: رشّح حسب الفئة، أو حسب ما تدعمه اللعبة (اللمس، لوحة المفاتيح، قارئات الشاشة، الصوت)، كي تُطابِق لعبة بجمهورك. لكل لعبة صفحتها الخاصة بمعاينة ومعرّف مثل caputchin/games/leaf-memory.
التصفّح مفتوح، بلا طابور موافقات: كل لعبة في الكتالوج متاحة للاستخدام. اختر واحدة وانسخ معرّفها. سنستخدم Leaf Memory (caputchin/games/leaf-memory) في بقية هذا الدرس.
2. ثبّت اللعبة على مفتاح موقعك
قبل أن تحرس لعبة مفتاحًا، تثبّتها على ذلك المفتاح. التثبيت يخبر Caputchin بأن يأخذ لقطة مثبَّتة ومتحقَّقًا منها للّعبة، كي تكون النسخة الدقيقة التي يلعبها زوّارك هي ذاتها التي يستطيع Caputchin إعادة تشغيلها حين يفحص نتيجة لاحقًا.
في لوحة التحكّم، افتح فريقك، وافتح مفتاح موقعك، واذهب إلى صفحة الألعاب خاصته. في لوحة أضِف لعبة، ابحث عن اللعبة في صندوق لعبة من المتجر واخترها من القائمة (أو انقر افتح).
يسجّل Caputchin اللعبة، ويأخذ لقطتها، ويضعك على صفحة إعدادات اللعبة. تظهر اللعبة الآن تحت الألعاب المسجّلة عودةً في صفحة الألعاب، جاهزةً لحراسة المفتاح. كل لعبة من المتجر تقريبًا جاهزة بمجرّد تسجيلها، ولعب الطرف الأول دائمًا؛ إن أظهرت لعبة نادرة وسم غير قابلة للإعادة هنا، فلا يمكنها التحكيم حتى يشحن مؤلّفها نسخة قابلة لإعادة التشغيل.
يمكنك إضافة أكثر من لعبة. أضفها على مفتاح موقع واحد، أو أضفها مرة على الفريق لمشاركة المجموعة نفسها عبر كل مفتاح فيه.
صار لمفتاح موقعك الآن لعبة مثبّتة ومتحقَّقًا منها. تاليًا نجعلها مشترَطة. 🎉
3. اشترِط لعبة للتحقّق
تثبيت لعبة يجعلها متاحة؛ لا يُرغم بعدُ أحدًا على لعبها. البوّابة تفعل ذلك.
على مفتاح موقعك، افتح صفحة الأمان خاصته وشغّل اشتراط لعبة للتحقّق. من الآن فصاعدًا، على كل زائر لهذا المفتاح أن يلعب إحدى ألعابه المثبّتة كي يمرّ، ولم يعد اجتياز خانة اختيار عارية كافيًا. (لا يمكنك تشغيل البوّابة حتى تُثبَّت لعبة واحدة على الأقل، ولهذا تأتي الخطوة 2 أولًا.)
مع تشغيل البوّابة، يختار Caputchin أيّ لعبة مثبّتة يحصل عليها كل زائر ويسلّمها عبر تذكرة موقّعة للاستخدام مرة واحدة. لا يستطيع زائر، ولا روبوت، اختيار اللعبة أو تخطّيها أو استبدالها بأسهل: القرار يُتّخذ في جانب Caputchin، طازجًا لكل جلسة. ذلك ما يحوّل اللعبة من لطف إلى حماية حقيقية.
تدير مجموعة مفاتيح كاملة؟ للفريق صفحة الأمان خاصة به فيها اشتراط لعبة على كل مفتاح موقع، تشغّل البوّابة عبر كل مفتاح في الفريق دفعة واحدة.
4. استبدل العنصر
الآن الصفحة. تُعرَض الألعاب على عنصر مختلف، <caputchin-game>. الاستيراد import "@caputchin/widget" الذي أضفته بالفعل يسجّله أيضًا، فلا جديد لتثبيته. ولأن المفتاح صار يشترِط لعبة، لم يعد <caputchin-widget> ذو خانة الاختيار وحدها قادرًا على المرور عليه، فهذا الاستبدال هو الخطوة الأخيرة المطلوبة.
في نموذج تواصلك، غيّر السطر الواحد:
// before
<caputchin-widget sitekey="cpt_pub_..." />
// after
<caputchin-game sitekey="cpt_pub_..." />لا تمرّر معرّف لعبة. لأن المفتاح يشترِط لعبة، يقدّم Caputchin إحدى ألعابك المثبّتة ويختارها لكل زيارة. إن آثرت تثبيت واحدة بعينها، أو حصر التناوب في مجموعة فرعية، فسمِّها (يجب أن تكون كلٌّ منها مثبّتة على المفتاح):
// always Leaf Memory
<caputchin-game sitekey="cpt_pub_..." game="caputchin/games/leaf-memory" />
// a random one of these two per visit
<caputchin-game
sitekey="cpt_pub_..."
games="caputchin/games/leaf-memory,caputchin/games/dino-runner"
/>تسمية لعبة غير مثبّتة على المفتاح لن تحمّلها: تبلّغ الأداة بأن لا لعبة كهذه لدى البوّابة بدل أن تمرّر الزائر.
5. جرّبها
أعد تحميل تطبيقك. اختفت خانة الاختيار: يلعب الزائر الآن اللعبة في إطار iframe معزول. حين يفوز، تضيف الأداة حقل caputchin-token المخفي نفسه إلى النموذج، فتظلّ قراءتك لـ FormData وفحصك الخلفي /siteverify كلاهما دون تغيير عن الدرس السابق.
افتح إحصاءات مفتاح موقعك وسترى الجلسات تتدفّق عبر القمع نفسه كما من قبل. يمكنك ترشيح العرض كله إلى لعبة واحدة لمقارنة واحدة بأخرى.
صار نموذج تواصل BananaSeed محروسًا الآن بلعبة حقيقية قابلة للّعب يجب على كل زائر اجتيازها، وكل إرسالية ما زالت متحقَّقًا منها على خادمك. لقد شحنتها. 🎉
انتقلت من حساب فارغ إلى نموذج متحقَّق منه ومحروس بلعبة.
ما الذي حدث للتوّ
| الخطوة | أين | النتيجة |
|---|---|---|
| اختر لعبة | المتجر | صار لديك معرّف لعبة مثل caputchin/games/leaf-memory. |
| ثبّتها على المفتاح | لوحة التحكّم، صفحة الألعاب للمفتاح | يثبّت Caputchin لقطة متحقَّقًا منها؛ تظهر اللعبة تحت الألعاب المسجّلة، جاهزةً للتحكيم (ألعاب الطرف الأول فورًا). |
| اشترِط لعبة | لوحة التحكّم، صفحة الأمان للمفتاح | على كل زائر اجتياز لعبة مثبّتة، ويختار Caputchin أيّها. |
استبدل بـ <caputchin-game> | صفحتك | تُحمّل اللعبة في إطار iframe معزول وتضيف caputchin-token نفسه، فيبقى خادمك الخلفي دون تغيير. |
ما التالي
هذه المجالات التي يُرجَّح أن تمتدّ إليها من هنا:
- خصّص الألعاب: اضبط لغة ألعابك ومظهرها وصعوبتها.
- الأمان: بوّابة اللعبة، وصعوبة proof of work، والأصول، وبقية حماية المفتاح.
- الإحصاءات والجلسات: اقرأ القمع وقارن لعبة بأخرى.
- إدارة الحساب: تسجيل الدخول، ورموز الوصول، والفوترة، والمقاعد.
- الفرق: نظّم مفاتيح مواقعك، وعلى باقة مدفوعة، ادعُ فريقك.