# لغة الشرائح

تقدم Pushwoosh محرك تجزئة قويًا لبناء شرائح دقيقة بناءً على قيم العلامات (Tags). **لغة الشرائح** هي طريقة محددة لكتابة ودمج معايير التجزئة لوصف مجموعة معينة من المستخدمين الذين يطابقون تلك المعايير ومعاملتهم كشريحة جمهور واحدة.

يصف هذا المقال المفاهيم الأساسية وبناء الجملة للغة الشرائح ويقدم أمثلة شاملة لبناء معايير التجزئة لحالات مختلفة.

## الأساسيات

كل جهاز في قاعدة المستخدمين الخاصة بك له سمات محددة مرتبطة به عبر **قيم العلامات (Tag values)**.

على سبيل المثال، لنفترض أن مستخدمة تدعى Jane تعيش في طوكيو، وعمرها 28 عامًا. سيكون لدى هذه المستخدمة العلامات التالية المعينة لجهازها:

*   Name: Jane
*   City: Tokyo
*   Age: 28

لاستهداف Jane، ستحتاج إلى وصف شريحة على النحو التالي:

`T("Name", eq, "Jane") * T("Age", eq, 28) * T("City", eq, "Tokyo")`

هذا المزيج من الشروط هو **تعبير تصفية** يستخدم في لغة الشرائح لوصف مجموعات من المستخدمين المعروفة باسم شرائح الجمهور.

## تعابير التصفية

تعبير التصفية هو سلسلة نصية تحتوي على شرط أو مجموعة من الشروط التي تصف الشريحة التي تحتاجها.

### الشروط

يصف كل شرط شريحة من الأجهزة التي تطابق المعايير المحددة في ذلك الشرط.

على سبيل المثال، يبني الشرط التالي شريحة من المستخدمين الذين يعيشون في طوكيو:

`T("City", e, "Tokyo")`

حيث

*   T هي علامة (Tag) (نوع الشرط)؛
*   eq هو عامل (operator) للتطبيق؛
*   "Tokyo" هي قيمة علامة (Tag) مرتبطة بأجهزة المستخدمين.

#### أنواع الشروط

أنواع الشروط التالية متاحة للتجزئة:

*   **A** (Application) – يصف شريحة من الأجهزة التي لديها تطبيق معين مثبت. الأسماء المستعارة: **App**، **Application**؛
*   **T** (Tag) – يصف شريحة من الأجهزة بقيم علامات (Tags) محددة؛
*   **AT** (App-scoped tag) – يبحث عن قيمة علامة داخل تطبيق معين؛ رمز التطبيق مطلوب كوسيط أول. الاسم المستعار: **Tag**؛
*   **Event** – يصف شريحة من الأجهزة التي أثارت حدثًا معينًا في Pushwoosh؛
*   **Geo** – يصف شريحة من الأجهزة ضمن نصف قطر جغرافي معين؛
*   **BTTS** – يصف شريحة من الأجهزة بناءً على أفضل وقت للإرسال إليها؛
*   **Updated** – يصف شريحة من الأجهزة بناءً على آخر طابع زمني لتحديثها؛
*   **Segment** – يشير إلى مرشح/شريحة أخرى برمزها؛

### العمليات مع الشروط

لبناء شرائح متطورة، يمكن تطبيق العمليات التالية على الشروط داخل تعبير التصفية:

#### الاتحاد (+)

يجمع الشرائح، أي يبني شريحة جديدة من المستخدمين الذين يطابقون شرطًا واحدًا على الأقل من الشروط المحددة.

<img src="/filters-segmentation-language-1.webp" alt=""/>

على سبيل المثال، لاستهداف المستخدمين الذين يعيشون في طوكيو أو في أوساكا، ستحتاج إلى وصف الشريحة بالشروط التالية:

`T("City", eq, "Tokyo") + T("City", eq, "Osaka")`

<Aside type="note">
مكافئ لعملية **الفصل المنطقي** (**OR**). يمكن أيضًا كتابته كعامل **or**.
</Aside>

#### التقاطع (\*)

ينشئ شريحة من المستخدمين الذين ينتمون إلى كلتا الشريحتين الموصوفتين بالشروط. وبالتالي، سيتم تضمين فقط أولئك المستخدمين الذين يمتثلون لكل شرط تحدده.

<img src="/filters-segmentation-language-2.webp" alt=""/>

يصف التعبير التالي شريحة من المستخدمين الذين يعيشون في طوكيو وقد حددوا أسماءهم:

`T("City", eq, "Tokyo") * T("Name", any)`

<Aside type="note">
نظير لعملية **الوصل المنطقي** (**AND**). يمكن أيضًا كتابته كعامل **and**.
</Aside>

#### الفرق (\\)

يبني شريحة من المستخدمين الذين ينتمون إلى إحدى الشرائح الموصوفة ولا ينتمون إلى الأخرى.

<img src="/filters-segmentation-language-3.webp" alt=""/>

سيتم وصف المستخدمين الذين يعيشون في طوكيو ولكن لم يقدموا أسماءهم على النحو التالي:

`T("City", eq, "Tokyo") \ T("Name", any)`

<Aside type="note">
مكافئ لعملية **النفي المنطقي** (**NOT**). يمكن أيضًا كتابته كعامل **not**.
</Aside>

#### الأقواس

تحدد ترتيب العمليات التي سيتم إجراؤها مع الشروط في تعبير التصفية الخاص بك.

على سبيل المثال، سيقوم تعبير التصفية التالي أولاً بالحصول على شريحة من مشتركي 12345-67890 الذين يبلغ عمرهم 18 عامًا ثم يطرح جميع الرجال من تلك الشريحة:

`( A("12345-67890") * T("Age", eq, 18) ) \ T("Gender", eq, "Male")`

## عوامل شروط العلامات (Tag)

لكل نوع من أنواع العلامات (Tags)، يتم تطبيق عواملها الخاصة.

### عوامل علامات الأعداد الصحيحة (Integer Tags)

*   **eq** - يساوي قيمة محددة
*   **noteq** - لا يساوي قيمة محددة
*   **lte** - أقل من أو يساوي قيمة محددة
*   **gte** - أكبر من أو يساوي قيمة محددة
*   **in** - أي من القيم المحددة
*   **notin** - لا يساوي أيًا من القيم المحددة
*   **between** - في نطاق محدد
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة

<Aside type="note" title="مثال على بناء جملة علامات الأعداد الصحيحة">
`T("int", eq, 42)`
</Aside>

### عوامل علامات السلاسل النصية (String Tags)

*   **eq** - يساوي قيمة محددة
*   **noteq** - لا يساوي قيمة محددة
*   **startswith** - يبدأ ببادئة محددة
*   **endswith** - ينتهي بلاحقة محددة
*   **contains** - يحتوي على سلسلة نصية فرعية محددة
*   **in** - يساوي أيًا من القيم المحددة
*   **notin** - لا يساوي أيًا من القيم المحددة
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة

<Aside type="note" title="أمثلة على بناء جملة علامات السلاسل النصية">
* `T("str", eq, "kangaroo")` - تطابق تام
* `T("str", startswith, "kang")` - يبدأ بـ "kang"
* `T("str", endswith, "roo")` - ينتهي بـ "roo"
* `T("str", contains, "nga")` - يحتوي على "nga" في أي مكان في السلسلة النصية
</Aside>

### عوامل علامات القوائم (List Tags)

*   **in** - الأجهزة التي لديها أي من قيم العلامات المحددة
*   **notin** - لا توجد أي من قيم العلامات المحددة مرتبطة بالجهاز
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة

<Aside type="note" title="مثال على بناء جملة علامات القوائم">
`T("list", notin, ["kangaroo", "raccoon"])`
</Aside>

### عوامل علامات التاريخ (Date Tags)

*   **eq** - يساوي التاريخ المحدد
*   **noteq** - لا يساوي التاريخ المحدد
*   **lte** - قبل أو في التاريخ المحدد
*   **gte** - بعد أو في التاريخ المحدد
*   **in** - يساوي أيًا من التواريخ المحددة
*   **notin** - لا يساوي أيًا من التواريخ المحددة
*   **between** - في نطاق محدد
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة
*   **match** - يطابق شهرًا معينًا من السنة ويومًا معينًا من الشهر.

<Aside type="note" title="أمثلة على عامل match">


* `AT("XXXXX-XXXXX", "Date tag", match month 4 day 1)` - الأجهزة التي لديها "Date tag" معينًا في الأول من أبريل من أي سنة.
* `AT("XXXXX-XXXXX", "Date tag", match month "now" day 13)` - الأجهزة التي لديها "Date tag" معينًا في اليوم الثالث عشر من الشهر الحالي.
* `AT("XXXXX-XXXXX", "Date tag", match month "now" day "now+2")` - الأجهزة التي لديها "Date tag" معينًا في يوم بعد غد. حالة استخدام شائعة: تهاني أعياد الميلاد.
</Aside>

<Aside type="note" title="أمثلة على عامل Match لشرائح الذكرى السنوية وأعياد الميلاد">
يمكنك [تجزئة المستخدمين بناءً على تواريخ تقويمية متكررة](/ar/product/audience-data-and-segmentation/segmentation/create-segments/anniversary-segments)، مثل أعياد الميلاد أو الذكرى السنوية. في هذه الحالات، يتم أخذ الشهر واليوم فقط في الاعتبار، بينما يتم تجاهل السنة.

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now")`
   **يستهدف المستخدمين الذين عيد ميلادهم اليوم** (نفس اليوم والشهر مثل اليوم).
   *استخدم هذا لإرسال تهاني أعياد الميلاد أو عروض خاصة في عيد ميلاد المستخدم الفعلي.*

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now+N")`
   **يستهدف المستخدمين الذين عيد ميلادهم بعد N أيام** (نفس الشهر واليوم، بعد N أيام من اليوم).
   *استخدم هذا لتحضير المستخدمين مسبقًا، على سبيل المثال، إرسال رسائل العد التنازلي أو تذكيرات بالأحداث القادمة.*

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now-N")`
   **يستهدف المستخدمين الذين كان عيد ميلادهم قبل N أيام**.
   *استخدم هذا لرسائل أعياد الميلاد المتأخرة أو المتابعات مثل طلبات التقييم.*
* `AT("XXXXX-XXXXX", "birthday", match month "now" day N)`
   **يستهدف المستخدمين الذين عيد ميلادهم في اليوم N من الشهر الحالي**، بغض النظر عن السنة.
   *استخدم هذا عند التخطيط لحملات شهرية ثابتة مرتبطة بتواريخ محددة (على سبيل المثال، مكافآت الولاء الشهرية في اليوم العاشر).*
</Aside>

*   **daysago eq** - يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **daysago noteq** - لا يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **daysago lte** - أقل من أو يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **daysago gte** - أكبر من أو يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **daysago between** - بين أعداد محددة من الأيام

<Aside type="note" title="أمثلة على عامل daysago">

* `T("Date tag", daysago, eq, 0)` - اليوم الحالي من الساعة 00:00 حتى اللحظة الحالية
* `T("Date tag", daysago, eq, 1)` - من الساعة 00:00 من اليوم السابق حتى الساعة 00:00 من اليوم الحالي
* `T("Date tag", daysago, gte, 1)` - كل الوقت حتى الساعة 00:00 من اليوم الحالي
* `T("Date tag", daysago, lte, 7)` - من الساعة 00:00 من اليوم قبل 6 أيام حتى اللحظة الحالية
* `T("Date tag", daysago, between, [2,7])` - من 7 إلى 2 أيام مضت.
</Aside>

*   **minutesago lte** - أقل من أو يساوي عددًا محددًا من الدقائق قبل اللحظة الحالية
*   **minutesago gte** - أكبر من أو يساوي عددًا محددًا من الدقائق قبل اللحظة الحالية

<Aside type="note" title="أمثلة على عامل minutesago">

* `T("Date tag", minutesago, lte, 30)` - آخر 30 دقيقة؛
* `T("Date tag", minutesago, gte, 60)` - قبل 60 دقيقة أو أكثر؛
* `T("Date tag", minutesago, lte, 1)` - خلال الدقيقة الأخيرة.
</Aside>

*   **daysahead** - في غضون N إلى M أيام من اليوم الحالي (UTC)، شاملة لكلا الطرفين

<Aside type="note" title="أمثلة على عامل daysahead">

`daysahead` يأخذ فترة `[from, to]` (أيام من منتصف ليل UTC اليوم، شاملة لكلا الطرفين). على عكس `daysago`، ليس له عامل فرعي — فقط شكل الفترة.

* `T("Date tag", daysahead, [0, 0])` - اليوم الحالي من 00:00 إلى 23:59:59
* `T("Date tag", daysahead, [1, 1])` - اليوم التالي من 00:00 إلى 23:59:59
* `T("Date tag", daysahead, [2, 5])` - أي لحظة من بداية يومين من الآن إلى نهاية 5 أيام من الآن
</Aside>

<Aside type="note" title="مثال على عامل التاريخ">
* `T("Date tag", eq "2022-12-05 00:00:00")`
</Aside>

### عوامل العلامات المنطقية (Boolean Tags)

*   **eq** - يساوي قيمة محددة
*   **noteq** - لا يساوي قيمة محددة
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة

<Aside type="note" title="مثال على بناء جملة العلامات المنطقية">
 `T("bool", eq, true)`
</Aside>

### عوامل علامات الأسعار (Price Tags)

*   **eq** - يساوي قيمة محددة
*   **noteq** - لا يساوي قيمة محددة
*   **lte** - أقل من أو يساوي قيمة محددة
*   **gte** - أكبر من أو يساوي قيمة محددة
*   **in** - يساوي أيًا من القيم المحددة
*   **notin** - لا يساوي أيًا من القيم المحددة
*   **between** - في نطاق محدد
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة

<Aside type="note" title="مثال على بناء جملة علامات الأسعار">
`T("price", between, ["4.2", "6.9"])`
</Aside>

### عوامل علامات الإصدار (Version Tags)

*   **eq** - يساوي قيمة محددة
*   **noteq** - لا يساوي قيمة محددة
*   **lte** - أقل من أو يساوي قيمة محددة
*   **gte** - أكبر من أو يساوي قيمة محددة
*   **in** - يساوي أيًا من القيم المحددة
*   **notin** - لا يساوي أيًا من القيم المحددة
*   **between** - في نطاق محدد
*   **any** - الأجهزة التي لديها أي قيم معينة للعلامة
*   **notset** - الأجهزة التي ليس لديها قيمة معينة للعلامة

<Aside type="note" title="مثال على بناء جملة علامات الإصدار">
`T("version", lte, "4.2")`
</Aside>

## عوامل شروط الأحداث (Event)

<Aside type="note">
يرجى الأخذ في الاعتبار أن شروط الأحداث خاصة بالتطبيق لذا يجب تحديد رمز التطبيق في تعابير التصفية الخاصة بك مع اسم الحدث.
</Aside>

### عدد الأحداث

*   **count gte** - الأجهزة التي أثارت الحدث أكثر من أو يساوي n مرة
*   **count lte** - الأجهزة التي أثارت الحدث أقل من أو يساوي n مرة
*   **count eq** - الأجهزة التي أثارت الحدث n مرة بالضبط
*   **count noteq** - الأجهزة التي أثارت الحدث أي عدد من المرات ولكن لا يساوي n

<Aside type="note" title="مثال على بناء جملة عدد الأحداث">
 `Event("11111-11111", "Level reached", count gte 10) // 11111-11111 هو رمز التطبيق`
</Aside>

### تاريخ الحدث

*   **date gte** - الأجهزة التي أثارت الحدث بعد أو في التاريخ المحدد بالضبط
*   **date lte** - الأجهزة التي أثارت الحدث قبل أو في التاريخ المحدد بالضبط
*   **date eq** - الأجهزة التي أثارت الحدث في التاريخ المحدد بالضبط
*   **date noteq** - الأجهزة التي أثارت الحدث في أي وقت ولكن ليس في التاريخ المحدد
*   **date in** - الأجهزة التي أثارت الحدث في أي من التواريخ المحددة
*   **date notin** - الأجهزة التي أثارت الحدث في أي وقت ولكن ليس في أي من التواريخ المحددة
*   **date between** - الأجهزة التي أثارت الحدث خلال فترة محددة
*   **date daysago eq** - تاريخ إثارة الحدث يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **date daysago noteq** - تاريخ إثارة الحدث لا يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **date daysago lte** - تاريخ إثارة الحدث أقل من أو يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **date daysago gte** - تاريخ إثارة الحدث أكبر من أو يساوي عددًا محددًا من الأيام قبل اليوم الحالي
*   **date daysago between** - تاريخ إثارة الحدث بين أعداد محددة من الأيام
*   **date daysahead** - تاريخ إثارة الحدث في عدد محدد من الأيام من اليوم الحالي (الفترة شاملة لكلا الطرفين، انظر عوامل علامات التاريخ أعلاه للحصول على الدلالات الكاملة)
*   **date minutesago lte** - تاريخ إثارة الحدث أقل من أو يساوي عددًا محددًا من الدقائق قبل اللحظة الحالية
*   **date minutesago gte** - تاريخ إثارة الحدث أكبر من أو يساوي عددًا محددًا من الدقائق قبل اللحظة الحالية

<Aside type="note" title="أمثلة على بناء جملة تاريخ الحدث">

- `Event("11111-11111", "Level reached", date gte "2022-01-01 01:02:03")`
- `Event("11111-11111", "Level reached", date in ["2022-01-01 01:02:03", "2022-01-01 02:03:04"])`
- `Event("11111-11111", "Level reached", date between "2022-01-01 01:02:03" "2022-01-01 02:03:04")`
- `Event("11111-11111", "Level reached", date daysahead 0 7)` - الأحداث التي لها تاريخ إثارة خلال السبعة أيام القادمة
- `Event("11111-11111", "Level reached", date minutesago lte 30)` - الأحداث خلال آخر 30 دقيقة
- `Event("11111-11111", "Level reached", date minutesago gte 60)` - الأحداث قبل 60 دقيقة أو أكثر

</Aside>

### منصات الأحداث

تصفية الأحداث حسب المنصة التي تم إثارتها فيها.

*   **platforms** - قائمة بالمنصات (على سبيل المثال، ["ios", "android"])

<Aside type="note" title="مثال على بناء جملة منصات الأحداث">
`Event("11111-11111", "Level reached", platforms ["android", "ios"], count gte 5)`
</Aside>

### سمات الأحداث

يمكن لشروط الأحداث التصفية بناءً على قيم سمات الأحداث. تدعم السمات أنواع بيانات مختلفة مع عواملها المقابلة.

#### سمات الأحداث من نوع عدد صحيح

*   **attribute "name" eq** - السمة تساوي قيمة محددة
*   **attribute "name" noteq** - السمة لا تساوي قيمة محددة
*   **attribute "name" gte** - السمة أكبر من أو تساوي قيمة محددة
*   **attribute "name" lte** - السمة أقل من أو تساوي قيمة محددة
*   **attribute "name" between** - السمة في نطاق محدد
*   **attribute "name" in** - السمة تساوي أيًا من القيم المحددة
*   **attribute "name" notin** - السمة لا تساوي أيًا من القيم المحددة
*   **attribute "name" any** - أي قيمة معينة للسمة
*   **attribute "name" notset** - لا توجد قيمة معينة للسمة

<Aside type="note" title="أمثلة على بناء جملة سمات الأعداد الصحيحة">

* `Event("11111-11111", "Purchase", attribute "amount" eq 42)`
* `Event("11111-11111", "Purchase", attribute "amount" between 10 100)`
* `Event("11111-11111", "Purchase", attribute "amount" in [10, 20, 30])`

</Aside>

#### سمات الأحداث من نوع سلسلة نصية

*   **attribute "name" eq** - السمة تساوي قيمة محددة
*   **attribute "name" noteq** - السمة لا تساوي قيمة محددة
*   **attribute "name" startswith** - السمة تبدأ ببادئة محددة
*   **attribute "name" endswith** - السمة تنتهي بلاحقة محددة
*   **attribute "name" contains** - السمة تحتوي على سلسلة نصية فرعية محددة
*   **attribute "name" in** - السمة تساوي أيًا من القيم المحددة
*   **attribute "name" notin** - السمة لا تساوي أيًا من القيم المحددة
*   **attribute "name" any** - أي قيمة معينة للسمة
*   **attribute "name" notset** - لا توجد قيمة معينة للسمة

<Aside type="note" title="أمثلة على بناء جملة سمات السلاسل النصية">

* `Event("11111-11111", "Page View", attribute "url" startswith "https://example.com")`
* `Event("11111-11111", "Page View", attribute "url" endswith ".html")`
* `Event("11111-11111", "Page View", attribute "url" contains "/products/")`
* `Event("11111-11111", "Button Click", attribute "button_name" in ["submit", "cancel"])`

</Aside>

#### سمات الأحداث المنطقية

*   **attribute "name" eq** - السمة تساوي true أو false
*   **attribute "name" noteq** - السمة لا تساوي true أو false

<Aside type="note" title="مثال على بناء جملة السمة المنطقية">
`Event("11111-11111", "Feature Toggle", attribute "enabled" eq true)`
</Aside>

#### سمات الأحداث من نوع تاريخ

*   **attribute "name" eq** - السمة تساوي تاريخًا محددًا
*   **attribute "name" noteq** - السمة لا تساوي تاريخًا محددًا
*   **attribute "name" gte** - السمة بعد أو في تاريخ محدد
*   **attribute "name" lte** - السمة قبل أو في تاريخ محدد
*   **attribute "name" between** - السمة ضمن نطاق تاريخ محدد
*   **attribute "name" in** - السمة تساوي أيًا من التواريخ المحددة
*   **attribute "name" notin** - السمة لا تساوي أيًا من التواريخ المحددة
*   **attribute "name" daysago eq/noteq/gte/lte/between** - السمة بالنسبة للأيام الماضية
*   **attribute "name" daysahead from to** - السمة في فترة محددة من الأيام من اليوم الحالي (الفترة شاملة لكلا الطرفين، انظر عوامل علامات التاريخ أعلاه للحصول على الدلالات الكاملة)
*   **attribute "name" minutesago gte/lte** - السمة بالنسبة للدقائق الماضية
*   **attribute "name" any** - أي قيمة معينة للسمة
*   **attribute "name" notset** - لا توجد قيمة معينة للسمة

<Aside type="note" title="أمثلة على بناء جملة سمات التاريخ">

* `Event("11111-11111", "Subscription", attribute "start_date" eq "2022-01-01 01:02:03")`
* `Event("11111-11111", "Subscription", attribute "start_date" between "2022-01-01 00:00:00" "2022-12-31 23:59:59")`
* `Event("11111-11111", "Subscription", attribute "start_date" daysago lte 30)` - خلال آخر 30 يومًا
* `Event("11111-11111", "Subscription", attribute "renewal_at" daysahead 0 30)` - التجديدات في الثلاثين يومًا القادمة
* `Event("11111-11111", "Subscription", attribute "start_date" minutesago gte 60)` - قبل 60 دقيقة أو أكثر

</Aside>

#### سمات الأحداث من نوع سعر

*   **attribute "name" eq** - السمة تساوي قيمة سعر محددة
*   **attribute "name" noteq** - السمة لا تساوي قيمة سعر محددة
*   **attribute "name" gte** - السمة أكبر من أو تساوي سعرًا محددًا
*   **attribute "name" lte** - السمة أقل من أو تساوي سعرًا محددًا
*   **attribute "name" between** - السمة في نطاق سعر محدد
*   **attribute "name" in** - السمة تساوي أيًا من الأسعار المحددة
*   **attribute "name" notin** - السمة لا تساوي أيًا من الأسعار المحددة
*   **attribute "name" any** - أي قيمة معينة للسمة
*   **attribute "name" notset** - لا توجد قيمة معينة للسمة

<Aside type="note" title="مثال على بناء جملة سمة السعر">
`Event("11111-11111", "Purchase", attribute "total_price" between 10.00 50.00)`
</Aside>

#### سمات الأحداث من نوع قائمة

*   **attribute "name" in** - السمة تحتوي على أي من القيم المحددة
*   **attribute "name" notin** - السمة لا تحتوي على أي من القيم المحددة
*   **attribute "name" any** - أي قيمة معينة للسمة
*   **attribute "name" notset** - لا توجد قيمة معينة للسمة

<Aside type="note" title="مثال على بناء جملة سمة القائمة">
`Event("11111-11111", "Cart Update", attribute "product_ids" in ["prod-123", "prod-456"])`
</Aside>

## أنواع الشروط الإضافية

### الشرط الجغرافي (Geo)

استهداف الأجهزة بناءً على الموقع الجغرافي ضمن نصف قطر محدد.

**بناء الجملة:** `Geo("<app-code>", <latitude>, <longitude>, <range-in-km>)`

<Aside type="note" title="مثال على بناء الجملة الجغرافي">
`Geo("11111-11111", 53.2734, -7.77832031, 100.05)` - الأجهزة ضمن 100.05 كم من الإحداثيات
</Aside>

### شرط أفضل وقت للإرسال (BTTS)

استهداف الأجهزة حسب أفضل وقت لإرسال الإشعارات إليها (ساعة اليوم، 0-23).

**العوامل:**
*   **any** - أي قيمة محددة لأفضل وقت للإرسال
*   **eq** - تطابق تام للساعة
*   **noteq** - لا يساوي الساعة
*   **gte** - الساعة أكبر من أو تساوي
*   **lte** - الساعة أقل من أو تساوي

<Aside type="note" title="أمثلة على بناء جملة BTTS">

* `BTTS("11111-11111", eq 10)` - الأجهزة التي يكون أفضل وقت للإرسال إليها هو الساعة 10:00
* `BTTS("11111-11111", gte 18)` - الأجهزة التي يكون أفضل وقت للإرسال إليها من الساعة 18:00 فصاعدًا
* `BTTS("11111-11111", any)` - الأجهزة التي لديها أي قيمة لأفضل وقت للإرسال

</Aside>

### شرط التحديث (Updated)

تصفية الأجهزة حسب آخر طابع زمني لتحديثها.

**العوامل:**
*   **gte** - تم التحديث بعد أو في تاريخ محدد
*   **lte** - تم التحديث قبل أو في تاريخ محدد
*   **between** - تم التحديث ضمن نطاق تاريخي

<Aside type="note" title="أمثلة على بناء جملة Updated">

* `Updated("11111-11111", gte "2022-01-01 00:00:00")` - الأجهزة التي تم تحديثها بعد 1 يناير 2022
* `Updated("11111-11111", lte "2022-12-31 23:59:59")` - الأجهزة التي تم تحديثها قبل 31 ديسمبر 2022
* `Updated("11111-11111", between "2022-01-01 00:00:00" "2022-12-31 23:59:59")` - الأجهزة التي تم تحديثها في عام 2022

</Aside>

### شرط الشريحة (Segment)

الإشارة إلى مرشح/شريحة أخرى برمزها.

<Aside type="note" title="مثال على بناء جملة Segment">
`Segment("11111-11111", "22222-22222")` - الإشارة إلى المرشح بالرمز "22222-22222"
</Aside>

## أعلام وجود الجهاز في شرط التطبيق

تدعم شروط التطبيق أعلامًا إضافية للتحكم في تصفية الأجهزة والرموز:

*   **with_tokens** - الأجهزة التي لديها رموز إشعارات الدفع
*   **without_tokens** - الأجهزة التي ليس لديها رموز إشعارات الدفع
*   **with_devices** - المستخدمون الذين لديهم أجهزة مسجلة
*   **without_devices** - المستخدمون/الملفات الشخصية التي ليس لديها أجهزة مسجلة

<Aside type="note" title="أمثلة على بناء جملة أعلام التطبيق">

* `A("11111-11111", ["ios", "android"], [with_tokens])` - الأجهزة التي لديها رموز دفع
* `A("11111-11111", ["ios", "android"], [without_tokens])` - الأجهزة التي ليس لديها رموز دفع
* `A("11111-11111", [], [with_devices])` - جميع الأجهزة التي لديها سجلات أجهزة
* `A("11111-11111", ["ios", "android"], [without_tokens, with_devices])` - الأجهزة التي ليس لديها رموز ولكن لديها سجلات أجهزة

</Aside>

## أمثلة على تعابير التصفية

<Aside type="note">
عند كتابة استعلامات JSON، تأكد من تهريب علامات الاقتباس (`"`) والشرطات المائلة العكسية (`\`) بشرطة مائلة عكسية (`\`).
للحصول على مثال للطلب، انظر [/exportSegment](/ar/developer/api-reference/segmentation-filters-api/#exportsegment).
</Aside>

### أمثلة أساسية

1.  أجهزة iOS و Android التي تم تثبيت التطبيق عليها ولديها رموز دفع:

```json
A("11111-11111", ["ios","android"], [with_tokens])
```

2.  أجهزة iOS و Android التي تم تثبيت التطبيق عليها ولكن ليس لديها رموز دفع:

```json
A("11111-11111", ["ios","android"], [without_tokens])
```

3.  أجهزة iOS و Android التي تم تثبيت التطبيق عليها، سواء كان لديها رموز دفع أم لا:

```json
A("11111-11111", ["ios","android"], [with_tokens, without_tokens])
```

4.  جميع مشتركي التطبيق الذين اشتروا شيئًا ما في التطبيق:

```json
AT("11111-11111", "In-App Purchase", gte, 1)
```

### أمثلة متقدمة

5.  المستخدمون في طوكيو الذين فتحوا التطبيق في آخر 7 أيام:

```json
T("City", eq, "Tokyo") * Event("11111-11111", "App Open", date daysago lte 7)
```

6.  المستخدمون الذين أجروا عملية شراء تزيد عن 50 دولارًا في آخر 30 يومًا:

```json
Event("11111-11111", "Purchase", attribute "total_price" gte 50.00, date daysago lte 30)
```

7.  المستخدمون الذين تبدأ أسماؤهم بحرف "J" أو تنتهي بحرف "e":

```json
T("Name", startswith, "J") + T("Name", endswith, "e")
```

8.  مستخدمو iOS النشطون على بعد 100 كم من نيويورك الذين لم يشتروا مؤخرًا:

```json
A("11111-11111", ["ios"], [with_tokens]) * Geo("11111-11111", 40.7128, -74.0060, 100) \ Event("11111-11111", "Purchase", date daysago lte 30)
```

9.  المستخدمون الذين يكون أفضل وقت للإرسال إليهم بين الساعة 9 صباحًا و 5 مساءً:

```json
BTTS("11111-11111", gte 9) * BTTS("11111-11111", lte 17)
```

10. المستخدمون الذين أثاروا حدثًا معينًا على Android أو iOS في الساعة الأخيرة:

```json
Event("11111-11111", "Button Click", platforms ["android", "ios"], date minutesago lte 60)
```

11. الأجهزة التي تم تحديثها في آخر 3 أشهر بإصدار تطبيق 4.2 أو أعلى:

```json
Updated("11111-11111", gte "2024-07-01 00:00:00") * AT("11111-11111", "App Version", gte, "4.2")
```