مركز التفضيلات: صفحة التفضيل/إلغاء الاشتراك العامة
النسخة الإنجليزية الأصلية: Preference center: the public opt-in/opt-out page.مركز التفضيلات صفحة عامة تدير فيها جهة الاتصال اشتراكاتها في القنوات، وموضوعات الاشتراك، وتكرر الرسائل، وتقدّم (إن فعّلتَ الخيار) طلب حذف البيانات — من دون حساب ومن دون تسجيل دخول. تصل كل جهة اتصال إليها عبر رابط موقّع: يحمل الرابط رمز HMAC-SHA256 بصيغة
v1.<payload>.<signature> تنتهي صلاحيته بعد 30 يومًا، فتبقى الصفحة ذاتية الخدمة ومقتصرة في الوقت نفسه على جهة اتصال واحدة في منظمة واحدة بالضبط.
توجد نسخة ملخّصة من سطح النقاط النهاية أيضًا داخل بوابات الإرسال؛ هذا الدليل هو الاستعراض الكامل: كل حقل تكوين، وأين تضع الرابط، وما الذي تعيده واجهة الصفحة العامة، وأي أسطح امتثال يكتبها إلغاء الاشتراك أو التفضيل.
جذر جميع النقاط النهاية أدناه هو
https://api.orbit.devotel.io/api/v1/compliance.
مركز التفضيلات تحكم تملكه أنت المستأجر: أنت تختار القنوات والموضوعات والعلامة التجارية، وتحتفظ منظمتك بأدلة الموافقة. Orbit تدير المنصة؛ أما قرار الموافقة فيعود إلى جهة الاتصال. هذا الدليل ليس استشارة قانونية — تأكّد من التزاماتك لدى مستشارك القانوني.
1. كوّن مرة واحدة: POST/GET /preference-center
اضبط التكوين عبرPOST /preference-center (مفتاح API بصلاحية owner/admin). تكتب النقطة النهاية التكوين في إعدادات منظمتك وتعيد الكائن المحفوظ — نفّذها مجددًا للتحديث. تقرأ GET /preference-center التكوين الحالي؛ قبل التكوين تعيد enabled: false مع رسالة تلميح.
حقول التكوين
يُتحقق من كل حقل في الخادم — يعيد طلب POST المرفوض422 مع مسائل لكل حقل (field، message) لتعرف أيّها فشل.
موضوعات الاشتراك
الموضوع مجموعة مسماة — نشرة بريدية، تحديثات منتج، تنبيهات فوترة — يمكن لجهة الاتصال الاشتراك فيها أو الانسحاب منها من دون مسّ القناة كاملة. يجب أن تكون معرّفاتid للموضوعات فريدة ومطابقة لنمط السلاغ ([a-z0-9][a-z0-9_-]{0,63})؛ ولكل مدخل:
name(1–120 محرفًا) — الاسم الظاهر في الصفحة.description(اختياري، ≤500) — سطر سياق واحد يظهر بجانب المفتاح.defaultOptIn(الافتراضيfalse) — كيف تُعامل جهة الاتصال التي لا تفضيل مسجلًا لها.archived(اختياري) — تبقى الموضوعات المؤرشفة في سجل التدقيق لكنها لم تعد تظهر في الصفحة.
http(s) مسبقًا، وتفشل معرّفات الموضوعات المكررة برسالة “Topic ids must be unique” بدلًا من أن تُستبدل صمتًا.
2. أنشئ رابطًا لكل جهة اتصال
بعد التكوين، أنشئ رابطًا لجهة اتصال واحدة في كل مرة عبرPOST /preference-center/link:
link — رابطًا بصيغة ${DEVOTEL_WEB_URL}/preferences?token=v1…. نقاط يجدر الانتباه إليها:
- يستهدف الرابط الصفحة المستضافة لا نقطة النهاية JSON. انسخه كما هو في قوالب التذييل/المرسل لديك؛ تجلب الصفحة نفسها نقطة النهاية البيانات تحت الغطاء.
- صلاحية 30 يومًا. بعدها يتحقق الرمز منتهيَ الصلاحية وعلى جهة الاتصال طلب رابط جديد (إنشاء رابط جديد يستدعي API مرة واحدة).
- الصفحة محايدة Locale وقت الإنشاء. يحل تطبيق الويب عملية إعادة توجيه مع إبقاء استعلام
?token=، فلا تحتاج إلى تخمين locale جهة الاتصال.
أين تضعه
- إرسالات تسويقية بنص حر: يُضاف نيابةً عنك. لا تحتاج إلى وضع الرابط. تُلحق Orbit سطر
{optOutMessage}: {link}بكل إرسال تسويقي بنص حر ما دام مركز التفضيلات مفعّلًا — علىsmsوwhatsappعبر نطاقك القصير المميز، وعلىemailوبقية قنوات النص الحر كرابط مرمّز خام — وتُستثنى الإرسالات القالبية. الصفحة نفسها تشرح متى يظهر التذييل، وماذا يكتب النقر الملحق، وكيف يرتبط بصيغة “Reply STOP” لدى الناقل: انظر مركز التفضيلات: متى تلحق Orbit تذييل إلغاء الاشتراك نيابة عنك. - الإرسالات التعاملية والقالبية: ضعه بنفسك. لا تحمل هذه الإرسالات التذييل الملحق أبدًا، لذا الرابط المنشأ أعلاه هو وسيلتها للحصول على إلغاء اشتراك بلمسة واحدة: انسخه كما هو في موضع إلغاء الاشتراك من قوالب بريدك، وأدرجه في النسخ القالبية أو المتون التعاملية حيث تريد واحدًا. إنشاء رابط قصير متتبع لكل موضع اختياري؛ إن فشل إنشاء الرابط القصير يظل الرابط الخام يعمل — البديل إضافي ولا يكون أبدًا ركيزة امتثال.
- إعادة تفضيل مدفوعة بالكبت. حين تعاود جهة الاتصال التفضيل عبر مسار آخر، يمكنك منحها رابطًا جديدًا لتحصل على الصفحة الذاتية نفسها.
3. صفحة الرمز العامة
تقرأ الصفحة المستضافة وتكتب عبر نقطتي نهاية غير موثّقتين تُحصران بالرمز الموقّع:GET /preferences/:token— يعيد حمولة الصفحة.PUT /preferences/:token— يطبّق التحديثات.
400 INVALID_TOKEN؛ وتعيد الرموز المنتهية أو المعدّلة 401 TOKEN_EXPIRED مع “Please request a new link.”
استجابة GET
تجمع الحمولة الحالة الحالية لجهة الاتصال وتكوين المنظمة:consentHistory هو سجل تدقيق التفضيل/إلغاء التفضيل لجهة الاتصال بترتيب الأحدث أولًا، بسقف 20 صفًا، مرسومًا من دفتر الموافقات نفسه الذي يراه مشغّلوك في لوحة التحكم.
جسم طلب PUT
channelPreferences— يُسمح بخريطة جزئية (سجل جزئي في Zod)؛ تُطلب قناة واحدة على الأقل.frequencyPreference— اختياري، إحدىall،important_only،weekly_digest،monthly_digest.topicPreferences— خريطة اختيارية بصيغة{ topicId: opted_in | opted_out }يُتحقق منها مقابل موضوعاتك المكوّنة؛ تُتجاهل المعرّفات غير المعروفة.requestDataDeletion— يسجّل طلب حذف GDPR إلى جانب إلغاء الاشتراك (انظر القسم 6).
4. كيف تجري التحديثات
التفضيل/إلغاء التفضيل المكتوب هنا ليس مجرد علم واجهة — تُحدَّث أسطح الامتثال الأربعة نفسها التي تكتبها كلمة STOP المفتاحية:- دفتر الموافقات. يُضاف صف
consent_recordsواحد لكل قناة (أو لكل موضوع) معsource: preference_center— سجل تدقيق عبء الإثبات وفق GDPR Art 7 لديك. - قائمة الكبت. عند أي قناة ملغاة، يُدرج هاتف/بريد جهة الاتصال المقنّن بنطاق
all— حجب عابر للقنوات تقرأه كل بوابات الإرسال. - سور STOP. يُضبط سور Redis سريع المسار عند إلغاء الاشتراك (ويُمسح عند إعادة التفضيل الكاملة)، فترى دفعات الحملات الجارية التغيير قبل أن يسري الكبت الأبطأ في قاعدة البيانات.
- سجل التدقيق. يُسجَّل
compliance.preference_center_updatedعند تغيير التكوين، وتُلتقط أحداث التفضيل/الإلغاء على مستوى جهة الاتصال في دفتر الموافقات.
opted_in) يُبطل صفوف الكبت النشطة لهاتف جهة الاتصال ويمسح سور STOP، فيما يكسب دفتر الموافقات المدخل المعكوس.
الموضوع مقابل القناة. إلغاء الاشتراك على مستوى القناة يفوز دائمًا — مفتاح الموضوع يضيّق الموافقة داخل القنوات التي ما تزال جهة الاتصال تقبلها. معرّفات الموضوعات غير المعروفة في PUT تُتجاهل بدل حفظها، فلا يستطيع نموذج قديم كتابة مفاتيح سمات اعتباطية.
5. دلالات مفتاح حذف GDPR
حين يكونshowGdprDelete مفعّلًا وتؤشر جهة الاتصال requestDataDeletion: true في PUT، تسجّل الواجهة طلب حذف GDPR تقليديًا — صف pending موسومًا لعملية حذف البيانات لديك — إلى جانب إلغاء الاشتراك. هذا الوسم مقصود: مفتاح الحذف في مركز التفضيلات يوسم جهة الاتصال، لكنه لا يشغّل خط أنابيب DSAR المتتبع.
6. اختباره
مثالان(curl) جاهزان يمكنك لصقهما في سكربت تدخين: حفظ التكوين:201 مع صدى التكوين المحفوظ.
إنشاء رابط وتجربة النقاط العامة:
updated: true مع التفضيلات المطبّقة، وعند الطلب مدخل gdprRequest.
أشهر الإخفاقات التي تفحصها: 400 INVALID_TOKEN (رمز مشوّه)، 401 TOKEN_EXPIRED (انقضاء الصلاحية أو عدم تطابق التوقيع — أنشئ رابطًا جديدًا)، 422 VALIDATION_ERROR (مسائل على مستوى الحقول في جسم التكوين أو التحديث)، و404 NOT_FOUND عند تعطيل مركز التفضيلات أو عدم وجود معرّف جهة الاتصال.
Related
- بوابات الإرسال وحواجز ما قبل الإرسال — حيث يرد ملخص مركز التفضيلات إلى جانب ساعات الهدوء، والإيقاف الطارئ، وخواطئ المعدل.
- قوائم إلغاء الاشتراك والكبت — كيف يرتبط النطاق
allواستيرادات CSV الجماعية بهذا السطح. - إدارة الموافقات — واجهة API جهة المشغّل التي تخزّن دفتر الموافقات نفسه.
- مرجع DSAR — خط أنابيب المحو المتتبع الذي تُوجَّه إليه طلبات
requestDataDeletion.