# Audiences

URL: https://docs.ablyft.com/de/guides/audiences-and-delivery/audiences/

> Beschränke ein Experiment auf bestimmte Visitors, zum Beispiel nach Gerät, Besuchshistorie, Sprache, Cookies oder Data-Layer-Events.



Eine **Audience** beschreibt eine Gruppe von Visitors, zum Beispiel „mobile Visitors aus Deutschland“ oder „wiederkehrende
Visitors, die von Google kamen“. Wenn du einem Experiment eine Audience zuweist, können nur Visitors teilnehmen, die
dazu passen.

Weist du **keine Audience** zu, kann jeder Visitor teilnehmen. Die Card **Audiences** zeigt dann
**All users are currently included**. Du musst keine „All users“-Audience anlegen.

## Eine Audience anlegen

Es gibt zwei Wege:

* Aus einem Experiment: Klicke in der Card **Audiences** („WHO should participate?“) auf **+**, um eine Audience
  anzulegen, die sofort dem Experiment zugewiesen wird.
* Über die Navigation: Gehe zu **Targeting & Goals → Audiences** und lege eine neue Audience an. Weise sie dann in der
  Card **Audiences** mit **Select audience** einem Experiment zu.

Das Formular enthält:

| Feld            | Beschreibung                                                                             |
| --------------- | ---------------------------------------------------------------------------------------- |
| **Name**        | Ein klarer, aussagekräftiger Name, zum Beispiel `Mobile visitors`. Eindeutig im Project. |
| **API Name**    | Nur für fortgeschrittene Nutzer. Wird aus dem Namen befüllt.                             |
| **Description** | Optionale Notiz.                                                                         |
| **Targeting**   | Die Kriterien, die die Audience definieren. Mindestens eines ist erforderlich.           |

Um Kriterien hinzuzufügen, klicke auf **Add criteria**, wähle ein Kriterium aus der Liste (du kannst danach suchen) und
fülle seine Felder aus.

## Wie Kriterien kombiniert werden

Du baust Audiences aus **Kriterien**. Zwei einfache Regeln erklären, wie sie zusammenwirken:

* **AND zwischen Kriterien.** Klicke auf **Add AND criteria**, um ein weiteres Kriterium hinzuzufügen. Der Visitor muss
  **alle** Kriterien erfüllen.
* **OR innerhalb eines Kriteriums.** Bei vielen Kriterien kannst du mit **Add OR criteria** mehrere Zeilen hinzufügen.
  Der Visitor muss **mindestens eine** Zeile erfüllen.

Beispiel: *Device type is mobile* **AND** *User language contains `de`* **OR** *User language contains `en`* beschreibt
mobile Visitors, deren Browsersprache Deutsch oder Englisch ist.

Wenn du einem Experiment **mehrere Audiences** zuweist, entscheidet die Auswahl über der Audience-Liste, wie sie
zusammenwirken:

| Einstellung        | Bedeutung                                                  |
| ------------------ | ---------------------------------------------------------- |
| **ANY must match** | Der Visitor muss zu mindestens einer der Audiences passen. |
| **ALL must match** | Der Visitor muss zu jeder Audience passen.                 |

> **Audiences werden in der Preview nicht geprüft:** Wenn du ein Experiment mit dem Status **Preview** testest, werden Audiences ignoriert, damit du die Variation immer
> sehen kannst. Ob eine Audience passt, findest du mit dem Debug-Modus und einem Blick in die Browser-Konsole heraus,
> siehe [Debugging](https://docs.ablyft.com/de/developers/debugging/).

## Kriterien

### Gerät und Besuch

| Kriterium                       | Optionen                                                                                                                     |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Device type**                 | **is** / **is not** `mobile`, `tablet` oder `desktop`. Ein Gerät, das sowohl mobile als auch tablet ist, zählt als `tablet`. |
| **Visit type**                  | `new` oder `returning`. Ein Visitor ist nach seiner ersten Session `returning`.                                              |
| **Total sessions**              | **is less than**, **is greater than** oder **equals** eine Zahl.                                                             |
| **Total pageviews**             | **is less than**, **is greater than** oder **equals** eine Zahl.                                                             |
| **Pageviews (current session)** | **is less than**, **is greater than** oder **equals** eine Zahl.                                                             |
| **First visit**                 | **is before** oder **is on or after** ein Datum.                                                                             |
| **Last visit**                  | **is before** oder **is on or after** ein Datum.                                                                             |

Die Zähler werden im Browser des Visitors gespeichert (siehe [Storage & privacy](https://docs.ablyft.com/de/developers/consent-and-security/storage-and-privacy/)). Ein Visitor, der einen anderen Browser nutzt oder die Websitedaten löscht,
zählt als neuer Visitor. Eine neue Session beginnt, wenn deine Website in einer neuen Browser-Session geöffnet wird, zum
Beispiel in einem neuen Tab oder nachdem der Browser geschlossen wurde.

### Herkunft und Sprache

| Kriterium         | Optionen                                                                                                                                                                       |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **URL parameter** | Ein Parameter-**Name** und eine Prüfung: **exists**, **does not exists**, **is (exactly)**, **is not (exactly)**, **contains**, **does not contain**, plus ein Wert.           |
| **Cookie**        | Ein Cookie-**Name** und dieselben Prüfungen wie bei URL-Parametern.                                                                                                            |
| **User language** | **is (exactly)**, **is not (exactly)**, **contains**, **does not contain**, plus ein Wert wie `de-DE`. Er wird mit der Spracheinstellung des Browsers des Visitors verglichen. |
| **Referrer**      | **contains** oder **does not contain** ein Text, zum Beispiel `google.com`. Er wird mit der Adresse der Seite verglichen, von der der Visitor kam.                             |

Der URL-Parameter wird beim Prüfen der Audience aus der aktuellen Adresse gelesen. Ein Cookie muss im Browser des
Visitors existieren und per JavaScript lesbar sein.

### Zeit

| Kriterium         | Optionen                                                                                                                                                                      |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Time of visit** | Ein Zeitfenster mit **From** und **To**, in der lokalen Zeit des Visitors. Ist **From** später als **To**, reicht das Fenster über Mitternacht, zum Beispiel 22:00 bis 06:00. |
| **Day of week**   | Ein oder mehrere **Days**, in der lokalen Zeit des Visitors.                                                                                                                  |

### Events und Code

| Kriterium                | Beschreibung                                                                                  |
| ------------------------ | --------------------------------------------------------------------------------------------- |
| **dataLayer Event**      | Trifft zu, wenn ein Event in deinem Data Layer ankommt. Siehe unten.                          |
| **JavaScript Condition** | Dein eigenes JavaScript. Die Audience passt, wenn es `true` zurückgibt.                       |
| **JavaScript Trigger**   | Dein eigenes JavaScript, das `activate()` aufruft, wenn die Audience anfangen soll zu passen. |

#### dataLayer Event

Nutze dieses Kriterium für Visitors, die in deinem Data Layer ein Event ausgelöst haben, zum Beispiel über Google Tag
Manager. Du gibst den **Event name**, einen **Check** (zum Beispiel **is (exactly)** oder **contains**) und je nach Check
eine **Property** und einen **Value** an. Alle Felder und Checks sind unter
[Data layer events](https://docs.ablyft.com/de/developers/tracking-and-events/datalayer-events/#use-data-layer-events-in-audiences) beschrieben. Wie ABlyft
Data-Layer-Events erkennt, stellst du in den [Snippet-Einstellungen](https://docs.ablyft.com/de/developers/installation/snippet-settings/#data-layer-watching) ein.

#### JavaScript Condition

Der Code ist der Rumpf einer Funktion und muss für Visitors, die zur Audience gehören, `true` zurückgeben. Neben den
Standard-Browserobjekten kannst du `User` und `Tools` (oder `ablyftTools`) verwenden. Beispiel:

```js
// Visitors with at least 10 pageviews in the current session
return User.visits.pageviewsSession >= 10;
```

Wirft der Code einen Fehler, passt die Audience nicht.

##### Gerät, Browser und Betriebssystem

In einer JavaScript Condition sagt dir `User.browser`, welches Gerät, welchen Browser und welches Betriebssystem der
Visitor nutzt. Jede Eigenschaft ist `true`, wenn sie erkannt wurde. Nutze sie für Targeting wie „nur Desktop“ oder
„Safari auf iOS 15 oder neuer“.

| Gruppe                            | Eigenschaften                                                                                                           |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Gerät (höchstens eine ist `true`) | `mobile` (ohne Tablets), `tablet`, `desktop`                                                                            |
| Browser                           | `msedge`, `opera`, `samsungBrowser`, `firefox`, `chromium`, `chrome`, `msie`, `safari`. Die Version steht in `version`. |
| Betriebssystem                    | `windows`, `mac`, `android`, `ios`, `linux`. Ein iOS-Gerät setzt zusätzlich eine von `iphone`, `ipad` oder `ipod`.      |
| OS-Version                        | `osversion`, falls der User-Agent sie enthält (Android, iOS, macOS, Windows, Windows Phone, WebOS, Bada, Tizen).        |

```js
// Firefox on macOS
return User.browser.firefox && User.browser.mac;

// Tablets with iOS newer than 9, or any Android tablet
return User.browser.tablet && ((User.browser.ios && User.browser.osversion > 9) || User.browser.android);

// Internet Explorer 9 and newer
return User.browser.msie && User.browser.version >= 9;
```

#### JavaScript Trigger und Trigger-basierte Kriterien

Ein **JavaScript Trigger** und ein **dataLayer Event** unterscheiden sich von den übrigen Kriterien: Sie sind erst
erfüllt, nachdem auf der aktuellen Seite etwas passiert ist. Der Trigger-Code läuft einmal pro Seitenaufruf auf jeder
Seite deines Projects. Er ruft `activate()` auf, wenn die Audience anfangen soll zu passen, genau wie der Code des
[Callback-Triggers einer Page](https://docs.ablyft.com/de/guides/audiences-and-delivery/pages/#callback-trigger).

Sobald das Kriterium aktiviert wird, prüft ABlyft die betroffenen Experiments erneut. Der Zustand wird nicht über
Seitenaufrufe hinweg gespeichert, das Event muss also nach einem Neuladen der Seite erneut auftreten. Um aus deinem
eigenen Code eine neue Prüfung auszulösen, siehe [`reevaluateAudiences`](https://docs.ablyft.com/de/developers/reference/javascript-api/push/#reevaluateaudiences).

## Wann Audiences geprüft werden

ABlyft prüft die Audiences, nachdem Page und Environment eines Experiments gepasst haben und bevor der Visitor einer
Variation zugeteilt wird. Die Prüfung wird nach dem Laden der Seite noch kurze Zeit wiederholt, sodass auch Inhalte und
Cookies, die einen Moment später erscheinen, den Visitor noch qualifizieren können.

Sobald ein Visitor einer Variation zugeteilt wurde, bleibt er darin. Siehe
[Traffic Allocation](https://docs.ablyft.com/de/guides/audiences-and-delivery/traffic-allocation/).

## Audiences verwalten

Unter **Targeting & Goals → Audiences** kannst du Audiences bearbeiten, klonen und löschen. Eine Audience, die von einem
Experiment verwendet wird, kannst du nicht löschen. Öffne **Edit** und schau unter **Used in Experiments**, welche
Experiments sie nutzen.

> **Audiences werden gemeinsam genutzt:** Wenn du eine Audience änderst, die in mehreren Experiments verwendet wird, sind alle davon betroffen. Wird die
> Audience von einem laufenden Experiment verwendet, wird die Änderung sofort veröffentlicht. Klone die Audience, wenn
> du sie nur für ein Experiment ändern möchtest.

## Nächste Schritte

- [Traffic Allocation](https://docs.ablyft.com/de/guides/audiences-and-delivery/traffic-allocation/): Visitors auf Variations verteilen.
- [Pages & URL-Targeting](https://docs.ablyft.com/de/guides/audiences-and-delivery/pages/): Lege fest, wo ein Experiment läuft.

