# Messages API

import { Badge } from '@astrojs/starlight/components';

<Aside type="caution" title="/createMessage und /createTargetedMessage sind veraltet">
Neue Integrationen sollten die einheitliche [**Messaging API v2**](/de/developer/api-reference/messaging-api-v2/) verwenden – ein Endpunkt ersetzt die gesamte `/create*Message`-Familie. Eine Feld-für-Feld-Zuordnung finden Sie im [Migrationsleitfaden](/de/developer/api-reference/messaging-api-v2/migration-from-v1/).

Die unten aufgeführten Legacy-Methoden bleiben voll funktionsfähig. `/deleteMessage`, `/cancelMessage` und `/getMessageDetails` sind nicht veraltet – verwenden Sie sie wie gewohnt für v1- oder v2-erstellte Nachrichten.
</Aside>

<Aside type="note">
Um zu beginnen, sehen Sie sich bitte die Beschreibungen der [/createMessage-Anforderungsparameter](/de/developer/api-reference/messages-api/api-prerequisites) an.
</Aside>

## createMessage <Badge text="Veraltet" variant="caution" size="small" />

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

Erstellt eine neue Push-Benachrichtigung.

#### Anforderungskörper

| Name                                            | Typ   | Beschreibung                                                                |
| ----------------------------------------------- | ------ | -------------------------------------------------------------------------- |
| auth*          | string | [API-Zugriffstoken](/de/developer/api-reference/api-identifiers/#api-access-token) aus dem Pushwoosh Control Panel.                             |
| application*   | string | [Pushwoosh-Anwendungscode](/de/developer/api-reference/api-identifiers/#application-code)                                               |
| notifications* | array  | JSON-Array von Nachrichtenparametern. Details finden Sie im Anforderungsbeispiel unten.  |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "Messages": [
      "C3F8-C3863ED4-334AD4F1"
    ]
  }
}
```
</TabItem>
</Tabs>

<Aside type="note">
Die /createMessage-Methode unterstützt Inhaltsvorlagen. Weitere Informationen finden Sie im [Liquid Templates-Leitfaden](/de/developer/guides/personalization/liquid-templates/).
</Aside>

### Anforderungsbeispiel

```json title="Beispiel"
{
  "request": {
    "application": "XXXXX-XXXXX",       // erforderlich. Pushwoosh-Anwendungscode.
    "auth": "yxoPUlwqm…………pIyEX4H",     // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel.
    "notifications": [{
      "send_date": "now",               // optional. YYYY-MM-DD HH:mm ODER 'now'
      "content": {                      // optional. Objekt ODER Zeichenfolge.
        "en": "English",                //           Verwenden Sie stattdessen "wns_content" für Windows.
        "fr": "French"
      },
      "title": {                        // optional. Objekt ODER Zeichenfolge. 
        "en": "Title",                  //           Wird ignoriert, wenn plattformspezifische Titel angegeben sind
        "fr": "Titre"                   //           'ios_title', 'android_header', etc.
      },                                //           siehe die Beispiele für plattformspezifische Parameter unten.
      "subtitle":{                      // optional. Objekt ODER Zeichenfolge. 
        "en": "Subtitle",               //           Wird ignoriert, wenn plattformspezifische Titel angegeben sind
        "fr": "Sous-titre"              //           'ios_subtitle', etc.
      },                                //           siehe die Beispiele für plattformspezifische Parameter unten.
      "ignore_user_timezone": true,     // optional.
      "timezone": "America/New_York",   // optional. Wenn ignoriert, ist UTC-0 Standard für "send_date".
                                        //           Siehe https://php.net/manual/timezones.php für
                                        //           unterstützte Zeitzonen.
      "campaign": "CAMPAIGN_CODE",      // optional. Kampagnencode, dem Sie diese
                                        //           Push-Nachricht zuweisen möchten.
      "geozone": {                      // optional. An Geozone senden
        "lat": 22.22,
        "lng": 33.33,
        "range": 110
      },
      "rich_media": "XXXXX-XXXXX",      // optional. Kopieren Sie den Rich-Media-Code aus der URL-Leiste
                                        //           der Rich-Media-Editor-Seite im Pushwoosh Control Panel.
      "link": "https://google.com",     // optional. Für Deeplinks fügen Sie "minimize_link": 0 hinzu
      "minimize_link": 0,               // optional. 0 — nicht minimieren, 2 — bitly. Standard = 2.
                                        //           Bitte beachten Sie, dass Shortener Einschränkungen
                                        //           bezüglich der Anzahl der Aufrufe haben.
      "data": {                         // optional. JSON-Zeichenfolge oder JSON-Objekt, wird als
        "key": "value"                  //           "u"-Parameter im Payload übergeben (in JSON-Zeichenfolge konvertiert).
      },
      "transactionId": "unique UUID",   // optional. Eindeutiger Nachrichtenidentifikator, um Duplizierung
                                        //           im Falle von Netzwerkproblemen zu verhindern. Wird auf der Seite von
                                        //           Pushwoosh für 5 Minuten gespeichert. 
      "platforms": [                    // optional. 1 — iOS; 3 — Android; 7 — Mac OS X; 8 — Windows;
        1, 3, 7, 8, 9, 10,              //           9 — Amazon; 10 — Safari; 11 — Chrome;
        11, 12, 17                      //           12 — Firefox; 17 — Huawei
      ],
      "preset": "XXXXX-XXXXX",          // optional. Push-Preset-Code aus Ihrem Control Panel.
                                        //           Wenn spezifische Parameter in der Anfrage gesendet werden,
                                        //           überschreiben sie die Parameter des Presets.
      "send_rate": 100,                 // optional. Drosselung. Gültige Werte sind von 100 bis 1000 Pushes/Sekunde.
      "send_rate_avoid": true,          // optional. Wenn auf true gesetzt, wird das Drosselungslimit nicht auf
                                        //           diese spezifische Push-Benachrichtigung angewendet.
      // Vorlagenbezogen, bitte lesen Sie den Leitfaden zur Template-Engine für weitere Informationen
      "template_bindings": {            // optional.
        "TemplatePlaceholder": "Value"
      },
      "dynamic_content_placeholders": { // optional. Platzhalter für dynamische Inhalte anstelle von Geräte-Tags.
        "firstname": "John",
        "lastname": "Doe"
      },
      "message_type": "marketing",       // optional. "marketing" oder "transactional".
                                         // Wenn weggelassen, erhalten Benutzer mit PW_ControlGroup: true die Nachricht nicht.

      // Frequenzbegrenzungsparameter. Stellen Sie sicher, dass die globale Frequenzbegrenzung im Control Panel konfiguriert ist.
      // Die Frequenzbegrenzung gilt nicht für transaktionale Nachrichten.
      // In allen anderen Fällen, einschließlich weggelassenem "message_type", gilt die Frequenzbegrenzung.
      "capping_days": 30,               // optional. Anzahl der Tage für die Frequenzbegrenzung (max. 30 Tage)
      "capping_count": 10,              // optional. Die maximale Anzahl von Pushes, die von einer
                                        //           spezifischen App an ein bestimmtes Gerät innerhalb eines 'capping_days'-
                                        //           Zeitraums gesendet werden können. Falls die erstellte Nachricht das
                                        //           'capping_count'-Limit für ein Gerät überschreitet, wird sie nicht
                                        //           an dieses Gerät gesendet.
      "capping_exclude": true,          // optional. Wenn auf true gesetzt, wird diese Push-Benachrichtigung nicht
                                        //           für die Begrenzung zukünftiger Pushes gezählt.
      "capping_avoid": true,            // optional. Wenn auf true gesetzt, wird die Begrenzung nicht auf
                                        //           diese spezifische Push-Benachrichtigung angewendet.
        
      // Um die Nachricht über die API im Posteingang zu speichern, verwenden Sie "inbox_date" oder "inbox_image".
      // Die Nachricht wird gespeichert, wenn mindestens einer dieser Parameter verwendet wird.
      "inbox_date": "2017-02-02",       // optional. Geben Sie an, wann eine Nachricht aus dem Posteingang entfernt werden soll.
                                        //           Die Nachricht wird um 00:00:01 UTC des angegebenen Datums
                                        //           aus dem Posteingang entfernt, sodass der vorherige Tag der
                                        //           letzte Tag ist, an dem ein Benutzer die Nachricht in seinem Posteingang sehen kann.
                                        //           Wenn nicht angegeben, ist das Standard-Entfernungsdatum der
                                        //           nächste Tag nach dem Sendedatum.
      "inbox_image": "Inbox image URL", // optional. Das Bild, das neben der Nachricht angezeigt werden soll. 
	  "inbox_days": 5,                  // optional. Geben Sie an, wann eine Nachricht aus dem
                                        //           Posteingang entfernt werden soll (Lebensdauer einer Posteingangsnachricht in Tagen). 
                                        //           Kann anstelle des Parameters "inbox_date" verwendet werden.
                                        //           Bis zu 30 Tage.
      
      "devices": [                      // optional. Geben Sie Tokens oder HWIDs an, um gezielte Push-
          "hwid_XXXX"                   //           Benachrichtigungen zu senden. Nicht mehr als 1000 Tokens/HWIDs in
      ],                                //           einem Array. Wenn gesetzt, wird die Nachricht nur an
                                        //           die Geräte in der Liste gesendet. Anwendungsgruppe für Geräte-
                                        //           liste ist nicht erlaubt. iOS-Push-Tokens können nur in Kleinbuchstaben sein.
      "to": [                           // optional. Für E-Mail, SMS und ähnliche Kanäle. Liste der Empfänger
          "email_1", "email_2"          //           (z.B. E-Mail-Adressen, Telefonnummern). Max. 1000 Elemente.
      ],                                //           Für Push verwenden Sie stattdessen "devices".
      // Benutzerzentrierte Push-Benachrichtigungen
      "users": [                        // optional. Wenn gesetzt, wird die Nachricht nur an die
          "user_XXXX"                   //           angegebenen Benutzer-IDs zugestellt (gesetzt über /registerUser-Aufruf). 
      ],                                //           Wenn zusammen mit devices oder to angegeben,
                                        //           wird letzteres ignoriert. Nicht mehr als 1000 Benutzer-
                                        //           IDs in einem Array. Anwendungsgruppe für Benutzerliste
                                        //           ist nicht erlaubt.

      // Filter und Bedingungen
      "filter": "FILTER_NAME",          // optional.
      "conditions": [                   // optional. Siehe die Anmerkung unten.
        ["Country", "EQ", "fr"],
        ["Language", "EQ", "en"]
      ],    
      "conditions_operator": "AND"      // optional. Logischer Operator für Bedingungs-Arrays.
                                        //           Mögliche Werte: AND | OR. AND ist Standard.
    }]
  }
}
```

### Beispiel für eine VoIP-Benachrichtigungsanforderung

Pushwoosh unterstützt Anrufbenachrichtigungen im VoIP-Stil für iOS und Android. \
Unten finden Sie Beispiel-API-`createMessage`-Anfragen für jede Plattform.

#### iOS

```json title="Beispiel"
{
  "request": {
    "application": "XXXXX-XXXXX",     // erforderlich. Pushwoosh-Anwendungscode.
    "auth": "yxoPUlwqm…………pIyEX4H",   // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel.
    "notifications": [
      {
        "voip_push": true,            // erforderlich. Parameter ist erforderlich, um eine VoIP-Push-Benachrichtigung zu senden.
        "ios_root_params": {
          "aps": {
            "mutable-content": 1      // erforderlich für iOS10+ Medienanhänge.
          },
          "callerName": "CallerName", // optional. Name des Anrufers. Wenn nicht angegeben, wird "unbekannter Anrufer" angezeigt.
          "video": true,              // optional. Gibt an, ob Videoanrufe unterstützt werden.
          "supportsHolding": true,    // optional. Gibt an, ob die Anrufhaltefunktion unterstützt wird.
          "supportsDTMF": false,      // optional. Steuert die Unterstützung von Dual-Tone Multi-Frequency-Signalen.
          "callId": "42",             // optional. Der eindeutige Bezeichner des abzubrechenden Anrufs.
          "cancelCall": true          // optional. Auf "true" setzen, um den Anruf mit der angegebenen "callId" abzubrechen.
        }
      }
    ]
  }
}
```

#### Android

```json title="Beispiel"
{
  "request": {
    "application": "XXXXX-XXXXX",   // erforderlich. Pushwoosh-Anwendungscode.
    "auth": "yxoPUlwqm…………pIyEX4H", // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel.
    "notifications": [
      {
      "voip_push": true,            // erforderlich. Parameter ist erforderlich, um eine VoIP-Push-Benachrichtigung zu senden.
      "android_root_params": {
        "callerName": "callerName", // optional. Name des Anrufers. Wenn nicht angegeben, wird "unbekannter Anrufer" angezeigt.
        "video": true,              // optional. Gibt an, ob Videoanrufe unterstützt werden.
        "callId": 42,               // optional. Der eindeutige Bezeichner des abzubrechenden Anrufs.
        "cancelCall": true          // optional. Auf "true" setzen, um den Anruf mit der angegebenen "callId" abzubrechen.
        }
      }
    ]
  }
}

```


### Plattformspezifische Parameter

#### iOS-Parameter

```json title="Beispiel"
{
  "request": {
    "application": "12345-67891",         // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H",       // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "ios_title": {                      // optional. Objekt ODER Zeichenfolge. Fügt einen iOS-spezifischen Titel für die Push-Benachrichtigung hinzu.
        "en": "title"
      },
      "ios_subtitle": {                   // optional. Objekt ODER Zeichenfolge. Fügt einen iOS-spezifischen Untertitel für die Push-Benachrichtigung hinzu.
        "en": "subtitle"
      },
      "ios_content": {                    // optional. Objekt ODER Zeichenfolge. Fügt iOS-spezifischen Inhalt für die Push-Benachrichtigung hinzu.
        "en": "content"
      },
      "ios_badges": 5,                    // optional. iOS-Anwendungs-Badge-Nummer.
                                          //           Verwenden Sie "+n" oder "-n", um den Badge-Wert um n zu erhöhen/verringern.
      "ios_sound": "sound file.wav",      // optional. Name der Sounddatei im Haupt-Bundle der Anwendung.
                                          //           Wenn leer gelassen, erzeugt das Gerät einen Standard-Systemton.
      "ios_sound_off": true,              // optional. Aktivieren/Deaktivieren des durch das Feld "ios_sound" eingestellten Tons.
      "ios_ttl": 3600,                    // optional. Time-to-Live-Parameter - maximale Lebensdauer der Nachricht in Sekunden.
      "ios_silent": 1,                    // optional. Aktiviert stille Benachrichtigungen (ignoriert "sound" und "content").
      "ios_category_id": "1",             // optional. iOS8-Kategorie-ID von Pushwoosh.
      "ios_root_params": {                // optional. Parameter auf Root-Ebene für das aps-Wörterbuch.
        "aps": {
          "content-available": "0",       // optional. Setzen Sie "1", um einen stillen Push zu senden, und "0" für einen regulären Push.
          "mutable-content": 1            // erforderlich für iOS10+ Medienanhänge.
        },
        "callerName": "CallerName",       // optionaler VoIP-Parameter. Name des Anrufers. Wenn nicht angegeben, wird "unbekannter Anrufer" angezeigt.
        "video": true,                    // optionaler VoIP-Parameter. Gibt an, ob Videoanrufe unterstützt werden.
        "supportsHolding": true,          // optionaler VoIP-Parameter. Gibt an, ob die Anrufhaltefunktion unterstützt wird.
        "supportsDTMF": false,            // optionaler VoIP-Parameter. Steuert die Unterstützung von Dual-Tone Multi-Frequency-Signalen.
        "data": {}                        // optional. Vom Benutzer bereitgestellte Daten, max. 4 KB
      },
      "ios_attachment": "URL",            // optional. Medieninhalte in die Benachrichtigung einfügen.
      "ios_thread_id": "some thread id",  // optional. Bezeichner zum Gruppieren verwandter Benachrichtigungen.
                                          //           Nachrichten mit derselben Thread-ID werden
                                          //           auf dem Sperrbildschirm und im Benachrichtigungscenter gruppiert.
      "ios_critical": true,               // optional. Markiert die iOS-Benachrichtigung als kritischen Alarm,
                                          //           der auch dann einen Ton abspielt, wenn ein Gerät stummgeschaltet ist oder
                                          //           der "Nicht stören"-Modus aktiviert ist.
      "ios_category_custom": "category",  // optional. Benutzerdefinierte APNS-Kategorie.
      "ios_interruption_level": "active", // optional. Einer von "passive", "active", "time-sensitive",
                                          //           "critical". Gibt die Wichtigkeit und
                                          //           den Zustellzeitpunkt einer Benachrichtigung an. Details finden Sie im
                                          //           Leitfaden für einmalige Pushes.
      "apns_collapse_id": "promo",        // optional. APNs-Collapse-Identifier. Benachrichtigungen mit demselben
                                          //           apns_collapse_id ersetzen sich gegenseitig auf dem Gerät.
      "apns_trim_content": 1              // optional. (0|1) Kürzt die überschüssigen Inhaltszeichenfolgen mit Ellipsen.
    }]
  }
}
```

#### Android-Parameter

```json title="Beispiel"
{
  "request": {
    "application": "12345-67891",            // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H",          // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "android_header": {                    // optional. Android-Benachrichtigungs-Header.
        "en": "header"
      },
      "android_content": {                   // optional. Android-Benachrichtigungsinhalt.
        "en": "content"
      },
      "android_root_params": {               // optional. Benutzerdefiniertes Schlüssel-Wert-Objekt.
        "key": "value",                      //           Parameter auf Root-Ebene für die Android-Payload-Empfänger.
        "CancelID": 12345678,                // optional. Storniert die Push-Benachrichtigung mit der
        "voip": true,                        // erforderlicher VoIP-Parameter. Parameter ist erforderlich, um VoIP-Push-Benachrichtigungen zu senden.
        "callerName": "callerName",          // optionaler VoIP-Parameter. Name des Anrufers. Wenn nicht angegeben, wird "unbekannter Anrufer" angezeigt.
        "video": true,                       // optionaler VoIP-Parameter. Gibt an, ob Videoanrufe unterstützt werden.
      },                                     //           angegebenen Nachrichten-ID (holen Sie die ID aus der Nachrichten-Historie)
      "android_sound": "soundfile",          // optional. Keine Dateierweiterung. Wenn leer gelassen,
                                             //           erzeugt das Gerät einen Standard-Systemton.
      "android_sound_off": true,             // optional. Aktivieren/Deaktivieren des durch das Feld "android_sound" eingestellten Tons
      "android_icon": "icon.png",            // optional.
      "android_custom_icon": "URL.png",      // optional. Vollständige URL zur Bilddatei.
      "android_banner": "URL.png",           // optional. Vollständige URL zur Bilddatei.
      "android_badges": 5,                   // optional. Android-Anwendungssymbol-Badge-Nummer.
                                             //           Verwenden Sie "+n" oder "-n", um den Badge-Wert um n zu erhöhen/verringern.
      "android_gcm_ttl": 3600,               // optional. Time-to-Live-Parameter — maximale Lebensdauer der Nachricht in Sekunden.
      "android_vibration": 0,                // optional. Android-Vibrationserzwingung für hochpriorisierte Pushes.
      "android_led": "#rrggbb",              // optional. LED-Hex-Farbe, das Gerät wird sein Bestes tun, um sie anzunähern.
      "android_priority": -1,                // optional. Setzt den "importance"-Parameter für Geräte mit
                                             //           Android 8.0 und höher sowie den "priority"-Parameter
                                             //           für Geräte mit Android 7.1 und niedriger. Legt die
                                             //           Unterbrechungsstufe eines Benachrichtigungskanals oder einer bestimmten
                                             //           Benachrichtigung fest. Gültige Werte sind -2, -1, 0, 1, 2.
      "android_delivery_priority": "normal", // optional. "normal" oder "high".
                                             //           Ermöglicht die Zustellung der Benachrichtigung, wenn das
                                             //           Gerät im Energiesparmodus ist.
      "android_ibc": "#RRGGBB",              // optional. Symbolhintergrundfarbe auf Lollipop, #RRGGBB,
                                             //           #AARRGGBB, "red", "black", "yellow", etc.
      "android_silent": 1,                   // optional. 0 oder 1. Stille Benachrichtigung aktivieren.
                                             //           Ton und Inhalt ignorieren
      "android_group_id": "123",             // optional. Bezeichner zum Gruppieren verwandter Benachrichtigungen. Nachrichten mit
                                             //           derselben Thread-ID werden im
                                             //           Benachrichtigungscenter gruppiert.
      "android_collapse_key": "promo"        // optional. FCM-Collapse-Key. Benachrichtigungen mit demselben
                                             //           Collapse-Key ersetzen sich gegenseitig, während das Gerät offline ist.
    }]
  }
}
```

**Huawei-Parameter**

```json title="Huawei"
{
  "request": {
    "application": "12345-67891",                   // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H",                 // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "huawei_android_header": {                    // optional. Objekt ODER Zeichenfolge. Benachrichtigungstitel
        "en": "header"
      },
      "huawei_android_content": {                   // optional. Objekt ODER Zeichenfolge. Benachrichtigungsinhalt
        "en": "content"
      },
      "huawei_android_badges": true,                // optional.
      "huawei_android_silent": 0,                   // optional. 0 oder 1. Stille Benachrichtigung aktivieren.
                                                    //           Ton und Inhalt ignorieren
      "huawei_android_icon": "URL.png",             // optional.
      "huawei_android_led": "#FF0011",              // optional. LED-Hex-Farbe, das Gerät wird sein Bestes tun, um sie anzunähern
      "huawei_android_vibration": 1,                // optional. Huawei-Vibrationserzwingung für hochpriorisierte Pushes
      "huawei_android_sound": "sound.wav",          // optional. Wenn leer gelassen, erzeugt das Gerät
                                                    //           einen Standard-Systemton
      "huawei_android_sound_off": true,             // optional. Aktivieren/Deaktivieren des durch das
                                                    //           Feld "huawei_android_sound" eingestellten Tons
      "huawei_android_custom_icon": "URL.png",      // optional
      "huawei_android_gcm_ttl": 2400,               // optional. Time-to-Live-Parameter - maximale
                                                    //           Lebensdauer der Nachricht in Sekunden
      "huawei_android_banner": "URL.png",           // optional. Vollständiger Pfad-URL zur Bilddatei
      "huawei_android_root_params": {               // optional. Benutzerdefiniertes Schlüssel-Wert-Objekt.
        "key": "value"                              //           Parameter auf Root-Ebene für Huawei-Payload-Empfänger.
      },
      "huawei_android_priority": 0,                 // optional. Gültige Werte: -2, -1, 0, 1, 2
      "huawei_android_ibc": "#0011AA",              // optional. Symbolhintergrundfarbe auf Lollipop
      "huawei_android_lockscreen": 1,               // optional
      "huawei_android_delivery_priority": "normal", // optional. "normal" oder "high". Ermöglicht die Benachrichtigungs-
                                                    //           zustellung im Energiesparmodus
      "huawei_android_group_id": "group_id"         // optional. Bezeichner zum Gruppieren verwandter Benachrichtigungen
    }]
  }
}
```

#### Safari-Parameter

```json title="Safari"
{
  "request": {
    "application": "12345-67891",    // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H",  // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "safari_url_args": [           // erforderlich, aber der Wert kann leer sein
        "firstArgument",
        "secondArgument"
      ],
      "safari_title": {              // optional. Objekt ODER Zeichenfolge. Titel der Benachrichtigung.
        "en": "content"
      },
      "safari_content": {            // optional. Objekt ODER Zeichenfolge. Inhalt der Benachrichtigung.
        "en": "content"
      },
      "safari_action": "Click here", // optional.
      "safari_ttl": 3600             // optional. Time-to-Live-Parameter — die maximale
                                     //           Lebensdauer einer Nachricht in Sekunden.
    }]
  }
}


```

#### Chrome-Parameter

```json title="Chrome"
{
  "request": {
    "application": "12345-67891",          // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H",        // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "chrome_title": {                    // optional. Objekt ODER Zeichenfolge. Sie können den Header 
        "en": "title"                      //           der Nachricht in diesem Parameter angeben.
      },
      "chrome_content": {                  // optional. Objekt ODER Zeichenfolge. Sie können den Inhalt 
        "en": "content"                    //           der Nachricht in diesem Parameter angeben.
      },
      "chrome_icon": "URL.png",            // optional. Vollständige URL zum Symbol oder Dateipfad der Erweiterungsressourcen
      "chrome_gcm_ttl": 3600,              // optional. Time-to-Live-Parameter – maximale Lebensdauer der Nachricht in Sekunden.
      "chrome_duration": 20,               // optional. max. 50 Sekunden. Ändert die Anzeigezeit des Chrome-Push.
                                           //           Auf 0 setzen, um den Push anzuzeigen, bis der Benutzer damit interagiert.
      "chrome_image": "image_URL",         // optional. URL zu einem großen Bild. 
      "chrome_root_params": {              // optional. Setzen Sie spezifische Parameter für Nachrichten, die an Chrome gesendet werden.
        "key": "value"
      }, 
      "chrome_button_text1": "text1",      // optional
      "chrome_button_url1": "button1_URL", // optional. Wird ignoriert, wenn chrome_button_text1 nicht gesetzt ist.
      "chrome_button_text2": "text2",      // optional
      "chrome_button_url2": "button2_url"  // optional. Wird ignoriert, wenn chrome_button_text2 nicht gesetzt ist. 
    }]
  }
}
```

#### Firefox-Parameter

```json title="Firefox"
{
  "request": {
    "application": "12345-67891",   // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H", // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "firefox_title": {            // optional. Objekt ODER Zeichenfolge. Hier können Sie den Nachrichten-Header angeben.
        "en": "title"
      },
      "firefox_content": {          // optional. Objekt ODER Zeichenfolge. Hier können Sie den Nachrichteninhalt angeben.
        "en": "content"
      },
      "firefox_icon": "URL.png",    // optional. Vollständiger Pfad-URL zum Symbol oder Pfad zur
                                    //           Datei in den Erweiterungsressourcen.
      "firefox_root_params": {      // optional. Setzen Sie spezifische Parameter für Nachrichten, die an Firefox gesendet werden.
        "key": "value"
      } 
    }]
  }
}
```

#### Amazon-Parameter

```json title="Amazon"
{
  "request": {
    "application": "12345-67891",   // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H", // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "adm_header": {               // optional. Objekt ODER Zeichenfolge. Hier können Sie den Nachrichten-Header angeben.
        "en": "header"
      },
      "adm_content": {              // optional. Objekt ODER Zeichenfolge. Hier können Sie den Nachrichteninhalt angeben.
        "en": "content"
      },
      "adm_root_params": {          // optional. Benutzerdefiniertes Schlüssel-Wert-Objekt
        "key": "value"
      },
      "adm_sound": "push.mp3",      // optional.
      "adm_sound_off": true,        // optional. Aktivieren/Deaktivieren des durch das Feld "adm_sound" eingestellten Tons
      "adm_icon": "icon.png",       // optional. Vollständige URL zum Symbol.
      "adm_custom_icon": "URL.png", // optional.
      "adm_banner": "URL.png",      // optional.
      "adm_ttl": 3600,              // optional. Time-to-Live-Parameter — die maximale Lebensdauer der Nachricht
                                    //           in Sekunden.
      "adm_priority": -1            // optional. Priorität des Pushs in der Amazon-Push-Schublade,
                                    //           gültige Werte sind -2, -1, 0, 1 und 2.
    }]
  }
}
```

#### Mac OS X-Parameter

```json title="Mac OS X"
{
  "request": {
    "application": "12345-67891",   // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H", // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "mac_title": {                // optional. Objekt ODER Zeichenfolge. Fügt einen Titel für die Push-Benachrichtigung hinzu.
        "en": "title"
      },
      "mac_subtitle": {             // optional. Fügt einen Untertitel für die Push-Benachrichtigung hinzu.
        "en": "subtitle"
      },
      "mac_content": {              // optional. Fügt Inhalt für die Push-Benachrichtigung hinzu.
        "en": "content"
      },
      "mac_badges": 3,              // optional.
      "mac_sound": "sound.caf",     // optional.
      "mac_sound_off": true,        // optional. Aktivieren/Deaktivieren des durch das Feld "mac_sound" eingestellten Tons
      "mac_root_params": {          // optional.
        "content-available": 1
      },
      "mac_ttl": 3600               // optional. Time-to-Live-Parameter — maximale Lebensdauer der Nachricht in Sekunden.
    }]
  }
}
```

#### Windows-Parameter

```json title="Windows"
{
  "request": {
    "application": "12345-67891",   // erforderlich. Pushwoosh-Anwendungscode
    "auth": "yxoPUlwqm…………pIyEX4H", // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "notifications": [{
      "wns_content": {              // erforderlich. Inhalt (XML oder roh) der Benachrichtigung, kodiert in MIME's base64
                                    //           in Form von Objekt ODER Zeichenfolge
        "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
        "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
      },
      "wns_type": "Badge",          // optional. 'Tile' | 'Toast' | 'Badge' | 'Raw'
      "wns_tag": "myTag",           // optional. Wird in der Tile-Ersetzungsrichtlinie verwendet.
                                    //           Eine alphanumerische Zeichenfolge von nicht mehr als 16 Zeichen.
      "wns_cache": 1,               // optional. (1|0) Übersetzt in den Wert X-WNS-Cache-Policy.
      "wns_ttl": 600                // optional. Ablaufzeit für die Benachrichtigung in Sekunden.
    }]
  }
}
```
<Aside>
Schnellstart! Schauen Sie sich diese coolen Drittanbieter-Bibliotheken an!

Python-Bibliothek **von Pushwoosh**:
[https://github.com/makcyd/pushwoosh_api](https://github.com/makcyd/pushwoosh_api)

Laravel-Bibliothek:
[https://github.com/laravel-notification-channels/pushwoosh](https://github.com/laravel-notification-channels/pushwoosh)

Node JS-Client
[https://github.com/vizeat/pushwoosh-node](https://github.com/vizeat/pushwoosh-node)

Meteor JS-Client
[https://github.com/lpender/meteor-pushwoosh](https://github.com/lpender/meteor-pushwoosh)

Rails-Bibliothek
[https://github.com/iarie/pwush](https://github.com/iarie/pwush)

Golang-Bibliothek
[https://github.com/yyoshiki41/go-pushwoosh](https://github.com/yyoshiki41/go-pushwoosh)
</Aside>

<Aside type="caution">
#### /createMessage Drosselung

Beachten Sie, dass Nicht-Enterprise-Konten nicht mehr als 600 `/createMessage`- und/oder [`/createTargetedMessage`](/de/developer/api-reference/messages-api/#createtargetedmessage)-Anfragen pro Minute senden können.

Wenn Sie jedoch Pushes über den **devices**-Parameter an **10 Geräte oder weniger** senden, gibt es keine Einschränkungen für jeden Kontotyp, solange das API-Messaging-Tracing deaktiviert ist.

Beachten Sie, dass **wir geplante Pushes immer** in der Nachrichten-Historie speichern, auch wenn Sie sie über den devices-Parameter an weniger als 10 Geräte senden. Daher werden solche Pushes ebenfalls gedrosselt.
</Aside>

**Antwort**:

| HTTP-Statuscode | status_code | Beschreibung                                       |
| ---------------- | ------------ | ------------------------------------------------- |
| 200              | 200          | Nachricht erfolgreich erstellt                      |
| 200              | 210          | Argumentfehler. Siehe status_message für weitere Informationen |
| 400              | N/A          | Fehlerhafte Anforderungszeichenfolge                          |
| 500              | 500          | Interner Fehler                                    |

<Aside type="note">
Ein Fehler in einem Array von Benachrichtigungen

Wenn die `createMessage`-Anfrage mehrere Nachrichten im `notifications`-Array hat, werden sie nacheinander verarbeitet und gesendet. Wenn eine der Nachrichten nicht geparst werden kann, gibt unsere API `"status_code":210` mit den Codes der erfolgreich gesendeten Nachrichten zurück, d.h. denen, die der fehlerhaften Nachricht in der Anfrage vorausgehen.
</Aside>

### API-Messaging-Tracing

Aus Gründen des Lastausgleichs _speichern wir keine Nachrichten, die über die API mit dem „devices“-Parameter gesendet werden, der weniger als 10 Geräte in einem Array enthält_. Aus diesem Grund werden solche Nachrichten nicht in Ihrer Nachrichten-Historie angezeigt.

Um Push-Berichte während der Testphase zu sehen, verwenden Sie das **API-Messaging-Tracing**. Wenn Sie diese Option **EIN**schalten, können Sie _dieses Limit für 1 Stunde überschreiben und solche Pushes in der Nachrichten-Historie speichern_. Das API-Messaging-Tracing schaltet sich nach 1 Stunde automatisch **AUS**.

Das API-Messaging-Tracing kann auf der Seite [Nachrichten-Historie](/de/product/statistics-and-analytics/message-history/) durch Klicken auf **API-Messaging-Tracing starten** in der oberen rechten Ecke aktiviert werden.

### Tag-Bedingungen

Jede Tag-Bedingung ist ein Array wie `[tagName, operator, operand]`, wobei

* tagName: Name eines Tags
* operator: "EQ" | "IN" | "NOTEQ" | "NOTIN" | "LTE" | "GTE" | "BETWEEN" | "NOTSET" | "ANY"
* operand: string | integer | array | date

#### Operatorbeschreibung

* EQ: Tag-Wert ist gleich dem Operanden;
* IN: Tag-Wert überschneidet sich mit dem Operanden (Operand muss immer ein Array sein);
* NOTEQ: Tag-Wert ist nicht gleich einem Operanden;
* NOTIN: Tag-Wert überschneidet sich nicht mit dem Operanden (Operand muss immer ein Array sein);
* GTE: Tag-Wert ist größer oder gleich dem Operanden;
* LTE: Tag-Wert ist kleiner oder gleich dem Operanden;
* BETWEEN: Tag-Wert ist größer oder gleich dem min-Operandenwert, aber kleiner oder gleich dem max-Operandenwert (Operand muss immer ein Array sein);
* NOTSET: Tag nicht gesetzt. Operand wird nicht berücksichtigt;
* ANY: Tag hat einen beliebigen Wert. Operand wird nicht berücksichtigt.

#### String-Tags

Gültige Operatoren: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY\
Gültige Operanden:

* EQ, NOTEQ: Operand muss eine Zeichenfolge sein;
* IN, NOTIN: Operand muss ein Array von Zeichenfolgen sein wie `["value 1", "value 2", "value N"]`;
* NOTSET: Tag nicht gesetzt. Operand wird nicht berücksichtigt;
* ANY: Tag hat einen beliebigen Wert. Operand wird nicht berücksichtigt.

#### Integer-Tags

Gültige Operatoren: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
Gültige Operanden:

* EQ, NOTEQ, GTE, LTE: Operand muss eine ganze Zahl sein;
* IN, NOTIN: Operand muss ein Array von ganzen Zahlen sein wie `[value 1, value 2, value N]`;
* BETWEEN: Operand muss ein Array von ganzen Zahlen sein wie `[min_value, max_value]`;
* NOTSET: Tag nicht gesetzt. Operand wird nicht berücksichtigt;
* ANY: Tag hat einen beliebigen Wert. Operand wird nicht berücksichtigt.

#### Datums-Tags

Gültige Operatoren: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
Gültige Operanden:

* `"YYYY-MM-DD 00:00"` (Zeichenfolge)
* Unix-Zeitstempel `1234567890` (Ganzzahl)
* `"N days ago"` (Zeichenfolge) für die Operatoren EQ, BETWEEN, GTE, LTE

#### Boolesche Tags

Gültige Operatoren: EQ, NOTSET, ANY\
Gültige Operanden: `0, 1, true, false`

#### Listen-Tags

Gültige Operatoren: IN, NOTIN, NOTSET, ANY\
Gültige Operanden: Operand muss ein Array von Zeichenfolgen sein wie `["value 1", "value 2", "value N"]`.

<Aside type="danger">
Denken Sie daran, dass die Parameter „filter“ und „conditions“ nicht zusammen verwendet werden sollten.\
Außerdem werden beide **ignoriert**, wenn der Parameter "devices" in derselben Anfrage verwendet wird.
</Aside>

<Aside type="note">
#### Länder- und Sprach-Tags

Der Wert des Sprach-Tags ist ein zweibuchstabiger Kleinbuchstabencode gemäß [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)\
Der Wert des Länder-Tags ist ein zweibuchstabiger GROSSBUCHSTABEN-Code gemäß [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)\
Um beispielsweise eine Push-Benachrichtigung an portugiesischsprachige Abonnenten in Brasilien zu senden, müssen Sie die folgende Bedingung angeben: `"conditions": [["Country", "EQ", "BR"],["Language", "EQ", "pt"]]`
</Aside>

### /createMessage-Snippets

<Aside type="caution" title="Wichtig">
Bitte seien Sie vorsichtig bei der Verwendung der Snippets. Begrenzen Sie die Anzahl der Empfänger, indem Sie den Parameter "users", "devices", "filter" oder "conditions" angeben. Wenn keiner dieser Parameter angegeben ist, wird die Nachricht **an jedes Gerät** gesendet, das Push-Benachrichtigungen von der Anwendung abonniert hat.
</Aside>

Beispiel `/createMessage`-Anfragen:

<Tabs>
<TabItem label="Bash">
```bash
#!/bin/bash
 
#Usage
if [ ! -n "$1" ] || [ ! -n "$2" ]
then
  echo "`basename $0` usage: api_token appid message";
  exit 1;
fi;
MESSAGE="$3";
if [ -z "$3" ]
then
MESSAGE='One push to rule them all!'
fi;
 
echo -e "Response:"
curl --data-binary "
{\"request\":
    {\"application\":\"$2\",
     \"auth\":\"$1\",
     \"notifications\":
        [{
                        \"send_date\": \"now\",
            \"content\": \"$MESSAGE\"
        }]
    }
}" \
-H "Content-type: application/json" \
"https://api.pushwoosh.com/json/1.3/createMessage"
echo "";
exit 0;
```
</TabItem>

<TabItem label="PHP">
```php
<?php 
define('PW_AUTH', 'API TOKEN');
define('PW_APPLICATION', 'APPLICATION CODE');
define('PW_DEBUG', true);
 
function pwCall($method, $data) {
    $url = 'https://api.pushwoosh.com/json/1.3/' . $method;
    $request = json_encode(['request' => $data]);
 
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
 
    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
 
    if (defined('PW_DEBUG') && PW_DEBUG) {
        print "[PW] request: $request
";
        print "[PW] response: $response
";
        print '[PW] info: ' . print_r($info, true);
    }
}
 
pwCall('createMessage', array(
    'application' => PW_APPLICATION,
    'auth' => PW_AUTH,
    'notifications' => array(
            array(
                'send_date' => 'now',
                'content' => 'test',
                'data' => array('custom' => 'json data'),
                'link' => 'https://pushwoosh.com/'
            )
        )
    )
);
```
</TabItem>

<TabItem label="Erlang">
```erlang
-module(pushwoosh).
-export([run/0, stop/0, sendMessage/1]).
%% sendMessage argument: message text %%
 
%% Authentication & App_id %%
-define(PW_AUTH, "YOUR_AUTH_TOKEN").
-define(PW_APPLICATION, "YOUR_PUSHWOOSH_APP_CODE").
 
%% KickStart %%
run() ->
    application:start(unicode),
    application:start(crypto),
    application:start(public_key),
    application:start(ssl),
    application:start(inets),
    %% HTTP Client verbosity options flase, verbose, debug
    httpc:set_options([{verbose, false}]).  
stop() ->
    application:stop(ssl),
    application:stop(public_key),       
    application:stop(crypto),
    application:stop(inets).
%% JSON Wars !
encode(S) -> encode(S, [$"]).
encode([], Acc) -> lists:reverse([$" | Acc]);
encode([C | Cs], Acc) ->
        Hex = lists:flatten(io_lib:format("~4.16.0b", [C])),
        encode(Cs, lists:reverse(Hex) ++ "u\" ++ Acc).
 
sendMessage(Message_text) ->
    %% URL to JSON API 1.3
    Url = "https://api.pushwoosh.com/json/1.3/createMessage",
    EncodedMessage = encode(Message_text),
    {ok, Response} = httpc:request(
        %%Method 
        post, 
        %%Request
        {Url, [{"User-Agent", "Erlang exemple"}], "application/json; charset=UTF-8", 
        "{\"request\":{
        \"application\": \""?PW_APPLICATION"\",
        \"auth\": \""?PW_AUTH"\",
        \"notifications\": [{
        \"send_date\": \"now\",
        \"content\": "++EncodedMessage++"
        }]}}"},
        %%HTTP options
        [{ssl,[{verify, verify_none}]}, {version, "HTTP/1.0"}],
        %%Options
        []),
    io:format("And received ~p", [Response]).
```
</TabItem>

<TabItem label="Ruby">
```ruby
class PushNotification
 
  #- PushWoosh API Documentation https://www.pushwoosh.com/programming-push-notification/pushwoosh-push-notification-remote-api/ 
  #- Two methods here:
  #     - PushNotification.new.notify_all(message) Notifies all with the same option
  #     - PushNotification.new.notify_devices(notification_options = {}) Notifies specific devices with custom options
 
  include HTTParty #Make sure to have the HTTParty gem declared in your gemfile https://github.com/jnunemaker/httparty
  default_params :output => 'json'
  format :json
 
  def initialize
    #- Change to your settings
    @auth = {:application  => "00000-00000",:auth => "auth_token"}
  end
 
  # PushNotification.new.notify_all("This is a test notification to all devices")
  def notify_all(message)
    notify_devices({:content  => message})
  end
 
  # PushNotification.new.notify_device({
  #  :content  => "TEST",
  #  :data  => {:custom_data  => value},
  #  :devices  => array_of_tokens
  #})
  def notify_devices(notification_options = {})
    #- Default options, uncomment :data or :devices if needed
    default_notification_options = {
                        # YYYY-MM-DD HH:mm  OR 'now'
                        :send_date  => "now",
                        # Object( language1: 'content1', language2: 'content2' ) OR string
                        :content  => {
                            :fr  => "Test",
                            :en  => "Test"
                        },
                        # JSON string or JSON object "custom": "json data"
                        #:data  => {
                        #    :custom_data  => value
                        #},
                        # omit this field (push notification will be delivered to all the devices for the application), or provide the list of devices IDs
                        #:devices  => {}
                      }
 
    #- Merging with specific options
    final_notification_options = default_notification_options.merge(notification_options)
 
    #- Constructing the final call
    options = @auth.merge({:notifications  => [final_notification_options]})
    options = {:request  => options}                                                                                                                             
    #- Executing the POST API Call with HTTPARTY - :body => options.to_json allows us to send the json as an object instead of a string
    response = self.class.post("https://api.pushwoosh.com/json/1.3/createMessage", :body  => options.to_json,:headers => { 'Content-Type' => 'application/json' })
  end
end
```
</TabItem>

<TabItem label="Java">
```java
// Uses JSON classes from https://json.org/java/

package com.arellomobile;
 
import org.json.*;
import java.io.*;
import java.net.*;
 
public class SendPushNotificationSample
{
    public static final String PUSHWOOSH_SERVICE_BASE_URL = "https://api.pushwoosh.com/json/1.3/";
    private static final String AUTH_TOKEN = "YOUR_AUTH_TOKEN";
    private static final String APPLICATION_CODE = "PW_APPLICATION_CODE";
 
    public static void main(String[] args) throws JSONException, MalformedURLException
    {
        String method = "createMessage";
        URL url = new URL(PUSHWOOSH_SERVICE_BASE_URL + method);
 
        JSONArray notificationsArray = new JSONArray()
                .put(new JSONObject().put("send_date", "now")
                                     .put("content", "test")
                                     .put("link", "https://pushwoosh.com/"));
 
        JSONObject requestObject = new JSONObject()
                .put("application", APPLICATION_CODE)
                .put("auth", AUTH_TOKEN)
                .put("notifications", notificationsArray);
 
        JSONObject mainRequest = new JSONObject().put("request", requestObject);
        JSONObject response = SendServerRequest.sendJSONRequest(url, mainRequest.toString());
 
        System.out.println("Response is: " + response);
    }
}
 
class SendServerRequest
{
    static JSONObject sendJSONRequest(URL url, String request)
    {
        HttpURLConnection connection = null;
        try
        {
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoInput(true);
            connection.setDoOutput(true);
 
            DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
            writer.write(request.getBytes("UTF-8"));
            writer.flush();
            writer.close();
 
            return parseResponse(connection);
        }
        catch (Exception e)
        {
            System.out.println("An error occurred: " + e.getMessage());
            return null;
        }
        finally
        {
            if (connection != null)
            {
                connection.disconnect();
            }
        }
    }
 
    static JSONObject parseResponse(HttpURLConnection connection) throws IOException, JSONException
    {
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder response = new StringBuilder();
 
        while ((line = reader.readLine()) != null)
        {
            response.append(line).append('
');
        }
        reader.close();
 
        return new JSONObject(response.toString());
    }
}
```
</TabItem>

<TabItem label="Python">
```python
import json
 
PW_AUTH = 'API TOKEN'
PW_APPLICATION_CODE = 'APPLICATION CODE'
 
try:
    # For Python 3.0 and later
    from urllib.request import urlopen
    from urllib.request import Request
except ImportError:
    # Fall back to Python 2's urllib2
    from urllib2 import urlopen
    from urllib2 import Request
 
def pw_call(method, data):
    url = 'https://api.pushwoosh.com/json/1.3/' + method
    data = json.dumps({'request': data})
    req = Request(url, data.encode('UTF-8'), {'Content-Type': 'application/json'})
    try:
        f = urlopen(req)
        response = f.read()
        f.close()
        print('Pushwoosh response: ' + str(response))
    except Exception as e:
        print ('Request error: ' + str(e))
 
if __name__ == '__main__':
    pw_call('createMessage', {
        'auth': PW_AUTH,
        'application': PW_APPLICATION_CODE,
        'notifications': [
            {
                'send_date': 'now',
                'content': 'test',
                'data': {"custom": "json data"},
                'link': 'https://pushwoosh.com'
            }
        ]
    }
    )
```
</TabItem>

<TabItem label=".NET">
```
using System;
using System.IO;
using System.Net;
using Newtonsoft.Json.Linq;

namespace WebApplication1
{
   public partial class Default : System.Web.UI.Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {
           string pwAuth = "YOUR_AUTH_TOKEN";
           string pwApplication = "PW_APPLICATION_CODE";
           JObject json = new JObject(
               new JProperty("application", pwApplication),
               new JProperty("auth", pwAuth),
               new JProperty("notifications",
                   new JArray(
                       new JObject(
                           new JProperty("send_date", "now"),
                           new JProperty("content", "test"),
                           new JProperty("wp_type", "Toast"),
                           new JProperty("wp_count", 3),
                           new JProperty("data",
                               new JObject(
                                   new JProperty("custom", "json data"))),
                           new JProperty("link", "https://pushwoosh.com/"),
                           new JProperty("conditions",
                               new JArray(
                                   (object)new JArray("Color", "EQ", "black")))))));
           PWCall("createMessage", json);
       }
       private void PWCall(string action, JObject data)
       {
           Uri url = new Uri("https://api.pushwoosh.com/json/1.3/" + action);
           JObject json = new JObject(new JProperty("request", data));
           DoPostRequest(url, json);
       }
       private void DoPostRequest(Uri url, JObject data)
       {
           HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
           req.ContentType = "text/json";
           req.Method = "POST";
           using (var streamWriter = new StreamWriter(req.GetRequestStream()))
           {
               streamWriter.Write(data.ToString());
           }
           HttpWebResponse httpResponse;
           try
           {
               httpResponse = (HttpWebResponse)req.GetResponse();
           }
           catch (Exception exc)
           {
               throw new Exception(string.Format("Problem with {0}, {1}", url, exc.Message));
           }
           using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
           {
               var responseText = streamReader.ReadToEnd();
               Page.Response.Write(responseText);
           }
       }
   }
}
```
</TabItem>

<TabItem label="Go">
```go
package main

import
(
	"fmt"
	"encoding/json"
	"net/http"
	"bytes"
	"io/ioutil"
)

const (
	PW_APPLICATION = "APPLICATION CODE"
	PW_AUTH = "API TOKEN"
	PW_ENDPOINT = "https://api.pushwoosh.com/json/1.3/"
)

func pwCall(method string, data []byte) (bool) {
	url := PW_ENDPOINT + method
	request, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
	request.Header.Set("Content-Type", "application/json")

	client := http.Client{}
	response, err := client.Do(request)
	if err != nil {
		fmt.Println("Error occur: " + err.Error())
		return false
	}
	defer response.Body.Close()

	fmt.Println("Response Status: ", response.Status)
	if (response.StatusCode == 200) {
		body, _ := ioutil.ReadAll(response.Body)
		fmt.Println("Response Body: ", string(body))
		return true
	}
	return false
}

func main() {
	requestData := map[string]interface{}{
		"request": map[string]interface{} {
			"auth": PW_AUTH,
			"application": PW_APPLICATION,
			"notifications": []interface{}{
				map[string]interface{} {
					"send_date": "now",
					"content": "test",
					"link": "https://pushwoosh.com",
				},
			},
		},
	}
	jsonRequest, _ := json.Marshal(requestData)
	requestString := string(jsonRequest)
	fmt.Println("Request body: " + requestString)

	pwCall("createMessage", jsonRequest)
}
```
</TabItem>

<TabItem label="JavaScript">
```javascript
$.ajax({
    type: "POST",
    url: "https://api.pushwoosh.com/json/1.3/createMessage",
    data: JSON.stringify({
        "request": {
            "application": "APPLICATION CODE",
            "auth": "API TOKEN",
            "notifications": [{
                "send_date": "now",
                "ignore_user_timezone": true,
                "content": "Hello world!"
            }]
        }
    }),
    dataType: "json"
}).done(function(data) {
    console.log(data);
});
```
</TabItem>
</Tabs>

## deleteMessage

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

Löscht eine geplante Nachricht.

#### Anforderungskörper

| Name                                      | Typ   | Beschreibung                                      |
| ----------------------------------------- | ------ | ------------------------------------------------ |
| auth*    | string | [API-Zugriffstoken](/de/developer/api-reference/api-identifiers/#api-access-token) aus dem Pushwoosh Control Panel.   |
| message* | string | [Nachrichtencode](/de/developer/api-reference/api-identifiers/#message-code), der in der `/createMessage`-Anfrage erhalten wurde. |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK"
}
```
</TabItem>
</Tabs>

```json title="Beispiel"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "message": "xxxx-xxxxxxx-xxxxxx" // erforderlich. Nachrichtencode, der in /createMessage erhalten wurde
  }
}
```

<Aside type="danger">
Sie können keine Nachrichten löschen, die bereits versendet wurden.
</Aside>

**Statuscodes:**

| HTTP-Statuscode | status_code | Beschreibung                                         |
| ---------------- | ------------ | --------------------------------------------------- |
| 200              | 200          | Nachricht erfolgreich gelöscht                        |
| 200              | 210          | Argumentfehler. Siehe status_message für weitere Informationen |
| 400              | N/A          | Fehlerhafte Anforderungszeichenfolge                            |
| 500              | 500          | Interner Fehler                                      |

```php
<?php
// see https://gomoob.github.io/php-pushwoosh/delete-message.html
use Gomoob\Pushwoosh\Model\Request\DeleteMessageRequest;

// creates request instance
$request = DeleteMessageRequest::create()->setMessage('MESSAGE_CODE');

// call '/deleteMessage' Web Service
$response = $pushwoosh->deleteMessage($request);

if($response->isOk()) {
    print 'Great, my message has been deleted !';
} else {
    print 'Oups, the deletion failed :-('; 
    print 'Status code : ' . $response->getStatusCode();
    print 'Status message : ' . $response->getStatusMessage();
}
```

## getMessageDetails

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

Ruft die Nachrichtendetails ab.

#### Anforderungskörper

| Name                                      | Typ   | Beschreibung                                    |
| ----------------------------------------- | ------ | ---------------------------------------------- |
| auth*    | string | [API-Zugriffstoken](/de/developer/api-reference/api-identifiers/#api-access-token) aus dem Pushwoosh Control Panel. |
| message* | string | [Nachrichtencode](/de/developer/api-reference/api-identifiers/#message-code) oder Nachrichten-ID.                    |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "message": {
      "id": 2068991743,
      "created": "2016-09-14 17:19:42",
      "send_date": "2016-09-14 17:19:41",
      "status": "done",
      "content": {
        "en": "Hello {Name|CapitalizeFirst|friend}! 🚀"
      },
      "platforms": "[1]",
      "ignore_user_timezone": "1",
      "code": "XXXX-92B4C3C5-A7F5EF70",
      "data": {
        "key": "value"
      }
    }
  }
}
```
</TabItem>
</Tabs>

```json title="Beispiel"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "message": "xxxx-xxxxxxx-xxxxxx" // erforderlich. Nachrichtencode oder Nachrichten-ID
  }
}
```

## createTargetedMessage <Badge text="Veraltet" variant="caution" size="small" />

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

Erstellt eine neue gezielte Push-Benachrichtigung.

#### Anforderungskörper

| Name                                              | Typ    | Beschreibung                                                                                                                            |
| ------------------------------------------------- | ------- |----------------------------------------------------------------------------------------------------------------------------------------|
| auth*            | string  | [API-Zugriffstoken](/de/developer/api-reference/api-identifiers/#api-access-token) aus dem Pushwoosh Control Panel.                                                                                         |
| devices_filter* | string  | Siehe Anmerkung unten.                                                                                                                      |
| send_date*      | string  | YYYY-MM-DD HH:mm oder 'now'.                                                                                                             |
| ignore_user_timezone                            | boolean | Wenn ignoriert, ist UTC-0 Standard für "send_date".                                                                                         |
| timezone                                          | string  | Wenn ignoriert, ist UTC-0 Standard für "send_date".                                                                                         |
| campaign                                          | string  | [Code einer Kampagne](/de/developer/api-reference/api-identifiers/#campaign-code), der Sie diese Push-Nachricht zuweisen möchten.                                                                      |
| content*         | string  | Benachrichtigungsinhalt. Details finden Sie im Anforderungsbeispiel.                                                                             |
| transactionId                                     | string  | Eindeutiger Nachrichtenidentifikator, um die Duplizierung von Nachrichten im Falle von Netzwerkproblemen zu verhindern. Wird auf der Seite von Pushwoosh für 5 Minuten gespeichert. |
| link                                              | string  | Link, der geöffnet wird, sobald ein Benutzer eine Push-Nachricht öffnet.                                                                                    |
| minimize_link                                    | integer | 0 - nicht minimieren, 2 - bit.ly. Standard = 2.                                                                                          |
| data                                              | object  | JSON-Zeichenfolge oder JSON-Objekt. Wird als "u"-Parameter im Payload übergeben (in JSON-Zeichenfolge konvertiert).                                 |
| preset                                            | string  | [Preset-Code](/de/developer/api-reference/api-identifiers/#preset-code).                                                                                                                           |
| send_rate                                        | integer | Drosselung. Gültige Werte sind von 100 bis 1000 Pushes pro Sekunde.                                                                       |
| inbox_date                                       | string  | Geben Sie an, wann eine Nachricht aus dem Posteingang entfernt werden soll.                                                                                       |
| inbox_image                                      | string  | URL des Bildes, das neben der Nachricht im Posteingang angezeigt werden soll.                                                                            |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "messageCode": "97B0-C7473871-2FBDFDC6"
  }
}
```
</TabItem>

<TabItem label="400 JSON-Syntaxfehler">
```
The request cannot be fulfilled due to bad syntax.
```
</TabItem>
</Tabs>

Weitere Antwortbeispiele:

<Tabs>
<TabItem label="210 - Syntax">
```json
{
  "status_code": 210,
  "status_message": "Errors occurred while compiling filter",
  "response": {
    "errors": [{
      "message": "Invalid tag set specification. \")\" expected.",
      "type": "syntax"
    }]
  }
}
```
</TabItem>

<TabItem label="210 - Semantik">
```json
{
  "status_code": 210,
  "status_message": "Errors occurred while compiling filter",
  "response": {
    "errors": [{
      "message": "Application \"11111-11111\" not found",
      "type": "semantic",
      "near": "\"11111-11111\""
    }]
  }
}

```
</TabItem>

<TabItem label="210 - Lexikalisch">
```json
{
  "status_code": 210,
  "status_message": "Errors occurred while compiling filter",
  "response": {
    "errors": [{
      "message": "Invalid character \"/\" at 1:19",
      "type": "lexical"
    }]
  }
}
```
</TabItem>
</Tabs>

<Aside type="danger" title="Hard-Modus">
Sollten Sie stattdessen [`/createMessage`](#createmessage) verwenden?
</Aside>


<Tabs>
<TabItem label="Beispiel">
```json title="Beispiel"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",    // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // erforderlich. Syntax unten erklärt
    "send_date": "now",                // optional. YYYY-MM-DD HH:mm ODER 'now'
    "ignore_user_timezone": true,      // optional.
    "timezone": "America/New_York",    // optional. Wenn ignoriert, ist UTC-0 Standard für "send_date".
                                       //           Weitere Informationen https://php.net/manual/timezones.php.
    "campaign": "CAMPAIGN_CODE",       // optional. Kampagnencode, dem Sie diese Push-Nachricht zuweisen möchten.
    "content": {                       // optional. Objekt ODER Zeichenfolge. Verwenden Sie stattdessen "wns_content" für Windows.
      "en": "English",
      "de": "Deutsch"
    },
    "transactionId": "unique UUID",    // optional. Eindeutiger Nachrichtenidentifikator, um die Duplizierung von Nachrichten
                                       //           im Falle von Netzwerkproblemen zu verhindern. Wird auf der Seite von
                                       //           Pushwoosh für 5 Minuten gespeichert.
    "rich_media": "XXXXX-XXXXX",       // optional. Kopieren Sie den Rich-Media-Code aus der URL-Leiste der
                                       //           Rich-Media-Editor-Seite im Pushwoosh Control Panel. 
    "link": "https://google.com",      // optional. Für Deeplinks fügen Sie "minimize_link": 0 hinzu
    "minimize_link": 0,                // optional. 0 — nicht minimieren, 2 — bitly. Standard = 2.
                                       //           Google URL Shortener ist seit dem 30. März 2019 deaktiviert.
                                       //           Bitte beachten Sie, dass Shortener Einschränkungen
                                       //           bezüglich der Anzahl der Aufrufe haben.
    "data": {                          // optional. JSON-Zeichenfolge oder JSON-Objekt.
      "key": "value"                   //           Wird als "u"-Parameter im Payload übergeben
    },                                 //           (in JSON-Zeichenfolge konvertiert).
    "preset": "XXXXX-XXXXX",           // optional. Push-Preset-Code aus Ihrem Control Panel.
    "send_rate": 100,                  // optional. Drosselung. Gültige Werte sind von 100 bis 1000 Pushes/Sekunde.
    "dynamic_content_placeholders": {  // optional. Platzhalter für dynamische Inhalte anstelle von Geräte-Tags.
      "firstname": "John",
      "lastname": "Doe"
    },

    // Um die Nachricht über die API im Posteingang zu speichern, verwenden Sie "inbox_date" oder "inbox_image".
    // Die Nachricht wird gespeichert, wenn mindestens einer dieser Parameter verwendet wird. 
    "inbox_image": "Inbox image URL",  // optional. Das Bild, das neben der Nachricht angezeigt werden soll.
    "inbox_date": "2017-02-02"         // optional. Geben Sie an, wann eine Nachricht aus dem Posteingang entfernt werden soll.
                                       //           Die Nachricht wird um 00:00:01 UTC des
                                       //           angegebenen Datums aus dem Posteingang entfernt, sodass der vorherige Tag der letzte
                                       //           Tag ist, an dem ein Benutzer die Nachricht in seinem Posteingang sehen kann.
                                       //           Wenn nicht angegeben, ist das Standard-Entfernungsdatum der nächste
                                       //           Tag nach dem Sendedatum.
  }
}
```
</TabItem>

<TabItem label="Plattformspezifische Parameter">
```json title="Plattformspezifische Parameter"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",        // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "devices_filter": "FILTER CONDITION",
    "send_date": "now",                    // optional. YYYY-MM-DD HH:mm ODER 'now'
    "content": {                           // optional. Objekt ODER Zeichenfolge.
      "en": "English",                     //           Verwenden Sie stattdessen "wns_content" für Windows.
      "de": "Deutsch"
    },
    "ignore_user_timezone": true,          // optional.
    "timezone": "America/New_York",        // optional. Wenn ignoriert, ist UTC-0 Standard für "send_date".
                                           //           Weitere Informationen https://php.net/manual/timezones.php.
    "campaign": "CAMPAIGN_CODE",           // optional. Kampagnencode, dem Sie diese Push-Nachricht zuweisen möchten.
    
    // iOS-bezogene Parameter
    "ios_badges": 5,                       // optional. iOS-Anwendungs-Badge-Nummer.
                                           //           Verwenden Sie "+n" oder "-n", um den Badge-Wert um n zu erhöhen/verringern.
    "ios_sound": "sound file.wav",         // optional. Name der Sounddatei im Haupt-Bundle der Anwendung.
                                           //           Wenn leer gelassen, erzeugt das Gerät keinen Ton
                                           //           beim Empfang eines Pushs.
    "ios_sound_off": true,                 // optional. Aktivieren/Deaktivieren des durch das Feld "ios_sound" eingestellten Tons.
    "ios_ttl": 3600,                       // optional. Time-to-Live-Parameter — maximale Lebensdauer der Nachricht in Sekunden.
    "ios_silent": 1,                       // optional. Aktiviert stille Benachrichtigungen (ignoriert "sound" und "content").
    "ios_category_id": "1",                // optional. iOS8-Kategorie-ID von Pushwoosh.
    "ios_category_custom": "category",     // optional. Benutzerdefinierte APNS-Kategorie.
    "ios_root_params": {                   // optional. Parameter auf Root-Ebene für das aps-Wörterbuch.
      "aps": {
        "content-available": "0",          // optional. Setzen Sie "1", um einen stillen Push zu senden, und "0" für einen regulären Push.
        "mutable-content": 1               // erforderlich für iOS10+ Medienanhänge.
      },
      "attachment": "YOUR_ATTACHMENT_URL", // iOS10+ Medienanhang-URL.
      "data": {}                           // optional. Vom Benutzer bereitgestellte Daten, max. 4 KB
    },
    "apns_trim_content": 1,                // optional. (0|1) Kürzt die überschüssigen Inhaltszeichenfolgen mit Ellipsen.
    "ios_title": {                         // optional. Fügt einen Titel für die iOS-Push-Benachrichtigung hinzu.
      "en": "title"
    },
    "ios_subtitle": {                      // optional. Fügt einen Untertitel für die iOS-Push-Benachrichtigung hinzu.
      "en": "subTitle"
    },
    "ios_content": {                       // optional. Fügt Inhalt für die iOS-Push-Benachrichtigung hinzu.
      "en": "content"
    },
    
    // Android-bezogene Parameter
    "android_root_params": {               // optional. Benutzerdefiniertes Schlüssel-Wert-Objekt.
      "key": "value"                       //           Parameter auf Root-Ebene für die Android-Payload-Empfänger.
    },
    "android_sound": "soundfile",          // optional. Keine Dateierweiterung. Wenn leer gelassen, erzeugt das Gerät
                                           //           keinen Ton beim Empfang eines Pushs.
    "android_sound_off": true,             // optional. Aktivieren/Deaktivieren des durch das Feld "android_sound" eingestellten Tons
    "android_header": {                    // optional. Objekt ODER Zeichenfolge. Android-Benachrichtigungs-Header.
      "en": "header" 
    },
    "android_content": {                   // optional. Objekt ODER Zeichenfolge. Android-Benachrichtigungsinhalt.
      "en": "content"
    },
    "android_icon": "icon.png",  
    "android_custom_icon": "URL.png",      // optional. Vollständiger Pfad-URL zur Bilddatei.
    "android_banner": "URL.png",           // optional. Vollständiger Pfad-URL zur Bilddatei.
    "android_badges": 5,                   // optional. integer. Android-Anwendungssymbol-Badge-Nummer.
                                           //           Verwenden Sie "+n" oder "-n", um den Badge-Wert um n zu erhöhen/verringern.
    "android_gcm_ttl": 3600,               // optional. Time-to-Live-Parameter — maximale Lebensdauer der Nachricht in Sekunden.
    "android_vibration": 0,                // optional. Android-Vibrationserzwingung für hochpriorisierte Pushes.
    "android_led": "#rrggbb",              // optional. LED-Hex-Farbe, das Gerät wird sein Bestes tun, um sie anzunähern.
    "android_priority": -1,                // optional. Setzt den "importance"-Parameter für Geräte mit Android 8.0
                                           //           und höher sowie den "priority"-Parameter für Geräte
                                           //           mit Android 7.1 und niedriger. Legt die Unterbrechungs-
                                           //           stufe eines Benachrichtigungskanals oder einer bestimmten Benachrichtigung fest.
                                           //           Gültige Werte sind -2, -1, 0, 1, 2.
    "android_delivery_priority": "normal", // optional. "normal" oder "high". Ermöglicht die Zustellung der Benachrichtigung,
                                           //           wenn das Gerät im Energiesparmodus ist. 
    "android_ibc": "#RRGGBB",              // optional. Symbolhintergrundfarbe auf Lollipop, #RRGGBB,
                                           //           #AARRGGBB, "red", "black", "yellow", etc.
    "android_silent": 1,                   // optional. 0 oder 1. Stille Benachrichtigung aktivieren.
                                           //           Ton und Inhalt ignorieren
    
    // Amazon-bezogene Parameter
    "adm_root_params": {                   // optional. Benutzerdefiniertes Schlüssel-Wert-Objekt
      "key": "value"
    },
    "adm_sound": "push.mp3",
    "adm_sound_off": true,                 // optional. Aktivieren/Deaktivieren des durch das Feld "adm_sound" eingestellten Tons
    "adm_header": {
      "en": "Header"
    },
    "adm_content": {
      "en": "content"
    },
    "adm_icon": "icon.png",
    "adm_custom_icon": "URL.png",
    "adm_banner": "URL.png",
    "adm_ttl": 3600,                       // optional. Time-to-Live-Parameter — die maximale Lebensdauer der Nachricht
                                           //           in Sekunden.
    "adm_priority": -1,                    // optional. Priorität des Pushs in der Amazon-Push-Schublade,
                                           //           gültige Werte sind -2, -1, 0, 1 und 2.
    
    // Mac OS X-bezogene Parameter
    "mac_badges": 3,
    "mac_sound": "sound.caf",
    "mac_sound_off": true,
    "mac_root_params": {
      "content-available": 1
    },
    "mac_ttl": 3600,                       // optional. Time-to-Live-Parameter — maximale Lebensdauer der Nachricht in Sekunden.
    "mac_title": {                         // optional. Fügt einen Titel für die Push-Benachrichtigung hinzu.
      "en": "title"
    },
    "mac_subtitle": {                      // optional. Fügt einen Untertitel für die MacOS-Push-Benachrichtigung hinzu.
      "en": "subtitle"
    },
    "mac_content": {                       // optional. Fügt Inhalt für die MacOS-Push-Benachrichtigung hinzu.
      "en": "content"
    },
    
    // Windows-bezogene Parameter
    "wns_content": {                       // erforderlich. Inhalt (XML oder roh) der Benachrichtigung, kodiert
                                           //           in MIME's base64 in Form von Objekt ODER Zeichenfolge
      "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
      "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
    },
    "wns_type": "Badge",                   // 'Tile' | 'Toast' | 'Badge' | 'Raw'
    "wns_tag": "myTag",                    // optional. Wird in der Tile-Ersetzungsrichtlinie verwendet.
                                           //           Eine alphanumerische Zeichenfolge von nicht mehr als 16 Zeichen.
    "wns_cache": 1,                        // optional. (1|0) Übersetzt in den Wert X-WNS-Cache-Policy.
    "wns_ttl": 600,                        // optional. Ablaufzeit für die Benachrichtigung in Sekunden.
    
    // Safari-bezogene Parameter
    "safari_title": {                      // optional. Objekt ODER Zeichenfolge. Titel der Benachrichtigung.
      "en": "title"
    },
    "safari_content": {                    // optional. Objekt ODER Zeichenfolge. Inhalt der Benachrichtigung.
      "en": "content"
    },
    "safari_action": "Click here",         // optional.
    "safari_url_args": [                   // erforderlich, aber der Wert kann leer sein
      "firstArgument",
      "secondArgument"
    ],
    "safari_ttl": 3600,                    // optional. Time-to-Live-Parameter — die maximale
                                           //           Lebensdauer einer Nachricht in Sekunden.
    
    // Chrome-bezogene Parameter
    "chrome_title": {                      // optional. Sie können den Header der Nachricht in diesem Parameter angeben.
      "en": "title"
    },
    "chrome_content": {                    // optional. Sie können den Inhalt der Nachricht in diesem Parameter angeben.
      "en": "content"
    },
    "chrome_icon": "icon_URL",             // optional. Vollständiger Pfad-URL zum Symbol oder Dateipfad der Erweiterungsressourcen
    "chrome_gcm_ttl": 3600,                // optional. Time-to-Live-Parameter – maximale Lebensdauer der Nachricht in Sekunden.
    "chrome_duration": 20,                 // optional. Ändert die Anzeigezeit des Chrome-Push. Auf 0 setzen, um den Push anzuzeigen,
                                           //           bis der Benutzer damit interagiert.
    "chrome_image": "image_URL",           // optional. URL zu einem großen Bild
    "chrome_root_params": {                // optional. Setzen Sie spezifische Parameter für Nachrichten, die an Chrome gesendet werden.
      "key": "value"
    },
    "chrome_button_text1": "text1",        // optional.
    "chrome_button_url1": "button1_URL",   // optional. Wird ignoriert, wenn chrome_button_text1 nicht gesetzt ist.
    "chrome_button_text2": "text2",        // optional.
    "chrome_button_url2": "button2_url",   // optional. Wird ignoriert, wenn chrome_button_text2 nicht gesetzt ist.
    
    // Firefox-bezogene Parameter
    "firefox_title": {                     // optional. Objekt ODER Zeichenfolge. Hier können Sie den Nachrichten-Header angeben.
      "en": "title"
    },
    "firefox_content": {                   // optional. Objekt ODER Zeichenfolge. Hier können Sie den Nachrichteninhalt angeben.
      "en": "content"
    },
    "firefox_icon": "icon_URL",            // optional. Vollständiger Pfad-URL zum Symbol oder Pfad
                                           //           zur Datei in den Erweiterungsressourcen.
    "firefox_root_params": {               // optional. Setzen Sie spezifische Parameter für Nachrichten, die an Firefox gesendet werden.
      "key": "value"
    }
  }
}
```
</TabItem>
</Tabs>

Die Grundlagen sind sehr einfach – alle Filter werden auf den **Mengen** von Entitäten ausgeführt.

### Mengen

Mengen sind definiert als:

**1.** Geräte, die die jeweilige App abonniert haben (A);\
**2.** Geräte, die den angegebenen Tag-Werten (T) oder app-spezifischen Tag-Werten (AT) entsprechen;\


### Syntax

Versuchen wir es mit einigen Beispielen gemäß der obigen Liste.

#### Ansprechen von App-Abonnenten

Der "A"-Filter definiert eine Menge von Geräten, die eine bestimmte App abonniert haben:

`A("XXXXX-XXXXX", ["iOS", "Android", "OsX", "Windows", "Amazon", "Safari", "Chrome", "Firefox"])`

wobei

* "XXXXX-XXXXX" – Pushwoosh-Anwendungscode
* \["iOS", "Android", ...] – Array der Zielplattformen. Wenn weggelassen, wird die Nachricht an alle für diese App verfügbaren Plattformen gesendet.

#### Filtern nach Tag-Werten

Der "T"-Filter definiert eine Menge von Geräten, denen die angegebenen Tag-Werte zugewiesen sind.

`T(\"Age\", IN, [17,20])`

Definiert die Menge der Geräte, bei denen das „Alter“-Tag auf einen der Werte 17, 18, 19, 20 gesetzt ist.

<Aside type="caution">
Für **app-spezifische Tags** wird der "AT"-Filter angewendet. Stellen Sie sicher, dass Sie einen entsprechenden Anwendungscode als ersten Wert in einer AT-Menge angeben:

`AT(“XXXXX-XXXXX”, “TagName”, EQ, “VALUE”)`
</Aside>


### Tag-Typen und Operatoren

Es ist sehr wichtig zu verstehen, dass Tags zwischen den Apps geteilt werden, was ein sehr mächtiges Instrument zur Segmentierung und Filterung Ihrer Zielbenutzer darstellt, ohne sich an eine bestimmte App zu binden.

Ein Tag kann einer von drei verschiedenen Typen sein: **String, Integer, List**. Der Tag-Typ definiert, welche Operatoren Sie für ein bestimmtes Tag verwenden können.

#### String-Tags

**Anwendbare Operatoren:**

* **EQ** – zielt auf Geräte mit einem bestimmten Tag-Wert ab
* **IN** – zielt auf Geräte mit einem der angegebenen Tag-Werte ab
* **NOTIN** – zielt auf Geräte ohne angegebene Tag-Werte ab
* **NOTEQ** – zielt auf Geräte mit einem Tag-Wert ab, der nicht dem angegebenen entspricht
* **NOTSET** – zielt auf Geräte ohne Wert für ein bestimmtes Tag ab
* **ANY** – zielt auf Geräte mit einem beliebigen Wert für ein bestimmtes Tag ab

Beispiele:

`T (\"Age\", EQ, 30)` – filtert Benutzer im Alter von 30 Jahren

`T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"])` – filtert Benutzer, die Rot, Grün oder Blau als ihre Lieblingsfarbe gewählt haben.

`T (\"Name", NOTSET, \"\")` – zielt auf Geräte ohne Wert für das Name-Tag ab.

Sie können numerische Werte mit den String-Tags verwenden, aber solche Werte werden in eine Zeichenfolge konvertiert.

#### Integer-Tags

**Anwendbare Operatoren:**

* **GTE** – größer oder gleich einem angegebenen Wert
* **LTE**– kleiner oder gleich einem angegebenen Wert
* **EQ** – gleich einem angegebenen Wert
* **BETWEEN** – zwischen den minimalen und maximalen angegebenen Werten
* **IN** – einer der angegebenen Werte
* **NOTIN** – keine angegebenen Werte einem Gerät zugewiesen
* **NOTEQ** – Geräte mit einem Tag-Wert, der nicht dem angegebenen entspricht
* **NOTSET** – Geräte ohne Wert für ein bestimmtes Tag
* **ANY** – Geräte mit einem beliebigen Wert für ein bestimmtes Tag

Beispiele:

`T (\"Level\", EQ, 14)` – filtert nur Benutzer auf Level 14.

`T (\"Level\", BETWEEN, [1,5)` – filtert Benutzer auf den Levels 1, 2, 3, 4 und 5.

`T (\"Level", GTE, 29)` – zielt auf Benutzer ab, die mindestens Level 29 erreicht haben. 

#### Listen-Tags

**Anwendbare Operatoren:**

* **IN** – Geräte mit einem der angegebenen Tag-Werte

Beispiel: `T("Category", IN, ["breaking_news","business","politics"])`

#### Datums-Tags

**Anwendbare Operatoren:**

* **GTE** – größer oder gleich einem angegebenen Wert
* **LTE**– kleiner oder gleich einem angegebenen Wert
* **EQ** – gleich einem angegebenen Wert
* **BETWEEN** – zwischen den minimalen und maximalen angegebenen Werten
* **NOTEQ** – Geräte mit einem Tag-Wert, der nicht dem angegebenen entspricht
* **NOTSET** – Geräte ohne Wert für ein bestimmtes Tag
* **ANY** – Geräte mit einem beliebigen Wert für ein bestimmtes Tag

Beispiele:

`AT("7777D-322A7","Last Application Open", BETWEEN, ["2022-02-28", "2022-03-02"])`

`AT("7777D-322A7","Last Application Open", GTE, "90 days ago")`

### Operationen

* “+” – verbindet zwei Mengen (entspricht ODER)
* “\*” – schneidet zwei Mengen (entspricht UND)
* “\” – subtrahiert eine Menge von einer anderen (entspricht NICHT)

Alle Operationen sind linksassoziativ. "+" und "*" haben die gleiche Priorität. "\" hat eine höhere Priorität. Sie können Klammern verwenden, um die Prioritäten der Berechnungen zu definieren.

Beachten Sie, dass die “\”-Operation nicht kommutativ ist. `A("12345-12345") \ A("67890-67890")` ist nicht dasselbe wie `A("67890-67890") \ A("12345-12345")`.


<Aside type="note">
Sie können keinen der folgenden targeting-bezogenen Parameter in der /createTargetedMessage-Anfrage verwenden:

* "application"
* "platforms"
* "devices"
* "filter"
* "conditions"

Alle anderen in [`/createMessage`](#createmessage) aufgeführten Parameter werden unterstützt.
</Aside>

<Aside type="caution" title="Wichtig">
Es gibt ein bekanntes Problem mit der `/createTargetedMessage`-Methode: Wenn Sie keine Anwendungen im Abschnitt "devices_filter" angeben, zeigt Pushwoosh keine Anwendungen in den Push-Details an.
</Aside>

## getPushHistory <Badge text="Veraltet" variant="caution" size="small" />

<Aside type="note">
Verwenden Sie stattdessen [**/messages:list**](/de/developer/api-reference/statistics-api/message-statistics-api/#messageslist), um die Nachrichten-Historie und detailliertere Daten abzurufen.
</Aside>

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

Ruft die Nachrichten-Historie mit Push-Details ab.

#### Anforderungskörper

| Name                                   | Typ    | Beschreibung                                                                                                          |
| -------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
| auth* | string  | [API-Zugriffstoken](/de/developer/api-reference/api-identifiers/#api-access-token) aus dem Pushwoosh Control Panel.                                                                       |
| limitMessages                          | integer | Begrenzt die Anzahl der Nachrichten in einer Antwort. Mögliche Werte von 10 bis 1000.                                        |
| source                                 | string  | Quelle der Push-Historie. Kann null oder sein: "CP", "API", "GeoZone", "RSS", "AutoPush", "A/B Test".       |
| searchBy                               | string  | Mögliche Werte, nach denen gesucht werden kann. Kann null oder sein: "notificationID", "notificationCode", "applicationCode", "campaignCode". |
| value                                  | string  | Suchwert, der gemäß dem Feld "searchBy" festgelegt wird.                                                                  |
| lastNotificationID                     | string  | Wird für die Paginierung verwendet. Letzte messageId aus dem vorherigen /getPushHistory-Aufruf. Siehe Details unten.                       |

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "rows": [{
      "id": 10191611434,
      "code": "8071-07AD1171-77238AD1",
      "createDate": "2020-09-14 12:26:21",
      "sendDate": "2020-09-14 12:26:21",
      "content": {
        "en": "Hello!"
      },
      "url": null,
      "ios_title": null,
      "ios_subtitle": null,
      "ios_root_params": null,
      "android_header": null,
      "android_root_params": null,
      "conditions": null,
      "conditions_operator": "AND",
      "filter_code": "E3A64-A5F3C",
      "filter_conditions": "#In-app Purchase(≠0)",
      "filter_name": "Purchased something",
      "geozone": null,
      "campaignId": "",
      "campaignName": "",
      "subscription_segments": null,
      "open": {
        "C90C0-0E786": {
          "IOS": 0
        }
      },
      "sent": {
        "C90C0-0E786": {
          "IOS": 1
        }
      },
      "ctr": {
        "C90C0-0E786": 0
      }
    }, {
      "id": 10191609202,
      "code": "41CA-83F8E0D7-7A63822B",
      "createDate": "2020-09-14 12:25:55",
      "sendDate": "2020-09-14 12:25:55",
      "content": {
        "en": "Hi!"
      },
      "url": null,
      "ios_title": null,
      "ios_subtitle": null,
      "ios_root_params": null,
      "android_header": null,
      "android_root_params": null,
      "conditions": null,
      "conditions_operator": "AND",
      "filter_code": null,
      "filter_conditions": null,
      "filter_name": null,
      "geozone": null,
      "campaignId": "",
      "campaignName": "",
      "subscription_segments": {
        "2D732-BB981": "News"
      },
      "open": {
        "C90C0-0E786": {
          "CHROME": 0,
          "IOS": 0
        }
      },
      "sent": {
        "C90C0-0E786": {
          "CHROME": 1,
          "IOS": 2
        }
      },
      "ctr": {
        "C90C0-0E786": 0
      }
    }]
  }
}
```
</TabItem>
</Tabs>



```json title="Beispiel"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "source": null,                  // optional. Mögliche Werte sind null, "CP", "API", "GeoZone",
                                     //           "RSS", "AutoPush", "A/B Test"
    "searchBy": "applicationCode",   // optional. Mögliche Werte sind "", "notificationID",
                                     //           "notificationCode", "applicationCode", "campaignCode"
    "value": "C8717-703F2",          // optional. Suchwert, der gemäß dem Feld "searchBy" festgelegt wird.
    "lastNotificationID": 0,         // optional. Wird für die Paginierung verwendet. Letzte messageId aus dem
                                     //           vorherigen /getPushHistory-Aufruf. Siehe Details unten.
    "limitMessages": 1000            // optional. Möglicher Wert von 10 bis 1000.
  }
}
```

Diese Methode gibt 1000 Nachrichten aus dem Konto zurück, sortiert nach Nachrichten-ID. Um die zweite Seite zu erhalten, geben Sie die letzte Nachrichten-ID der vorherigen Antwort im Parameter **lastNotificationId** an.

### Antwortdatentypen

```
id -- int | 0 
code -- string
createDate -- string  (date: %Y-%m-%d %H:%M:%S)
sendDate -- string  (date: %Y-%m-%d %H:%M:%S)
content -- array ( dict {lang: value} | list [])
title -- array ( dict {lang: value} | list [])
subtitle -- array ( dict {lang: value} | list [])
url -- string
ios_title -- string | array ( dict {lang: value} ) | null
ios_subtitle -- string | array ( dict {lang: value} ) | null
ios_root_params -- dict (JSON) | null
android_header -- string | array ( dict {lang: value} ) | null
android_root_params -- dict (JSON) | null
conditions -- list (JSON) | null
conditions_operator -- string | null
filter_code -- string | null
filter_name -- string | null
filter_conditions -- string | null
geozone -- string | null
campaignId -- string | ""
campaignName -- string | ""
subscription_segments (obsolete) -- list (JSON) | null
data -- dict (JSON) | null
open -- dict [dict [string: int]]  | ""   Example: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}
sent -- dict [dict [string: int]]  | ""   Example: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}
ctr -- dict [string: int] | ""  Example: {'AAAAA-BBBBB': 1}
errors -- dict [string: int] | ""  Example: {'ANDROID': 1, 'IOS': 1}
```



## cancelMessage

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

Löscht eine geplante Nachricht.

#### Anforderungskörper

| Name                                      | Typ   | Beschreibung                                           |
| ----------------------------------------- | ------ | ----------------------------------------------------- |
| auth*    | string | [API-Zugriffstoken](/de/developer/api-reference/api-identifiers/#api-access-token) aus dem Pushwoosh Control Panel.        |
| message* | string | Der [Nachrichtencode](/de/developer/api-reference/api-identifiers/#message-code), der in der `/createMessage`-Antwort erhalten wurde. |

<Tabs>
<TabItem label="200">
```json
{
   "status_code":200,
   "status_message":"OK"
}
```
</TabItem>
</Tabs>

<Aside type="note">
Die Methode ist nur für Nachrichten zulässig, die sich im Status „ausstehend“, „wartend“ oder „in Bearbeitung“ befinden.
</Aside>

```json title="Beispiel"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // erforderlich. API-Zugriffstoken aus dem Pushwoosh Control Panel
    "message": "xxxx-xxxxxxx-xxxxxx" // erforderlich. Der Nachrichtencode, der in der /createMessage-Antwort erhalten wurde
  }
}
```

**Statuscodes:**

| HTTP-Statuscode | status_code | Beschreibung                                         |
| ---------------- | ------------ | --------------------------------------------------- |
| 200              | 200          | Nachricht erfolgreich storniert                       |
| 200              | 210          | Argumentfehler. Siehe status_message für weitere Informationen.  |
| 400              | N/A          | Fehlerhafte Anforderungszeichenfolge                            |
| 500              | 500          | Interner Fehler                                      |