# Segmentierungssprache

Pushwoosh bietet eine leistungsstarke Segmentierungs-Engine zum Erstellen granularer Segmente basierend auf Tag-Werten. Die **Segmentierungssprache** ist eine spezielle Methode zum Schreiben und Kombinieren von Segmentierungskriterien, um eine bestimmte Gruppe von Benutzern zu beschreiben, die diesen Kriterien entsprechen, und sie als ein einziges Zielgruppensegment zu behandeln.

Dieser Artikel beschreibt die grundlegenden Konzepte und die Syntax der Segmentierungssprache und bietet umfassende Beispiele für die Erstellung von Segmentierungskriterien für verschiedene Anwendungsfälle.

## Grundlagen

Jedes Gerät in Ihrer Benutzerbasis hat spezifische Attribute, die ihm über **Tag-Werte** zugeordnet sind.

Nehmen wir zum Beispiel an, eine Benutzerin namens Jane lebt in Tokio und ist 28 Jahre alt. Für ihr Gerät werden die folgenden Tags gesetzt:

*   Name: Jane
*   Stadt: Tokio
*   Alter: 28

Um Jane anzusprechen, müssen Sie ein Segment wie folgt beschreiben:

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

Diese Kombination von Bedingungen ist ein **Filterausdruck**, der in der Segmentierungssprache verwendet wird, um Benutzergruppen, also Zielgruppensegmente, zu beschreiben.

## Filterausdrücke

Ein Filterausdruck ist eine Zeichenfolge, die eine Bedingung oder eine Kombination von Bedingungen enthält, die das benötigte Segment beschreiben.

### Bedingungen

Jede Bedingung beschreibt ein Segment von Geräten, die den in dieser Bedingung angegebenen Kriterien entsprechen.

Zum Beispiel erstellt die folgende Bedingung ein Segment von Benutzern, die in Tokio leben:

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

wobei

*   T ein Tag ist (Bedingungstyp);
*   eq der anzuwendende Operator ist;
*   "Tokyo" ein Tag-Wert ist, der den Geräten der Benutzer zugeordnet ist.

#### Bedingungstypen

Die folgenden Bedingungstypen sind für die Segmentierung verfügbar:

*   **A** (Application) – beschreibt ein Segment von Geräten, auf denen eine bestimmte App installiert ist. Aliase: **App**, **Application**;
*   **T** (Tag) – beschreibt ein Segment von Geräten mit den angegebenen Tag-Werten;
*   **AT** (App-scoped tag) – sucht nach einem Tag-Wert innerhalb einer bestimmten Anwendung; der App-Code ist als erstes Argument erforderlich. Alias: **Tag**;
*   **Event** – beschreibt ein Segment von Geräten, die ein bestimmtes Pushwoosh-Ereignis ausgelöst haben;
*   **Geo** – beschreibt ein Segment von Geräten innerhalb eines bestimmten geografischen Radius;
*   **BTTS** – beschreibt ein Segment von Geräten basierend auf ihrer besten Sendezeit;
*   **Updated** – beschreibt ein Segment von Geräten basierend auf ihrem letzten Aktualisierungszeitstempel;
*   **Segment** – verweist auf einen anderen Filter/ein anderes Segment anhand seines Codes;

### Operationen mit Bedingungen

Für die Erstellung komplexer Segmente können die folgenden Operationen auf Bedingungen innerhalb des Filterausdrucks angewendet werden:

#### Vereinigung (+)

Verbindet die Segmente, d.h. erstellt ein neues Segment von Benutzern, die mindestens eine der angegebenen Bedingungen erfüllen.

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

Um beispielsweise Benutzer anzusprechen, die in Tokio oder in Osaka leben, müssen Sie das Segment mit den folgenden Bedingungen beschreiben:

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

<Aside type="note">
Entspricht der logischen **Disjunktion** (**ODER**). Kann auch als **or**-Operator geschrieben werden.
</Aside>

#### Schnittmenge (\*)

Konstruiert ein Segment von Benutzern, die zu beiden durch die Bedingungen beschriebenen Segmenten gehören. Es werden also nur diejenigen Benutzer eingeschlossen, die jede von Ihnen angegebene Bedingung erfüllen.

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

Der folgende Ausdruck beschreibt ein Segment von Benutzern, die sowohl in Tokio leben als auch ihre Namen angegeben haben:

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

<Aside type="note">
Analog zur logischen **Konjunktion** (**UND**). Kann auch als **and**-Operator geschrieben werden.
</Aside>

#### Differenz (\\)

Erstellt ein Segment von Benutzern, die zu einem der beschriebenen Segmente gehören und nicht zu einem anderen.

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

Benutzer, die in Tokio leben, aber ihre Namen nicht angegeben haben, werden wie folgt beschrieben:

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

<Aside type="note">
Entspricht der logischen **Negation** (**NICHT**). Kann auch als **not**-Operator geschrieben werden.
</Aside>

#### Klammern

Bestimmen die Reihenfolge der Operationen, die mit den Bedingungen in Ihrem Filterausdruck ausgeführt werden sollen.

Zum Beispiel wird der folgende Filterausdruck zuerst ein Segment der 12345-67890-Abonnenten ermitteln, deren Alter 18 ist, und dann alle Männer dieses Segments abziehen:

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

## Operatoren für Tag-Bedingungen

Für jeden Tag-Typ werden eigene Operatoren angewendet.

### Operatoren für Integer-Tags

*   **eq** - gleich einem bestimmten Wert
*   **noteq** - nicht gleich einem bestimmten Wert
*   **lte** - kleiner als oder gleich einem bestimmten Wert
*   **gte** - größer als oder gleich einem bestimmten Wert
*   **in** - einer der angegebenen Werte
*   **notin** - nicht gleich einem der angegebenen Werte
*   **between** - in einem bestimmten Bereich
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag

<Aside type="note" title="Syntaxbeispiel für Integer-Tags">
`T("int", eq, 42)`
</Aside>

### Operatoren für String-Tags

*   **eq** - gleich einem bestimmten Wert
*   **noteq** - nicht gleich einem bestimmten Wert
*   **startswith** - beginnt mit einem bestimmten Präfix
*   **endswith** - endet mit einem bestimmten Suffix
*   **contains** - enthält eine bestimmte Teilzeichenfolge
*   **in** - gleich einem der angegebenen Werte
*   **notin** - nicht gleich einem der angegebenen Werte
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag

<Aside type="note" title="Syntaxbeispiele für String-Tags">
* `T("str", eq, "kangaroo")` - exakte Übereinstimmung
* `T("str", startswith, "kang")` - beginnt mit "kang"
* `T("str", endswith, "roo")` - endet mit "roo"
* `T("str", contains, "nga")` - enthält "nga" an beliebiger Stelle in der Zeichenfolge
</Aside>

### Operatoren für Listen-Tags

*   **in** - Geräte mit einem der angegebenen Tag-Werte
*   **notin** - keiner der angegebenen Tag-Werte ist dem Gerät zugeordnet
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag

<Aside type="note" title="Syntaxbeispiel für Listen-Tags">
`T("list", notin, ["kangaroo", "raccoon"])`
</Aside>

### Operatoren für Datums-Tags

*   **eq** - gleich dem angegebenen Datum
*   **noteq** - nicht gleich dem angegebenen Datum
*   **lte** - vor oder am angegebenen Datum
*   **gte** - nach oder am angegebenen Datum
*   **in** - gleich einem der angegebenen Daten
*   **notin** - nicht gleich einem der angegebenen Daten
*   **between** - in einem bestimmten Bereich
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag
*   **match** - stimmt mit einem angegebenen Monat des Jahres und Tag des Monats überein.

<Aside type="note" title="Beispiele für den match-Operator">


* `AT("XXXXX-XXXXX", "Date tag", match month 4 day 1)` - Geräte, bei denen das "Date tag" auf den 1. April eines beliebigen Jahres gesetzt ist.
* `AT("XXXXX-XXXXX", "Date tag", match month "now" day 13)` - Geräte, bei denen das "Date tag" auf den 13. Tag des aktuellen Monats gesetzt ist.
* `AT("XXXXX-XXXXX", "Date tag", match month "now" day "now+2")` - Geräte, bei denen das "Date tag" auf übermorgen gesetzt ist. Häufiger Anwendungsfall: Geburtstagsgrüße.
</Aside>

<Aside type="note" title="Beispiele für den Match-Operator für Jubiläums- und Geburtstagssegmente">
Sie können [Benutzer basierend auf wiederkehrenden Kalenderdaten segmentieren](/de/product/audience-data-and-segmentation/segmentation/create-segments/anniversary-segments), wie Geburtstagen oder Jubiläen. In diesen Fällen werden nur Monat und Tag berücksichtigt, während das Jahr ignoriert wird.

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now")`
   **Zielt auf Benutzer, deren Geburtstag heute ist** (gleicher Tag und Monat wie heute).
   *Verwenden Sie dies, um Geburtstagsgrüße oder Sonderangebote am tatsächlichen Geburtstag des Benutzers zu senden.*

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now+N")`
   **Zielt auf Benutzer, deren Geburtstag in N Tagen ist** (gleicher Monat und Tag, N Tage ab heute).
   *Verwenden Sie dies, um Benutzer im Voraus vorzubereiten, z. B. um Countdown-Nachrichten oder Erinnerungen an bevorstehende Ereignisse zu senden.*

* `AT("XXXXX-XXXXX", "birthday", match month "now" day "now-N")`
   **Zielt auf Benutzer, deren Geburtstag vor N Tagen war**.
   *Verwenden Sie dies für verspätete Geburtstagsnachrichten oder Follow-ups wie Feedback-Anfragen.*
* `AT("XXXXX-XXXXX", "birthday", match month "now" day N)`
   **Zielt auf Benutzer, deren Geburtstag am N. Tag des aktuellen Monats ist**, unabhängig vom Jahr.
   *Verwenden Sie dies bei der Planung fester monatlicher Kampagnen, die an bestimmte Daten gebunden sind (z. B. monatliche Treueprämien am 10.).*
</Aside>

*   **daysago eq** - gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **daysago noteq** - nicht gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **daysago lte** - kleiner als oder gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **daysago gte** - größer als oder gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **daysago between** - zwischen den angegebenen Anzahlen von Tagen

<Aside type="note" title="Beispiele für den daysago-Operator">

* `T("Date tag", daysago, eq, 0)` - der heutige Tag von 00:00 bis zum aktuellen Moment
* `T("Date tag", daysago, eq, 1)` - von 00:00 des Vortages bis 00:00 des heutigen Tages
* `T("Date tag", daysago, gte, 1)` - die gesamte Zeit bis 00:00 des heutigen Tages
* `T("Date tag", daysago, lte, 7)` - von 00:00 des Tages vor 6 Tagen bis zum aktuellen Moment
* `T("Date tag", daysago, between, [2,7])` - von 7 bis 2 Tagen zuvor.
</Aside>

*   **minutesago lte** - kleiner als oder gleich einer bestimmten Anzahl von Minuten vor dem aktuellen Moment
*   **minutesago gte** - größer als oder gleich einer bestimmten Anzahl von Minuten vor dem aktuellen Moment

<Aside type="note" title="Beispiele für den minutesago-Operator">

* `T("Date tag", minutesago, lte, 30)` - die letzten 30 Minuten;
* `T("Date tag", minutesago, gte, 60)` - vor 60 oder mehr Minuten;
* `T("Date tag", minutesago, lte, 1)` - innerhalb der letzten Minute.
</Aside>

*   **daysahead** - in N bis M Tagen ab dem heutigen Tag (UTC), beidseitig einschließlich

<Aside type="note" title="Beispiele für den daysahead-Operator">

`daysahead` verwendet ein `[von, bis]`-Intervall (Tage ab heute Mitternacht UTC, beide Enden einschließlich). Im Gegensatz zu `daysago` hat es keinen Unteroperator – nur die Intervallform.

* `T("Date tag", daysahead, [0, 0])` - der heutige Tag von 00:00 bis 23:59:59
* `T("Date tag", daysahead, [1, 1])` - der nächste Tag von 00:00 bis 23:59:59
* `T("Date tag", daysahead, [2, 5])` - jeder Moment vom Beginn in 2 Tagen bis zum Ende in 5 Tagen
</Aside>

<Aside type="note" title="Beispiel für den date-Operator">
* `T("Date tag", eq "2022-12-05 00:00:00")`
</Aside>

### Operatoren für Boolesche Tags

*   **eq** - gleich einem bestimmten Wert
*   **noteq** - nicht gleich einem bestimmten Wert
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag

<Aside type="note" title="Syntaxbeispiel für Boolesche Tags">
 `T("bool", eq, true)`
</Aside>

### Operatoren für Preis-Tags

*   **eq** - gleich einem bestimmten Wert
*   **noteq** - nicht gleich einem bestimmten Wert
*   **lte** - kleiner als oder gleich einem bestimmten Wert
*   **gte** - größer als oder gleich einem bestimmten Wert
*   **in** - gleich einem der angegebenen Werte
*   **notin** - nicht gleich einem der angegebenen Werte
*   **between** - in einem bestimmten Bereich
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag

<Aside type="note" title="Syntaxbeispiel für Preis-Tags">
`T("price", between, ["4.2", "6.9"])`
</Aside>

### Operatoren für Versions-Tags

*   **eq** - gleich einem bestimmten Wert
*   **noteq** - nicht gleich einem bestimmten Wert
*   **lte** - kleiner als oder gleich einem bestimmten Wert
*   **gte** - größer als oder gleich einem bestimmten Wert
*   **in** - gleich einem der angegebenen Werte
*   **notin** - nicht gleich einem der angegebenen Werte
*   **between** - in einem bestimmten Bereich
*   **any** - Geräte mit beliebigen Werten für das Tag
*   **notset** - Geräte ohne Wert für das Tag

<Aside type="note" title="Syntaxbeispiel für Versions-Tags">
`T("version", lte, "4.2")`
</Aside>

## Operatoren für Ereignisbedingungen

<Aside type="note">
Bitte beachten Sie, dass die Ereignisbedingungen App-spezifisch sind, daher sollte der App-Code in Ihren Filterausdrücken zusammen mit dem Ereignisnamen angegeben werden.
</Aside>

### Ereignisanzahl

*   **count gte** - Geräte, die das Ereignis mehr als oder genau n-mal ausgelöst haben
*   **count lte** - Geräte, die das Ereignis weniger als oder genau n-mal ausgelöst haben
*   **count eq** - Geräte, die das Ereignis genau n-mal ausgelöst haben
*   **count noteq** - Geräte, die das Ereignis beliebig oft, aber nicht genau n-mal ausgelöst haben

<Aside type="note" title="Syntaxbeispiel für Ereignisanzahl">
 `Event("11111-11111", "Level reached", count gte 10) // 11111-11111 ist ein App-Code`
</Aside>

### Ereignisdatum

*   **date gte** - Geräte, die das Ereignis später als oder genau am angegebenen Datum ausgelöst haben
*   **date lte** - Geräte, die das Ereignis früher als oder genau am angegebenen Datum ausgelöst haben
*   **date eq** - Geräte, die das Ereignis genau am angegebenen Datum ausgelöst haben
*   **date noteq** - Geräte, die das Ereignis jederzeit, aber nicht am angegebenen Datum ausgelöst haben
*   **date in** - Geräte, die das Ereignis an einem der angegebenen Daten ausgelöst haben
*   **date notin** - Geräte, die das Ereignis jederzeit, aber nicht an einem der angegebenen Daten ausgelöst haben
*   **date between** - Geräte, die das Ereignis innerhalb eines bestimmten Zeitraums ausgelöst haben
*   **date daysago eq** - Auslösedatum des Ereignisses ist gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **date daysago noteq** - Auslösedatum des Ereignisses ist nicht gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **date daysago lte** - Auslösedatum des Ereignisses ist kleiner als oder gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **date daysago gte** - Auslösedatum des Ereignisses ist größer als oder gleich einer bestimmten Anzahl von Tagen vor dem heutigen Tag
*   **date daysago between** - Auslösedatum des Ereignisses liegt zwischen den angegebenen Anzahlen von Tagen
*   **date daysahead** - Auslösedatum des Ereignisses liegt in einer bestimmten Anzahl von Tagen ab dem heutigen Tag (Intervall ist an beiden Enden einschließlich, siehe Operatoren für Datums-Tags oben für die vollständige Semantik)
*   **date minutesago lte** - Auslösedatum des Ereignisses ist kleiner als oder gleich einer bestimmten Anzahl von Minuten vor dem aktuellen Moment
*   **date minutesago gte** - Auslösedatum des Ereignisses ist größer als oder gleich einer bestimmten Anzahl von Minuten vor dem aktuellen Moment

<Aside type="note" title="Syntaxbeispiele für Ereignisdatum">

- `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)` - Ereignisse mit einem Auslösedatum innerhalb der nächsten 7 Tage
- `Event("11111-11111", "Level reached", date minutesago lte 30)` - Ereignisse innerhalb der letzten 30 Minuten
- `Event("11111-11111", "Level reached", date minutesago gte 60)` - Ereignisse vor 60+ Minuten

</Aside>

### Ereignisplattformen

Filtern Sie Ereignisse nach der Plattform, auf der sie ausgelöst wurden.

*   **platforms** - Liste der Plattformen (z.B. ["ios", "android"])

<Aside type="note" title="Syntaxbeispiel für Ereignisplattformen">
`Event("11111-11111", "Level reached", platforms ["android", "ios"], count gte 5)`
</Aside>

### Ereignisattribute

Ereignisbedingungen können basierend auf den Werten von Ereignisattributen filtern. Attribute unterstützen verschiedene Datentypen mit ihren entsprechenden Operatoren.

#### Integer-Ereignisattribute

*   **attribute "name" eq** - Attribut ist gleich einem bestimmten Wert
*   **attribute "name" noteq** - Attribut ist nicht gleich einem bestimmten Wert
*   **attribute "name" gte** - Attribut ist größer als oder gleich einem bestimmten Wert
*   **attribute "name" lte** - Attribut ist kleiner als oder gleich einem bestimmten Wert
*   **attribute "name" between** - Attribut liegt in einem bestimmten Bereich
*   **attribute "name" in** - Attribut ist gleich einem der angegebenen Werte
*   **attribute "name" notin** - Attribut ist nicht gleich einem der angegebenen Werte
*   **attribute "name" any** - ein beliebiger Wert für das Attribut gesetzt
*   **attribute "name" notset** - kein Wert für das Attribut gesetzt

<Aside type="note" title="Syntaxbeispiele für Integer-Attribute">

* `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>

#### String-Ereignisattribute

*   **attribute "name" eq** - Attribut ist gleich einem bestimmten Wert
*   **attribute "name" noteq** - Attribut ist nicht gleich einem bestimmten Wert
*   **attribute "name" startswith** - Attribut beginnt mit einem bestimmten Präfix
*   **attribute "name" endswith** - Attribut endet mit einem bestimmten Suffix
*   **attribute "name" contains** - Attribut enthält eine bestimmte Teilzeichenfolge
*   **attribute "name" in** - Attribut ist gleich einem der angegebenen Werte
*   **attribute "name" notin** - Attribut ist nicht gleich einem der angegebenen Werte
*   **attribute "name" any** - ein beliebiger Wert für das Attribut gesetzt
*   **attribute "name" notset** - kein Wert für das Attribut gesetzt

<Aside type="note" title="Syntaxbeispiele für String-Attribute">

* `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>

#### Boolesche Ereignisattribute

*   **attribute "name" eq** - Attribut ist gleich true oder false
*   **attribute "name" noteq** - Attribut ist nicht gleich true oder false

<Aside type="note" title="Syntaxbeispiel für Boolesche Attribute">
`Event("11111-11111", "Feature Toggle", attribute "enabled" eq true)`
</Aside>

#### Datums-Ereignisattribute

*   **attribute "name" eq** - Attribut ist gleich einem bestimmten Datum
*   **attribute "name" noteq** - Attribut ist nicht gleich einem bestimmten Datum
*   **attribute "name" gte** - Attribut nach oder an einem bestimmten Datum
*   **attribute "name" lte** - Attribut vor oder an einem bestimmten Datum
*   **attribute "name" between** - Attribut innerhalb eines bestimmten Datumsbereichs
*   **attribute "name" in** - Attribut ist gleich einem der angegebenen Daten
*   **attribute "name" notin** - Attribut ist nicht gleich einem der angegebenen Daten
*   **attribute "name" daysago eq/noteq/gte/lte/between** - Attribut relativ zu Tagen zuvor
*   **attribute "name" daysahead from to** - Attribut in einem bestimmten Intervall von Tagen ab dem heutigen Tag (Intervall ist an beiden Enden einschließlich, siehe Operatoren für Datums-Tags oben für die vollständige Semantik)
*   **attribute "name" minutesago gte/lte** - Attribut relativ zu Minuten zuvor
*   **attribute "name" any** - ein beliebiger Wert für das Attribut gesetzt
*   **attribute "name" notset** - kein Wert für das Attribut gesetzt

<Aside type="note" title="Syntaxbeispiele für Datums-Attribute">

* `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)` - innerhalb der letzten 30 Tage
* `Event("11111-11111", "Subscription", attribute "renewal_at" daysahead 0 30)` - Verlängerungen in den nächsten 30 Tagen
* `Event("11111-11111", "Subscription", attribute "start_date" minutesago gte 60)` - vor 60+ Minuten

</Aside>

#### Preis-Ereignisattribute

*   **attribute "name" eq** - Attribut ist gleich einem bestimmten Preiswert
*   **attribute "name" noteq** - Attribut ist nicht gleich einem bestimmten Preiswert
*   **attribute "name" gte** - Attribut ist größer als oder gleich einem bestimmten Preis
*   **attribute "name" lte** - Attribut ist kleiner als oder gleich einem bestimmten Preis
*   **attribute "name" between** - Attribut liegt in einem bestimmten Preisbereich
*   **attribute "name" in** - Attribut ist gleich einem der angegebenen Preise
*   **attribute "name" notin** - Attribut ist nicht gleich einem der angegebenen Preise
*   **attribute "name" any** - ein beliebiger Wert für das Attribut gesetzt
*   **attribute "name" notset** - kein Wert für das Attribut gesetzt

<Aside type="note" title="Syntaxbeispiel für Preis-Attribute">
`Event("11111-11111", "Purchase", attribute "total_price" between 10.00 50.00)`
</Aside>

#### Listen-Ereignisattribute

*   **attribute "name" in** - Attribut enthält einen der angegebenen Werte
*   **attribute "name" notin** - Attribut enthält keinen der angegebenen Werte
*   **attribute "name" any** - ein beliebiger Wert für das Attribut gesetzt
*   **attribute "name" notset** - kein Wert für das Attribut gesetzt

<Aside type="note" title="Syntaxbeispiel für Listen-Attribute">
`Event("11111-11111", "Cart Update", attribute "product_ids" in ["prod-123", "prod-456"])`
</Aside>

## Zusätzliche Bedingungstypen

### Geo-Bedingung

Zielt auf Geräte basierend auf dem geografischen Standort innerhalb eines bestimmten Radius.

**Syntax:** `Geo("<app-code>", <latitude>, <longitude>, <range-in-km>)`

<Aside type="note" title="Geo-Syntaxbeispiel">
`Geo("11111-11111", 53.2734, -7.77832031, 100.05)` - Geräte innerhalb von 100,05 km von den Koordinaten
</Aside>

### BTTS-Bedingung

Zielt auf Geräte nach ihrer besten Sendezeit für Benachrichtigungen (Stunde des Tages, 0-23).

**Operatoren:**
*   **any** - ein beliebiger Wert für die beste Sendezeit gesetzt
*   **eq** - exakte Stundenübereinstimmung
*   **noteq** - nicht gleich der Stunde
*   **gte** - Stunde größer als oder gleich
*   **lte** - Stunde kleiner als oder gleich

<Aside type="note" title="BTTS-Syntaxbeispiele">

* `BTTS("11111-11111", eq 10)` - Geräte mit bester Zeit um 10:00 Uhr
* `BTTS("11111-11111", gte 18)` - Geräte mit bester Zeit ab 18:00 Uhr
* `BTTS("11111-11111", any)` - Geräte mit einem beliebigen Wert für die beste Zeit

</Aside>

### Updated-Bedingung

Filtert Geräte nach ihrem letzten Aktualisierungszeitstempel.

**Operatoren:**
*   **gte** - aktualisiert nach oder am angegebenen Datum
*   **lte** - aktualisiert vor oder am angegebenen Datum
*   **between** - aktualisiert innerhalb des Datumsbereichs

<Aside type="note" title="Updated-Syntaxbeispiele">

* `Updated("11111-11111", gte "2022-01-01 00:00:00")` - Geräte, die nach dem 1. Januar 2022 aktualisiert wurden
* `Updated("11111-11111", lte "2022-12-31 23:59:59")` - Geräte, die vor dem 31. Dezember 2022 aktualisiert wurden
* `Updated("11111-11111", between "2022-01-01 00:00:00" "2022-12-31 23:59:59")` - Geräte, die 2022 aktualisiert wurden

</Aside>

### Segment-Bedingung

Verweist auf einen anderen Filter/ein anderes Segment anhand seines Codes.

<Aside type="note" title="Segment-Syntaxbeispiel">
`Segment("11111-11111", "22222-22222")` - verweist auf den Filter mit dem Code "22222-22222"
</Aside>

## Anwendungsbedingung Gerätepräsenz-Flags

Anwendungsbedingungen unterstützen zusätzliche Flags zur Steuerung der Geräte- und Token-Filterung:

*   **with_tokens** - Geräte mit Push-Benachrichtigungs-Tokens
*   **without_tokens** - Geräte ohne Push-Benachrichtigungs-Tokens
*   **with_devices** - Benutzer mit registrierten Geräten
*   **without_devices** - Benutzer/Profile ohne registrierte Geräte

<Aside type="note" title="Syntaxbeispiele für Anwendungs-Flags">

* `A("11111-11111", ["ios", "android"], [with_tokens])` - Geräte mit Push-Tokens
* `A("11111-11111", ["ios", "android"], [without_tokens])` - Geräte ohne Push-Tokens
* `A("11111-11111", [], [with_devices])` - alle Geräte mit Gerätedatensätzen
* `A("11111-11111", ["ios", "android"], [without_tokens, with_devices])` - Geräte ohne Tokens, aber mit Gerätedatensätzen

</Aside>

## Beispiele für Filterausdrücke

<Aside type="note">
Wenn Sie JSON-Abfragen schreiben, achten Sie darauf, Anführungszeichen (`"`) und Backslashes (`\`) mit einem Backslash (`\`) zu escapen.
Für eine Beispielanfrage siehe [/exportSegment](/de/developer/api-reference/segmentation-filters-api/#exportsegment).
</Aside>

### Grundlegende Beispiele

1.  iOS- und Android-Geräte, auf denen die App installiert ist und die Push-Tokens haben:

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

2.  iOS- und Android-Geräte, auf denen die App installiert ist, aber ohne Push-Tokens:

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

3.  iOS- und Android-Geräte, auf denen die App installiert ist, unabhängig davon, ob sie Push-Tokens haben oder nicht:

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

4.  Alle App-Abonnenten, die etwas in der App gekauft haben:

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

### Fortgeschrittene Beispiele

5.  Benutzer in Tokio, die die App in den letzten 7 Tagen geöffnet haben:

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

6.  Benutzer, die in den letzten 30 Tagen einen Kauf über 50 $ getätigt haben:

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

7.  Benutzer, deren Namen mit "J" beginnen oder mit "e" enden:

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

8.  Aktive iOS-Benutzer innerhalb von 100 km von New York, die in letzter Zeit nichts gekauft haben:

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

9.  Benutzer mit der besten Sendezeit zwischen 9 und 17 Uhr:

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

10. Benutzer, die in der letzten Stunde ein bestimmtes Ereignis auf Android oder iOS ausgelöst haben:

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

11. Geräte, die in den letzten 3 Monaten aktualisiert wurden, mit App-Version 4.2 oder höher:

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