محيطان، وطبقة واحدة مفقودة
فتحت Walmart كتالوجها للشراء المدفوع بالوكلاء ضمن قواعد اشتباك صارمة. أما Amazon فقد أبقَت محيطها مغلقًا، فحجبت حركة المرور التي لا تعترف بها كوكيل مُصرَّح له. إذا قرأنا هذا كقصة سياسات، بدا وكأن متجرًا تجزئة يتبنّى الأتمتة وآخر يقاومها. وإذا قرأناه كقصة هندسية، فهو شيء أضيق وأكثر إثارة للاهتمام: إجابتان مختلفتان عن سؤال لم يحدّده أي من الطرفين تحديدًا كاملًا.
هذا السؤال ليس "هل يجوز للوكيل شراء الأشياء؟" بل "بأي سلطة، وفي أي حدود، وكيف يعرف التاجر ذلك؟" مجموعة قواعد Walmart محاولة لتعريف الشروط التي يجوز للوكيل أن يتصرف في ظلها. ومحيط Amazon محاولة لرفض التصرف حتى يمكن إثبات تلك الشروط. كلاهما موقف تفويض. ولا أحدهما موقف واجهة متجر.
تظهر الفجوة نفسها في عمل البنية التحتية: بناء Cloudflare وCommerce.com لجهوزية الواجهة لحركة الوكلاء مفيد، لكن الجهوزية ليست التفويض. إنهاء طلب الوكيل، أو تحديد معدّله، أو توقيعه، أو كشف تغذية منتجات قابلة للقراءة آليًا، كلها تصف كيف يصل الطلب. ولا شيء منها يصف ما يُسمح للوكيل بالالتزام به نيابة عن المتسوق. الطبقة المفقودة تقع بين الهوية والدفع.
ما يجب أن يحمله التفويض فعليًا
التفويض هو الأثر الذي ينوب عن المتسوق في لحظة الالتزام. ليس ملف تعريف ارتباط لجلسة وليس مفتاح API. ولكي يكون قابلًا للاستخدام عند الدفع، يجب أن يحمل كحد أدنى:
- الموكِّل. من يتصرف الوكيل نيابة عنه، محدَّدًا بطريقة يستطيع التاجر التحقق منها باستقلال عن الوكيل نفسه.
- نطاق التاجر. أي التجار يكون التفويض صالحًا عندهم. التفويض الممنوح لمتجر تجزئة واحد يجب أن يكون عديم القيمة عند آخر، ويجب أن يستطيع التاجر رؤية ذلك.
- سقف الإنفاق. حد أقصى للالتزام، معبَّر عنه بطريقة تصمد أمام تغيّر العملة والضريبة، لا كرقم واحد منسوخ من سلة.
- قيود العناصر. الفئات والكميات والاستثناءات التي ترمّز الغرض من الشراء، لا تكلفته فقط.
- الانتهاء. نافذة صلاحية قصيرة بما يكفي بحيث لا يمكن إعادة تشغيل تفويض قديم لاحقًا.
- قناة إبطال. مسار يستطيع الموكِّل من خلاله سحب السلطة، والتزام على جانب التاجر بمراجعته.
الشرط الصعب هو القابلية للتحقق دون سر مشترك لكل متسوق. فإذا احتاج كل تاجر إلى بيانات اعتماد ثنائية مع كل متسوق، فلن يتوسّع النظام بما يتجاوز حفنة من التكاملات. يجب أن يكون التفويض تأكيدًا موقَّعًا ومحدَّد النطاق يستطيع التاجر فحصه مقابل السلطة المنشورة للموكِّل، لا كلمة مرور يسلّمها المتسوق لكل واجهة متجر.

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

سؤال التقييم الذي لا يقيسه أحد
معظم معايير تقييم وكلاء التسوق تقيس إتمام المهمة. هل وجد الوكيل العنصر؟ هل أتم الدفع؟ هل مرّ الطلب؟ بهذا المقياس، عملية شراء تمت خارج التفويض تُعدّ نجاحًا، لأن الشراء حدث. هذه دالة تقييم خاطئة لنظام يُفترض أن يعمل بسلطة مفوَّضة.
يجب أن يقيس إطار اختبار وكلاء التسوق مطابقة التفويض أولًا وإتمام المهمة ثانيًا. وبشكل ملموس، يجب أن يستطيع الإجابة، لكل حلقة:
- هل كانت كل معاملة ملتزَمة داخل نطاق التاجر وسقف الإنفاق وقيود العناصر؟
- هل حاول الوكيل الالتزام بعد الانتهاء أو بعد الإبطال، وهل رُفضت المحاولة؟
- هل أنتجت إعادة المحاولة التزامًا مكررًا، أم أُزيل تكراره مقابل النية الأصلية؟
- عندما تعارض التفويض والمهمة، أيّهما اتبع الوكيل؟
عملية شراء صحيحة خارج التفويض هي فشل. وعملية شراء مرفوضة داخل التفويض، بسبب خطأ الوكيل نفسه، هي أيضًا فشل، لكنه فشل مختلف. ودمج الاثنين في "المهمة لم تُكتمل" يخفي الإشارة الوحيدة التي تهم تاجرًا يقرر ما إذا كان سيقبل حركة الوكلاء أصلًا.
لهذا السبب لا تكفي شارة الثقة. الشارة تؤكد أن وكيلًا اجتاز تقييم شخص ما في وقت ما. أما تقرير المطابقة فيتيح للتاجر تدقيق ما فعله الوكيل مقابل التفويض الذي قدّمه، على المعاملات التي حاولها فعليًا. الأول ادعاء؛ والثاني دليل. والتجار الذين يدمجون نقاط نهاية الوكلاء يحتاجون الثاني، لأن الأول لا يمكن فحصه بعد وقوعه.
ما يدور حوله الانقسام حقًا
قواعد Walmart ومحيط Amazon كلاهما مؤقت. أحدهما يقول: تصرّف، لكن ضمن شروط نحددها فقط. والآخر يقول: لا تتصرف حتى يمكن إثبات السلطة. كلاهما ينتظر القواعد النحوية المفقودة نفسها — طريقة للتعبير عن تفويض المتسوق محدَّد النطاق، ومحدودًا، وقابلًا للإبطال، ومقاومًا لإعادة التشغيل، وقابلًا للتحقق من قبل التاجر دون سر لكل متسوق.
تلك القواعد النحوية ليست ميزة واجهة متجر. لن تُشحن بكشف كتالوج أو بتوقيع رؤوس الطلبات، ولن يحسمها أي متجر تجزئة يتحرك أولًا. إنها مسألة مواصفات تتعلق بالتفويض، والاستوديوهات وهيئات المعايير التي تتعامل معها على هذا الأساس ستنتج شيئًا يستطيع التجار تدقيقه فعليًا. أما البقية فسيظلون يبنون محيطات حول سؤال لم يكتبوه بعد.
