> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ضوابط الروابط العميقة الغنية في الملف الشامل RCS UP 3.0

> كيف تحكم Orbit الروابط العميقة الغنية لـ GSMA Universal Profile 3.0 على RCS — الوضع الافتراضي الآمن، حكم الضوابط، معالجة قدرة كل مستلم، وسجل التدقيق.

# ضوابط الروابط العميقة الغنية في RCS UP3.0

**الرابط العميق الغني** في GSMA Universal Profile 3.0 هو شريحة اقتراح RCS
(`rich_link_action`) يفتح `deep_link` فيها داخل التطبيق على هاتف UP3.0
ويحمل `fallback_url` كل مستلم آخر إلى متصفح. قبل أن ترسل Orbit رسالة
تحمل أحد هذه الروابط — أو تطلب أيًا من أسطح UP3.0 الأخرى (تشفير MLS
الشامل من طرف إلى طرف، أو نفس ملف UP3.0) — يجتاز الطلب المُنشأ تقييم
ضوابط واحدًا يُرجع حكمًا واحدًا: **allow** أو **review** أو **block**.

<Warning>
  كل تحكم في هذه الصفحة **مملوك للمستأجر ومعطل افتراضيًا**. Orbit هي
  القناة، لا مالك الامتثال: أعلام الطرح لكل مستأجر تشحن معطلة OFF
  (قدرة لم تُفعّلها أبدًا محظورة لإرسالاتك، لكن يمكنك تفعيلها)،
  وساعات الهدوء **تُبقي** الإرسال فقط وعندما *أنت* هيّأت نافذة — غياب
  التهيئة يعني أن الإرسال لا يُحتجز أبدًا — وقائمة الروابط العميقة
  المسموحة هي قائمة تُنظِّمها أنت. خطّي الرفض على الجانب المنصِّي ضد
  الإساءة، لا قواعد امتثال: احترام STOP صريح من المستلم، ورفض URL
  يوسم ماسح السمعة خبيثًا (حماية smishing لسمعة المرسل المشتركة).
  تفعيل علم هو قرارك اتخذته باستشارتك التنظيمية الخاصة.
</Warning>

## لماذا الوضع الافتراضي آمن بشكل افتراضي

أسطح UP3.0 الأغنى توسع كلا من سطح الهجوم وتجربة المستلم: رابط عميق
غني يسلّم للمستلم إجراء داخل التطبيق قابلاً للنقر، وتشفير MLS من
طرف إلى طرف يضع محتوى الرسالة بعيدًا عن فحص المنصة. موقف Orbit هو
أن المستأجر يتبنى تلك الأسطح **عمدًا، قدرة واحدة في كل مرة**:

* ملف UP3.0، وMLS E2EE، وإقرار E2EE، كلها **معطلة افتراضيًا**. إرسال
  يطلب قدرة لم يُفعّلها المستأجر أبدًا تُرفض قبل الإرسال — لا يمكنك
  شحن حركة UP3.0 عن غير قصد.
* سمعة URL الصادرة تحكم التوصيل: روابط العميقة الغنية والبديلة
  تُقيَّم قبل الإرسال، وحكم مشبوه يحظر ما لم تُسمِ المضيف صراحة. هذه
  حماية smishing لسمعة المرسل المشتركة — البوابة المنصّية الوحيدة في
  هذه الصفحة عدى نقل STOP.
* كل شيء قابل للتهيئة من المستأجر يبقى **مفتوحًا افتراضيًا في معنى
  الفشل المفتوح**: ساعات هدوء بدون نافذة مُهيّأة لا تحتجز إرسالًا
  أبدًا، ونافذة مشوهة تُفك ترميزها كـ "مفتوح"، وقدرة لا يدعمها
  المستلم تتدهور إلى `fallback_url` للشريحة بدلاً من الفشل.

## حكم الضوابط

مسار الإرسال يُنشئ كل بوابة في كائن حكم واحد:

| الحقل       | الشكل                                                           | المعنى                                                                                                                    |
| ----------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `decision`  | `allow` \| `review` \| `block`                                  | النتيجة الكلية. أي سبب بشدة `block` يفرض `block`؛ وإلا أي سبب `warn` يُنتج `review` (احتجاز)؛ وإلا `allow`.               |
| `blocked`   | boolean                                                         | علم ملائم: `true` فقط إذا `decision === "block"`.                                                                         |
| `reasons[]` | `{ code, severity, detail }`                                    | كل إشارة أطلقت، بترتيب التقييم. `severity` هي `block` (رفض)، أو `warn` (احتجاز)، أو `info` (إعلام).                       |
| `flags`     | `{ requiresUniversalProfile3, requiresE2ee, contentScanBlind }` | حقائق مستخلصة عن الإرسال، محمولة إلى سجل التدقيق. `contentScanBlind` يوسم حمولة E2EE لا يقدر ماسح المحتوى المنصِّي فحصها. |

أكواد الأسباب، مقتبسة من المُقيِّم:

| الكود                    | الشدة | متى يُطلق                                                                                                                                        |
| ------------------------ | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `rollout_up3_disabled`   | block | الإرسال يطلب `universal_profile_3` لكن علم طرح UP3.0 للمستأجر معطل.                                                                              |
| `rollout_mls_disabled`   | block | الإرسال يطلب `mls_e2ee` لكن علم طرح MLS/E2EE للمستأجر معطل.                                                                                      |
| `recipient_opted_out`    | block | المستلم لديه STOP نشط على RCS أو قناة مساوية (انظر أدناه).                                                                                       |
| `e2ee_scan_ack_required` | block | الإرسال يطلب MLS E2EE لكن المستأجر لم يُقر بنقطة فحص المحتوى العمياء ويسجل أساسًا قانونيًا.                                                      |
| `deep_link_malicious`    | block | رابط عميق غني أو URL بديل فُحص `malicious` ومضيفه ليس في قائمتك المسموحة.                                                                        |
| `deep_link_suspicious`   | warn  | URL غير مُسمح به فُحص `suspicious` — محتجز للمراجعة، لا مرفوض.                                                                                   |
| `quiet_hours`            | warn  | ساعة المستلم المحلية داخل نافذة ساعات الهدوء — محتجز حتى تُغلق النافذة، لا يُحظر صراحة أبدًا.                                                    |
| `content_scan_blind`     | info  | الإرسال هو E2EE؛ إدارة المحتوى المنصِّية لا تقدر فحص الحمولة. تُظهر على الحكم حتى عندما يُسمح الإرسال، حتى تُختم النقطة العمياء على سجل التدقيق. |

**مساوية الموافقة.** STOP يُنقل عبر القنوات لكنه لا يُنشئ نظام حكم
جديد: انسحاب صريح للمستلم مسجل على RCS أو أي قناة مساوية يُخنق
إرسال UP3.0 تمامًا كما يُخنق إرسال RCS عادي. الحكم لا يوسّع
الانسحاب — يرفض السماح لقناة أغنى بتجاوز قناة موجودة.

**فك ترميز ساعات الهدوء.** النافذة هي `<startHour, endHour>` بساعات
كاملة `[0, 24)`، محلية للمستلم، وقد تلتف بعد منتصف الليل
(`21 → 8` تحتجز 21:00 حتى 07:59). نافذة فارغة (`start === end`)
أو حد خارج النطاق تُفك ترميزها كـ **مفتوح** — تهيئة مشوهة تفشل
مفتوحة بدلاً من حكم كل إرسال صامتًا. ساعة صالحة تقع داخل النافذة
تُنتج احتجاز `warn` فقط؛ لا تحظر أبدًا.

## دليل مشغل المستأجر

**تفعيل قدرة.** الأعلام الثلاثة للطرح — UP3.0، MLS E2EE، وإقرار
فحص المحتوى E2EE — هي لكل مستأجر ومعطلة افتراضيًا. فعِّل UP3.0
أولاً؛ إرسال MLS بدون علم UP3.0 يفشل على كلا البوابتين. لا تطلب
`mls_e2ee` على إرسال حتى يُسجل الإقرار بالنقطة العمياء: تشفير
حقيقي من طرف إلى طرف يُزيل فحص CSAM والتهديدات الوسائطية المنصِّي
على تلك القناة، والمنصة تحتجز كل إرسال مشفر حتى تتملكه. هذا
الإقرار هو الشرط الذي يجعل E2EE قابلاً للشحن — المنصة لن تُشفِّر
قناة عمياء لم توقع عليها.

**افحص المستلم أولاً.** دعم UP3.0 يُتفاوض لكل مستلم ولكل
روبوت — روبوت يُتيج روابط عميقة غنية لـ MSISDN واحد قد يتحدث
UP 2.x إلى التالي. شغِّل فحص القدرة (سطح النقطة النهائية أدناه)
قبل حملة واقرأ `universalProfileVersion` و`featureFlags`:

* `featureFlags.richLinkSupported` — المستلم يُتيج `rich_link_action`
  كرابط عميق حقيقي. عند `false`، المستلم يفتح `fallback_url` بدلاً
  من ذلك، ولهذا كلا الـ URLs مطلوبان على الشريحة.
* `universalProfileVersion: "3.0"` — عتبة الروابط العميقة الغنية
  وMLS. مستلم يُتفاوض 2.x لا يقدر تيج الشريحة؛ خطط لذلك.
* الأحكام الإيجابية تُخزّن 24 ساعة، حتى يكون مسح ما قبل الإرسال
  عبر مقطع رخيصًا.

**التنازل عندما لا يدعم UP3.0.** إذا فشل فحص القدرة أو فحص
الإرسال المتضمن، يُقطع إرسال RCS قصيرًا بـ
`RCS_NOT_SUPPORTED` وسلسلة التنازل عبر القنوات على مستوى منظمتك
تتقدم (عادة RCS → SMS). مستلم يدعم RCS لكن يُتيج فقط
`fallback_url` ليس مسار خطأ — هذا التدهور المُصمَّم للشريحة على
هواتف غير UP3.0.

**نظِّم قائمة الروابط العميقة المسموحة.** مضيفات تملكها يمكن
إعفاؤها من نجاح السمعة: مُدخل يُطابق المضيف بالضبط أو أي نطاق
فرعي (مثال `acme.example` يُجيز `acme.example` و`t.acme.example`).
استخدمها لنطاقاتك فقط — إجازة مُختصر طرف ثالث تُزيل شاشة
smishing لكل مستلم.

## سطح نقطة النهاية

كل إرسالات وفحوص القدرة متجذرة في
`https://api.orbit.devotel.io/api/v1`.

| نقطة النهاية                          | الغرض                                                                                                    |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `POST /messages/rcs`                  | أرسل رسالة RCS. تقييم الضوابط يعمل متضمنًا في كل إرسال قبل الإرسال.                                      |
| `GET /rcs/capability/{botId}/{phone}` | مسب قدرة مستلم عبر روبوت معين؛ يُرجع `isCapable` و`features` و`universalProfileVersion` و`featureFlags`. |

الرابط العميق نفسه هو إجراء شريحة اقتراح على حمولة الإرسال:

```json theme={null}
{ "action": {
    "text": "Track Order",
    "postback_data": "track_12345",
    "rich_link_action": {
      "deep_link": "https://app.acme.example/track/12345",
      "fallback_url": "https://www.acme.example/track/12345",
      "app_link": "acme://track/12345",
      "tracking_params": { "campaign": "order-updates" }
    } } }
```

`deep_link` (هدف هاتف UP3.0) و`fallback_url` (كل مستلم آخر) كلاهما
URLs HTTPS مطلوبة؛ `app_link` و`tracking_params` بيانات وصفية اختيارية
محمولة إلى الإجراء المُتيج. كلا الـ URLs — بالإضافة إلى البديل — هي
ما يُقيِّم مسح السمعة قبل الإرسال. عقد الشريحة الكامل (استبعاد متبادل
مع `open_url`، حدود الشريحة، موضع الدوّار) على
[صفحة قناة RCS](/channels/rcs).

## مثال عملي: محظور، أُعيد إصدار، مُثبت

**1. الإرسال الملوث يحظر.** أرسلت شريحة حملة `fallback_url` تشير
إلى مُختصر روابط طرف ثالث تغذية السمعة تُدرجه بالفعل. الضوابط
تُرجع:

```json theme={null}
{
  "decision": "block",
  "blocked": true,
  "reasons": [
    { "code": "deep_link_malicious", "severity": "block",
      "detail": "A rich deep-link or fallback URL was flagged malicious by URL reputation. Remove or allowlist the destination before sending." }
  ],
  "flags": { "requiresUniversalProfile3": true, "requiresE2ee": false,
             "contentScanBlind": false }
}
```

الإرسال لا يُرسل أبدًا — المستلم لا يرى الرابط أبدًا.

**2. أعد إصدار برابط نظيف.** أعد توجيه الشريحة إلى نطاقك وأرسل
مجددًا. الآن الحكم `{ "decision": "allow", "reasons": [] }` والرسالة
تُرسل. لو المضيف فُحص ببساطة `suspicious`، احتجز الإرسال للمراجعة
(`decision: "review"`) بدلاً من الإرسال أو الحظر — حجر يحرره بعدما
تحققت الوجهة.

**3. فريق أحمر: المضيف المسموح به.** قائمتك المسموحة تحتوي
`acme.example`. اختبار فريق أحمر يُرسل شريحة `deep_link` فيها
`https://acme.example.evil.example/phish` — مضيف *ينتهي* بسلسلة
نطاقك لكنه ليس نطاقًا فرعيًا له. التطابق هو مضيف بالضبط أو
`host.endsWith("." + entry)`، فـ `acme.example.evil.example` **ليس**
مسموحًا به، ودرجته الخبيثة تصمد، والإرسال محظور. هذا هو الافتراض
الآمن يُمسك الشكل المشابه.

## سجل التدقيق

كل حكم يُسجل سجلًا يمكنك قراءته عودة:

* أكواد `reasons[]` (`deep_link_malicious`، `rollout_up3_disabled`،
  `recipient_opted_out`، `e2ee_scan_ack_required`، `quiet_hours`،
  `content_scan_blind`) قابلة للقراءة الآلية ومختومة على سجل تدقيق
  الرسالة، حتى يُفسّر إرسال محظور أو محتجز ذاته لاحقًا.
* علامة `flags.contentScanBlind` تُرافق أي إرسال E2EE مسموح —
  سجل التدقيق يحفظ أن المنصة عمية عن الحمولة، حتى لا تُخطئ مراجعة
  لاحقة "لا نتيجة مسح" لـ "فُحص نظيفًا".
* إرسالات محظورة تُظهر في حالة الرسالة وسجل التوصيل؛ قطع قصير لفحص
  القدرة يقرأ كـ `RCS_NOT_SUPPORTED`، وحظر سمعة يقرأ مع أسباب الحكم.
* نتائج سمعة URL وراء حكم `deep_link_*` هي نفس الإشارات محمولة على
  مسح SMS/compose — ماسح واحد، شكل تدقيق واحد، عبر القنوات.

## المراجع ذات الصلة

* [قناة RCS](/channels/rcs) — عقد الشريحة، فحص القدرة، وسلسلة
  التنازل.
* [دليل انضمام RCS](/guides/rcs-onboarding) — العلامة → الوكيل →
  التحقق → الإطلاق.
* [بوابات الإرسال](/compliance/send-gates) — ساعات الهدوء، DNC،
  RND، والبوابات الأخرى وقت الإرسال.
* [إدارة الموافقة](/compliance/consent-management) — سجلات الموافقة
  التي يقرأ بها مساوية STOP.
* [قوائم الانسحاب والحظر](/compliance/opt-out-suppression) — طبقة
  الحظر التي يحترمها بوابة انسحاب المستلم.
