# Tags

Tags sind eines der nützlichsten Werkzeuge, die Pushwoosh anbietet, und ermöglichen eine Reihe von anspruchsvollen Funktionalitäten. Durch die Verwendung von Tags können Sie Ihre Zielgruppe segmentieren und gezielte Push-Benachrichtigungen an bestimmte Benutzer basierend auf deren Attributen senden.

Tags können beliebige Daten enthalten, die mit einem bestimmten Benutzer oder Gerät verknüpft sind. Diese Daten können Benutzernamen, IDs, Städte, Lieblingsfußballmannschaften, bevorzugte Nachrichtenkategorien oder andere relevante Informationen über Ihre Benutzer umfassen.

## Entscheiden, welche Tags verwendet werden sollen

Beginnen Sie damit, Ihre Geschäftsanforderungen zu identifizieren und festzulegen, wie Sie Ihre Zielgruppe segmentieren möchten. Berücksichtigen Sie Faktoren wie Alter, Standort, In-App-Kaufhistorie oder andere relevante Kriterien für die Zielgruppenansprache.
<Aside type="tip">
Das Marketing-Team muss möglicherweise in diesen Prozess einbezogen werden, um zu entscheiden, welche Tags am besten zu Ihren Marketingzielen und Zielgruppensegmentierungsstrategien passen.
</Aside>

## Tag-Werte

Tag-Werte können Ihnen helfen, Ihre Push-Kampagnen intelligenter zu gestalten. Jeder Tag kann eine _nahezu unbegrenzte Anzahl von Werten_ speichern. Das bedeutet im Grunde, dass ein einziger Tag ausreichen würde, um eine bestimmte Art von Informationen über jeden Endbenutzer in Ihrer Datenbank zu erfassen.

Für jedes Konto stehen nur wenige Tags zur Verfügung, aber angesichts des nahezu unendlichen Platzes für jeden Tag reichen bereits ein paar Tags aus, um eine enorme Menge an Informationen über Ihre Benutzer zu sammeln und sehr komplexe Targeting-Muster einzurichten.

## Arten von Tags

*   **Integer** — wird für ganzzahlige Daten verwendet (Menge des erworbenen In-Game-Guthabens, erreichtes Level, Alter).
*   **String** — wird für Zeichenkettenwerte verwendet (Benutzername, E-Mail, Kennungen).
*   **List** — wie der Typ String, aber jeder Benutzer kann mehrere Werte gleichzeitig gesetzt haben (Musikpräferenzen, Nachrichtenkategorien, Küchenpräferenzen).
*   **Boolean** — true / false Typ von Tag.
*   **Date** — wird für Kalenderdaten verwendet. Im Grunde ist dies ein Integer-Tag, der Unix-Epochen-Zeitstempel speichert (automatisch aus/in das gregorianische Datum umgewandelt).
*   **Price** — ermöglicht das Setzen von Werten gemäß der angegebenen Währung im Format „\*.XX“ [Erfahren Sie mehr](https://en.wikipedia.org/wiki/ISO_4217).
*   **Version** — wird für die Versionierung verwendet. Das Beispiel für ein zulässiges Format ist w.x.y.z (Major.Minor.Patch.Build). Der maximale Wert für jeden Versionsteil ist 9999, sodass die maximale Versionsnummer nicht größer als 9999.9999.9999.9999 sein kann.

### Tag-Operatoren

Jeder Tag-Typ hat einen spezifischen Satz von anwendbaren **Operatoren**. Tag-Operatoren definieren die Beziehung zwischen dem Tag und seinen Werten für Segmentierungszwecke.

*   Operatoren für Integer-Tags: `is`, `is not`, `are`, `not in`, `not set`, `any`
*   Operatoren für String-Tags: `is`, `is not`, `are`, `not in`, `not set`, `any`
*   Operatoren für Listen-Tags: `in`, `not in`, `not set`, `any`
*   Operatoren für Boolesche Tags: `is` (true/false), `not set`, `any`
*   Operatoren für Datums-Tags: `exactly on`, `on or after`, `on or before`, `between`, `not set`, `any`
*   Operatoren für Preis-Tags: `is`, `is not`, `greater or equals`, `less or equals`, `between`, `in`, `not in`, `not set`, `any`
*   Operatoren für Versions-Tags: `is`, `is not`, `greater or equals`, `less or equals`, `between`, `in`, `not in`, `not set`, `any`

<Aside type="note">
Die Operatoren „Not set“ und „any“ sind für alle Tag-Typen verfügbar.
</Aside>

## Tag-Geltungsbereich: Allgemein vs. benutzerspezifisch

Beim Erstellen eines Tags wählen Sie, wie seine Werte gespeichert werden:

-   **Allgemein** (Standard, `user_specific: false`): Der Tag-Wert wird pro Gerät (HWID) gespeichert. Jedes Gerät desselben Benutzers kann unabhängig voneinander einen anderen Wert haben.
-   **Benutzerspezifisch** (`user_specific: true`): Der Tag-Wert wird pro Benutzer (UserID) gespeichert. Wenn er über die UserID gesetzt wird, wird der Wert auf alle Geräte des Benutzers gleichzeitig angewendet. Nützlich für Attribute, die zur Person gehören, nicht zu einem bestimmten Gerät: Abonnementstufe, Treuepunkte, bevorzugte Sprache.

### Beispiel

Ein Benutzer hat sowohl die iOS- als auch die Android-Version Ihrer App installiert. Wenn Sie ein `subscription_tier`-Tag über seine UserID auf `"premium"` setzen, wird es sofort auf beide Geräte angewendet. Mit einem allgemeinen Tag müssten Sie es für jedes Gerät separat setzen.

```javascript title="Beispiel: ein benutzerspezifisches Tag über die UserID setzen"
{
   "request":{
      "application": "XXXXX-XXXXX",
      "userId": "the id of a specific user",
      "tags": {
           "subscription_tier": "premium",
           "loyalty_points": 350
      }
   }
}
```

## Standard-Tags

Diese Tags sind von Pushwoosh standardmäßig verfügbar, sodass Sie sie nicht manuell setzen müssen (und tatsächlich auch nicht sollten). Die meisten von ihnen werden von der Anwendung gesetzt und über [`registerDevice`](/de/developer/api-reference/device-api/) und andere API-Aufrufe an unseren Server gesendet, und einige werden vom Server selbst gesetzt.

| Name | Typ | Wo es gesetzt wird | Beschreibung |
| ------------------------- | ------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Application Version | Version | SDK | Aktuelle Version der App, die auf einem Gerät installiert ist |
| Browser Type | String | SDK | Wenn ein Gerät für Ihr Webprojekt registriert wird, wird sein Typ – mobil oder Desktop – automatisch erfasst |
| City | String | Server | Letzter registrierter geografischer Standort eines Geräts |
| Country | String | Server | Letzter registrierter geografischer Standort eines Geräts |
| Device Model | String | SDK | Gibt das Gerätemodell an, auf dem die App installiert ist |
| First Install | Date | Server | Gibt den Zeitpunkt an, zu dem ein Gerät zum ersten Mal für Benachrichtigungen registriert wurde |
| In-App Product | List | SDK | Die von einem Benutzer der App gekauften In-App-Produkte |
| Last In-App Purchase Date | Date | SDK | Das Datum des letzten In-App-Kaufs auf einem Gerät |
| Language | String | SDK | Zweibuchstabige Kleinschreibungsabkürzung der Ländereinstellung eines Geräts gemäß ISO-639-1; aus den Geräteeinstellungen übernommen |
| Last Application Open | Date | Server | Der Zeitpunkt des letzten App-Starts auf einem Gerät |
| Last Email Open | Date | Server | Das Datum, an dem die E-Mail-Adresse des Geräts zuletzt ein E-Mail-Öffnungsereignis registriert hat |
| Last Email Open Message Code | String | Server | [Nachrichtencode](/de/developer/api-reference/api-identifiers#message-code) der zuletzt geöffneten E-Mail (Format `XXXX-XXXXXXXX-XXXXXXXX`). Wird bei jedem [`PW_EmailOpen`](/de/product/audience-data-and-segmentation/events/default-events/#pw_emailopen)-Ereignis aktualisiert. Verwenden Sie dies, um Empfänger einer bestimmten E-Mail-Kampagne danach zu segmentieren, wer sie geöffnet hat |
| Last Email Click | Date | Server | Das Datum, an dem die E-Mail-Adresse des Geräts zuletzt einen Klick auf einen E-Mail-Link registriert hat |
| Last Email Click Message Code | String | Server | [Nachrichtencode](/de/developer/api-reference/api-identifiers#message-code) der letzten E-Mail, in der ein Link angeklickt wurde (Format `XXXX-XXXXXXXX-XXXXXXXX`). Wird bei jedem [`PW_EmailLinkClicked`](/de/product/audience-data-and-segmentation/events/default-events/#pw_emaillinkclicked)-Ereignis aktualisiert. Verwenden Sie dies, um Empfänger einer bestimmten E-Mail-Kampagne danach zu segmentieren, wer geklickt hat |
| Last Email Confirm | Date | Server | Das Datum der letzten Double-Opt-In-Abonnementbestätigung für die E-Mail-Adresse des Geräts |
| Bounced Email | Date | Server | Das Datum, an dem ein Hard Bounce für diese E-Mail-Adresse aufgetreten ist. Wird als Datum gespeichert, um eine zeitbasierte Segmentierung zu ermöglichen, z. B. um Benutzer mit kürzlichen Bounces auszuschließen |
| Unsubscribed Emails | Boolean | SDK | Gibt an, ob ein Benutzer den Empfang von E-Mails von Ihrer App abbestellt hat |
| OS Version | Version | SDK | Die Version eines Betriebssystems, das auf einem Gerät läuft |
| Platform | String | SDK | Die Plattform, auf der der Benutzer Ihr Projekt verwendet. |
| Push Alerts Enabled | Boolean | SDK | Gibt an, ob Push-Benachrichtigungen in den Geräteeinstellungen erlaubt sind |
| SDK Version | Version | SDK | Die Version des Pushwoosh SDK, das auf einem Gerät implementiert ist |

## Benutzerdefinierte Tags

Hier kommt Ihre Kreativität ins Spiel, um Ihre spezifischen Geschäftsziele zu erreichen. Benutzerdefinierte Tags können basierend auf der Segmentierungslogik oder dem Targeting-Muster erstellt werden, das für Ihre einzigartigen Geschäftsanforderungen geeignet ist. Arbeiten Sie mit Ihrem Marketing-Team zusammen, um die zusätzlichen benutzerdefinierten Tags zu definieren, die für Ihre Kampagnen erforderlich sind.

### Wie man ein benutzerdefiniertes Tag einrichtet

Sie können ein neues Tag im [Pushwoosh Control Panel](/de/product/audience-data-and-segmentation/user-data-tags/tags) hinzufügen oder die Methode [`/addTag`](/de/developer/api-reference/tags#addtag) verwenden.

#### addTag

`POST` `https://api.pushwoosh.com/json/1.3/addTag`

Erstellt ein Tag in Ihrem Konto.

#### Anfragekörper

| Name | Typ | Beschreibung |
| ------------------------------------------ | ------- | -------------------------------------------------------------------------------------------------------- |
| auth* | string | API-Zugriffstoken aus dem Pushwoosh Control Panel. |
| tag* | object | Tag-Parameter. |
| tag.name* | string | Tag-Name. |
| tag.type* | integer | Tag-Typ. Siehe mögliche Werte unten. |
| tag.user\_specific | boolean | Wenn `true`, wird der Tag-Wert auf Benutzerebene gespeichert und über alle Geräte eines Benutzers geteilt, wenn er per UserID gesetzt wird. Wenn `false` (Standard), ist der Tag auf Geräteebene und wird pro HWID gesetzt. |

<Tabs>
<TabItem label="200">
```javascript
{
    "status_code": 200,
    "status_message": "OK",
    "response": {
        "result": true
    }
}
```
</TabItem>
</Tabs>



```javascript title="Beispiel"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H", // erforderlich, API-Zugriffstoken aus dem Pushwoosh Control Panel
    "tag": {
      "name": "TAG_NAME",    // erforderlich
      "type": 1,             // erforderlich, siehe mögliche Werte unten
      "user_specific": false // optional. true = Benutzerebene; false = Geräteebene (Standard)
    }
  }
}
```

**Mögliche Tag-Wert-Typen:**

*   1 - Integer
*   2 - String
*   3 - Liste
*   4 - Datum
*   5 - Boolesch
*   6 - Dezimal. Bsp: 19.95
*   7 - Version. Bsp: "1.0.0.0"


### Wie man Informationen von Benutzern sammelt


Sobald Sie ein Tag hinzugefügt und konfiguriert haben, ist es bereit, Informationen von Ihren Benutzern zu sammeln. Befolgen Sie diese Schritte, um es zu implementieren:

1.  Integrieren Sie das [Pushwoosh SDK](/de/developer/pushwoosh-sdk/pushwoosh-sdk-overview/) in Ihr Projekt, indem Sie der entsprechenden Integrationsanleitung folgen.
2.  Verwenden Sie die Funktion [`setTags`](/de/developer/api-reference/device-api/#settags), um Tags zuzuweisen und Benutzerdaten zu sammeln.

Unten finden Sie Implementierungsbeispiele für verschiedene Frameworks unter Verwendung der Funktion [`setTags`](/de/developer/api-reference/device-api/#settags).


<Tabs>

<TabItem label="iOS Native">

<Card title="iOS Native">
```objective-c
NSDictionary *tags = @{ 
    @"Alias" : aliasField.text,
    @"FavNumber" : @([favNumField.text intValue]),
    @"price" : [PWTags incrementalTagWithInteger:5],
    @"List" : @[ @"Item1", @"Item2", @"Item3" ]
};

[[PushNotificationManager pushManager] setTags:tags];
```

[Dokumentation](https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshiOS/documentation/pushwooshframework/pushwoosh/settags(_:)/)

</Card>

</TabItem>

<TabItem label="Android Native">

<Card title="Android Native">
```java
pushwoosh.setTags(Tags.intTag("intTag", 42));
```

[Dokumentation](https://pushwoosh.github.io/pushwoosh-android-sdk/pushwoosh/com.pushwoosh/-pushwoosh/set-tags.html)

</Card>

</TabItem>

<TabItem label="Cordova">

<Card title="Cordova">
```
PushNotification.prototype.setTags = function(  config, success, fail  )
```

[Dokumentation](/de/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/cordova-plugin-api-reference/#settags)

</Card>

</TabItem>

<TabItem label="Flutter">

<Card title="Flutter">
```dart
Future<void> setTags(Map tags) async {
  await _channel.invokeMethod("setTags", {"tags" : tags});
}
```

[Dokumentation](https://pub.dev/documentation/pushwoosh_flutter/latest/pushwoosh_flutter/Pushwoosh/setTags.html)

</Card>

</TabItem>

<TabItem label="React Native">

<Card title="React Native">
```javascript
pushNotification.setTags({ 
    "string_tag" : "Hello world", 
    "int_tag" : 42, 
    "list_tag":["hello", "world"] 
});
```

[Dokumentation](https://github.com/Pushwoosh/pushwoosh-react-native-plugin/blob/master/docs/README.md#settags)

</Card>

</TabItem>

</Tabs>

<Tabs>

<TabItem label="Unity">

<Card title="Unity">



##### **SetIntTag**
Setzt ein Integer-Tag für das Gerät.

```csharp
public virtual void SetIntTag(string tagName, int tagValue)
```

##### **SetStringTag**
Setzt ein String-Tag für das Gerät.

```csharp
public virtual void SetStringTag(string tagName, string tagValue)
```

##### **SetListTag**
Setzt ein Listen-Tag für das Gerät.

```csharp
public virtual void SetListTag(string tagName, List<object> tagValues)
```
[Dokumentation](https://github.com/Pushwoosh/pushwoosh-unity/blob/master/Documentation/README.md#pushwoosh)
</Card>

</TabItem>

<TabItem label="Unreal Engine">

<Card title="Unreal Engine">
```cpp
FPushwooshModule& pushwoosh = FPushwooshModule::Get();
pushwoosh.SetTags("{ \"intTag\" : 1, \"stringTag\" : \"example\", \"listTag\" : [ \"a\", \"b\", \"c\" ] }");
```

[Dokumentation](https://github.com/Pushwoosh/pushwoosh-unreal-engine/blob/master/Plugins/Pushwoosh/Documentation/README.md#settags)

</Card>

</TabItem>

<TabItem label="Expo">

<Card title="Expo">
```javascript
Pushwoosh.setTags({ "key": keyValue, "value": inputValue });
```

[Dokumentation](https://github.com/Pushwoosh/pushwoosh-expo-plugin-sample/blob/main/app/_layout.tsx#L296C17-L296C76)

</Card>

</TabItem>

<TabItem label=".NET MAUI">

<Card title=".NET MAUI">
```objective-c
NSDictionary *tags = @{ 
    @"Alias" : aliasField.text,
    @"FavNumber" : @([favNumField.text intValue]),
    @"price" : [PWTags incrementalTagWithInteger:5],
    @"List" : @[ @"Item1", @"Item2", @"Item3" ]
};
[[PushNotificationManager pushManager] setTags:tags];
```

[Dokumentation](https://github.com/Pushwoosh/pushwoosh-dotnet/blob/c40c0fd60cb5fe5c5016c46d677a779a5600f45f/PushwooshSDK.DotNet.iOS.Bindings/PushwooshFramework.xcframework/ios-arm64/PushwooshFramework.framework/Headers/PushNotificationManager.h#L380)

</Card>

</TabItem>

<TabItem label="Outsystems">
<Card title="Outsystems">

**Eingabeparameter**
**Tags** – Eine Liste von Tag-Datensätzen, die `TagName` und `TagValue` enthalten.
  - `TagName` muss immer vom Typ **Text** sein.
  - `TagValue` kann **Text, Integer, Boolean, Date**, etc. sein.

[Erfahren Sie mehr](/de/developer/pushwoosh-sdk/cross-platform-frameworks/outsystems/pushwoosh-outsystems-plugin-client-actions#settags)

</Card>
</TabItem>

</Tabs>



### Tags über die API setzen
Obwohl Tags in den meisten Fällen (99 %) von der Anwendung aus gesetzt werden, können Sie Tags auch über die Pushwoosh-API setzen. Unten finden Sie ein Beispiel für eine typische Anfrage an den Endpunkt [`/setTags`](/de/developer/api-reference/device-api#settags):


POST `https://api.pushwoosh.com/json/1.3/setTags`

```json

{
   "request": {
      "application": "XXXXX-XXXXX", // erforderlich, Pushwoosh-Anwendungscode
      "hwid": "8f65bXXXf378eXXXbeceXXX4e153XXX2", // erforderlich, Hardware-Geräte-ID, die in der /registerDevice-API verwendet wird
      "tags": { // erforderlich
           "StringTag": "string value", // Beispiel für ein String-Tag
           "IntegerTag": 42, // Beispiel für ein Integer-Tag
           "ListTag": ["string1", "string2"], // Beispiel für ein Listen-Tag
           "DateTag": "2024-10-02 22:11", // Hinweis: Die Zeit muss in UTC angegeben werden
           "BooleanTag": true // Gültige Werte: true, false
      }
   }
}

```

[Weitere Details finden Sie in der setTags API-Dokumentation](/de/developer/api-reference/device-api/#settags)

## Verwendung des Standard-Tags **City**

Der Standort eines Geräts wird anhand seiner IP-Adresse zum Zeitpunkt des letzten Starts Ihrer App auf diesem Gerät ermittelt. GeoIP übermittelt die Standortdaten an Pushwoosh, und Pushwoosh speichert den von GeoIP erhaltenen Standort als City-Tag-Wert für ein bestimmtes Gerät.

In einigen Fällen unterscheidet sich der von GeoIP übermittelte Standort vom Stadtnamen – zum Beispiel, wenn er sich auf einen Stadtteil oder eine andere Verwaltungseinheit bezieht. Bitte seien Sie vorsichtig, wenn Sie das Standard-Tag City für Segmentierungszwecke verwenden: Stellen Sie sicher, dass Sie die richtigen Werte auswählen.

Wenn Sie beispielsweise Benutzer aus München ansprechen möchten, müssen Sie dies mit einer Reihe von City-Tag-Werten abdecken, einschließlich „München“ selbst (mit allen entsprechenden Werten, wie z. B. verschiedenen Schreibweisen, die von GeoIP zurückgegeben und als Tag-Werte gespeichert werden könnten) und mehreren nahegelegenen Gebieten.

<Aside type="tip">
Bevor Sie ein [Segment](/de/developer/api-reference/segmentation-filters-api/) über die API erstellen, überprüfen Sie die Werte, die Ihre Benutzer auf ihren Geräten haben, mit der Anfrage [/getTagStats](/de/developer/api-reference/statistics-api/events-and-tags-statistics/#gettagstats).
</Aside>