# Messages API

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

<Aside type="caution" title="/createMessage и /createTargetedMessage устарели">
В новых интеграциях следует использовать унифицированный [**Messaging API v2**](/ru/developer/api-reference/messaging-api-v2/) — одна конечная точка заменяет все семейство `/create*Message`. См. [руководство по миграции](/ru/developer/api-reference/messaging-api-v2/migration-from-v1/) для сопоставления полей.

Устаревшие методы, описанные ниже, остаются полностью работоспособными. `/deleteMessage`, `/cancelMessage` и `/getMessageDetails` не являются устаревшими — используйте их как обычно для сообщений, созданных через v1 или v2.
</Aside>

<Aside type="note">
Для начала, пожалуйста, ознакомьтесь с описаниями [параметров запроса /createMessage](/ru/developer/api-reference/messages-api/api-prerequisites).
</Aside>

## createMessage <Badge text="Устарело" variant="caution" size="small" />

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

Создает новое push-уведомление.

#### Тело запроса

| Имя                                             | Тип    | Описание                                                                   |
| ----------------------------------------------- | ------ | -------------------------------------------------------------------------- |
| auth*          | string | [Токен доступа API](/ru/developer/api-reference/api-identifiers/#api-access-token) из Панели управления Pushwoosh.                             |
| application*   | string | [Код приложения Pushwoosh](/ru/developer/api-reference/api-identifiers/#application-code)                                               |
| notifications* | array  | Массив JSON с параметрами сообщения. Подробности см. в примере запроса ниже.  |

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

<Aside type="note">
Метод /createMessage поддерживает шаблоны контента. Чтобы узнать больше, обратитесь к [руководству по шаблонам Liquid](/ru/developer/guides/personalization/liquid-templates/).
</Aside>

### Пример запроса

```json title="Example"
{
  "request": {
    "application": "XXXXX-XXXXX",       // обязательно. Код приложения Pushwoosh.
    "auth": "yxoPUlwqm…………pIyEX4H",     // обязательно. Токен доступа API из Панели управления Pushwoosh.
    "notifications": [{
      "send_date": "now",               // опционально. YYYY-MM-DD HH:mm ИЛИ 'now'
      "content": {                      // опционально. объект ИЛИ строка.
        "en": "English",                //           Используйте "wns_content" для Windows.
        "fr": "French"
      },
      "title": {                        // опционально. объект ИЛИ строка. 
        "en": "Title",                  //           Игнорируется, если указаны заголовки для конкретных платформ
        "fr": "Titre"                   //           'ios_title', 'android_header' и т.д.
      },                                //           см. примеры параметров для конкретных платформ ниже.
      "subtitle":{                      // опционально. объект ИЛИ строка. 
        "en": "Subtitle",               //           Игнорируется, если указаны заголовки для конкретных платформ
        "fr": "Sous-titre"              //           'ios_subtitle' и т.д.
      },                                //           см. примеры параметров для конкретных платформ ниже.
      "ignore_user_timezone": true,     // опционально.
      "timezone": "America/New_York",   // опционально. Если не указано, для "send_date" по умолчанию используется UTC-0.
                                        //           См. https://php.net/manual/timezones.php для
                                        //           поддерживаемых часовых поясов.
      "campaign": "CAMPAIGN_CODE",      // опционально. Код кампании, к которой вы хотите
                                        //           присвоить это push-сообщение.
      "geozone": {                      // опционально. Отправить в геозону
        "lat": 22.22,
        "lng": 33.33,
        "range": 110
      },
      "rich_media": "XXXXX-XXXXX",      // опционально. Скопируйте код Rich Media из URL-адреса
                                        //           страницы редактора Rich Media в Панели управления Pushwoosh.
      "link": "https://google.com",     // опционально. Для диплинков добавьте "minimize_link": 0
      "minimize_link": 0,               // опционально. 0 — не сокращать, 2 — bitly. По умолчанию = 2.
                                        //           Обратите внимание, что у сервисов сокращения ссылок есть ограничения
                                        //           на количество вызовов.
      "data": {                         // опционально. Строка JSON или объект JSON, будет передан как
        "key": "value"                  //           параметр "u" в полезной нагрузке (преобразован в строку JSON).
      },
      "transactionId": "unique UUID",   // опционально. Уникальный идентификатор сообщения для предотвращения дублирования
                                        //           в случае проблем с сетью. Хранится на стороне
                                        //           Pushwoosh в течение 5 минут. 
      "platforms": [                    // опционально. 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",          // опционально. Код пресета пуша из вашей Панели управления.
                                        //           Если в запросе передаются конкретные параметры,
                                        //           они переопределяют параметры пресета.
      "send_rate": 100,                 // опционально. Регулирование скорости. Допустимые значения от 100 до 1000 пушей/секунду.
      "send_rate_avoid": true,          // опционально. Если установлено в true, ограничение скорости не будет применяться к
                                        //           этому конкретному push-уведомлению.
      // Связано с шаблонами, пожалуйста, обратитесь к руководству по движку шаблонов, чтобы узнать больше
      "template_bindings": {            // опционально.
        "TemplatePlaceholder": "Value"
      },
      "dynamic_content_placeholders": { // опционально. Плейсхолдеры для динамического контента вместо тегов устройства.
        "firstname": "John",
        "lastname": "Doe"
      },
      "message_type": "marketing",       // опционально. "marketing" или "transactional".
                                         // Если не указано, пользователи с PW_ControlGroup: true не получат сообщение.

      // Параметры ограничения частоты. Убедитесь, что в Панели управления настроено глобальное ограничение частоты.
      // Ограничение частоты не применяется к транзакционным сообщениям.
      // Во всех остальных случаях, включая пропущенный "message_type", ограничение частоты применяется.
      "capping_days": 30,               // опционально. Количество дней для ограничения частоты (макс. 30 дней)
      "capping_count": 10,              // опционально. Максимальное количество пушей, которое может быть отправлено из
                                        //           конкретного приложения на конкретное устройство в течение 'capping_days'
                                        //           периода. В случае, если созданное сообщение превышает
                                        //           лимит 'capping_count' для устройства, оно не будет
                                        //           отправлено на это устройство.
      "capping_exclude": true,          // опционально. Если установлено в true, это push-уведомление не будет
                                        //           учитываться при ограничении для будущих пушей.
      "capping_avoid": true,            // опционально. Если установлено в true, ограничение не будет применяться к
                                        //           этому конкретному push-уведомлению.
        
      // Чтобы сохранить сообщение в Inbox через API, используйте "inbox_date" или "inbox_image".
      // Сообщение сохраняется, когда используется хотя бы один из этих параметров.
      "inbox_date": "2017-02-02",       // опционально. Укажите, когда удалить сообщение из Inbox.
                                        //           Сообщение будет удалено из Inbox в 00:00:01 UTC
                                        //           указанной даты, поэтому предыдущая дата является
                                        //           последним днем, когда пользователь может видеть сообщение в своем Inbox.
                                        //           Если не указано, дата удаления по умолчанию -
                                        //           следующий день после даты отправки.
      "inbox_image": "Inbox image URL", // опционально. Изображение, которое будет показано рядом с сообщением. 
	  "inbox_days": 5,                  // опционально. Укажите, когда удалить сообщение из
                                        //           Inbox (срок жизни сообщения в Inbox в днях). 
                                        //           Может использоваться вместо параметра "inbox_date".
                                        //           До 30 дней.
      
      "devices": [                      // опционально. Укажите токены или hwid для отправки целевых пушей.
          "hwid_XXXX"                   //           Не более 1000 токенов/hwid в
      ],                                //           массиве. Если установлено, сообщение будет отправлено только
                                        //           устройствам из списка. Группа приложений для списка
                                        //           устройств не допускается. Push-токены iOS могут быть только в нижнем регистре.
      "to": [                           // опционально. Для email, SMS и подобных каналов. Список получателей
          "email_1", "email_2"          //           (например, адреса электронной почты, номера телефонов). Макс. 1000 элементов.
      ],                                //           Для пушей используйте "devices".
      // Push-уведомления, ориентированные на пользователя
      "users": [                        // опционально. Если установлено, сообщение будет доставлено только
          "user_XXXX"                   //           указанным User ID (устанавливается через вызов /registerUser). 
      ],                                //           Если указано вместе с devices или to,
                                        //           последние будут проигнорированы. Не более 1000 User ID
                                        //           в массиве. Группа приложений для списка пользователей
                                        //           не допускается.

      // Фильтры и условия
      "filter": "FILTER_NAME",          // опционально.
      "conditions": [                   // опционально. См. примечание ниже.
        ["Country", "EQ", "fr"],
        ["Language", "EQ", "en"]
      ],    
      "conditions_operator": "AND"      // опционально. Логический оператор для массивов условий.
                                        //           Возможные значения: AND | OR. AND по умолчанию.
    }]
  }
}
```

### Пример запроса для VoIP-уведомления

Pushwoosh поддерживает уведомления о звонках в стиле VoIP для iOS и Android. \
Ниже вы найдете примеры API-запросов `createMessage` для каждой платформы.

#### iOS

```json title="Example"
{
  "request": {
    "application": "XXXXX-XXXXX",     // обязательно. Код приложения Pushwoosh.
    "auth": "yxoPUlwqm…………pIyEX4H",   // обязательно. Токен доступа API из Панели управления Pushwoosh.
    "notifications": [
      {
        "voip_push": true,            // обязательно. Параметр необходим для отправки VoIP push-уведомления.
        "ios_root_params": {
          "aps": {
            "mutable-content": 1      // обязательно для медиа-вложений в iOS10+.
          },
          "callerName": "CallerName", // опционально. Имя звонящего. Если не указано, отображается "неизвестный абонент".
          "video": true,              // опционально. Указывает, поддерживаются ли видеозвонки.
          "supportsHolding": true,    // опционально. Указывает, поддерживается ли функция удержания вызова.
          "supportsDTMF": false,      // опционально. Управляет поддержкой двухтонального многочастотного сигнала.
          "callId": "42",             // опционально. Уникальный идентификатор вызова для отмены.
          "cancelCall": true          // опционально. Установите "true", чтобы отменить вызов с указанным "callId".
        }
      }
    ]
  }
}
```

#### Android

```json title="Example"
{
  "request": {
    "application": "XXXXX-XXXXX",   // обязательно. Код приложения Pushwoosh.
    "auth": "yxoPUlwqm…………pIyEX4H", // обязательно. Токен доступа API из Панели управления Pushwoosh.
    "notifications": [
      {
      "voip_push": true,            // обязательно. Параметр необходим для отправки VoIP push-уведомления.
      "android_root_params": {
        "callerName": "callerName", // опционально. Имя звонящего. Если не указано, отображается "неизвестный абонент".
        "video": true,              // опционально. Указывает, поддерживаются ли видеозвонки.
        "callId": 42,               // опционально. Уникальный идентификатор вызова для отмены.
        "cancelCall": true          // опционально. Установите "true", чтобы отменить вызов с указанным "callId".
        }
      }
    ]
  }
}

```


### Параметры для конкретных платформ

#### Параметры iOS

```json title="Example"
{
  "request": {
    "application": "12345-67891",         // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",       // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "ios_title": {                      // опционально. Объект ИЛИ строка. Добавляет заголовок для push-уведомления iOS.
        "en": "title"
      },
      "ios_subtitle": {                   // опционально. Объект ИЛИ строка. Добавляет подзаголовок для push-уведомления iOS.
        "en": "subtitle"
      },
      "ios_content": {                    // опционально. Объект ИЛИ строка. Добавляет контент для push-уведомления iOS.
        "en": "content"
      },
      "ios_badges": 5,                    // опционально. Число на значке приложения iOS.
                                          //           Используйте "+n" или "-n" для увеличения/уменьшения значения значка на n.
      "ios_sound": "sound file.wav",      // опционально. Имя звукового файла в основном бандле приложения.
                                          //           Если оставить пустым, устройство воспроизведет системный звук по умолчанию.
      "ios_sound_off": true,              // опционально. Включить/выключить звук, установленный полем "ios_sound".
      "ios_ttl": 3600,                    // опционально. Параметр времени жизни - максимальный срок жизни сообщения в секундах.
      "ios_silent": 1,                    // опционально. Включает тихие уведомления (игнорирует "sound" и "content").
      "ios_category_id": "1",             // опционально. ID категории iOS8 из Pushwoosh.
      "ios_root_params": {                // опционально. Параметры корневого уровня для словаря aps.
        "aps": {
          "content-available": "0",       // опционально. Установите "1" для отправки тихого пуша и "0" для обычного.
          "mutable-content": 1            // обязательно для медиа-вложений в iOS10+.
        },
        "callerName": "CallerName",       // опциональный параметр VoIP. Имя звонящего. Если не указано, отображается "неизвестный абонент".
        "video": true,                    // опциональный параметр VoIP. Указывает, поддерживаются ли видеозвонки.
        "supportsHolding": true,          // опциональный параметр VoIP. Указывает, поддерживается ли функция удержания вызова.
        "supportsDTMF": false,            // опциональный параметр VoIP. Управляет поддержкой двухтонального многочастотного сигнала.
        "data": {}                        // опционально. Пользовательские данные, макс. 4 КБ
      },
      "ios_attachment": "URL",            // опционально. Вставить медиа-контент в уведомление.
      "ios_thread_id": "some thread id",  // опционально. Идентификатор для группировки связанных уведомлений.
                                          //           Сообщения с одинаковым thread ID будут сгруппированы
                                          //           на экране блокировки и в Центре уведомлений.
      "ios_critical": true,               // опционально. Помечает уведомление iOS как критическое оповещение,
                                          //           воспроизводящее звук, даже если устройство в беззвучном режиме или
                                          //           включен режим "Не беспокоить".
      "ios_category_custom": "category",  // опционально. Пользовательская категория APNS.
      "ios_interruption_level": "active", // опционально. Одно из "passive", "active", "time-sensitive",
                                          //           "critical". Указывает на важность и
                                          //           время доставки уведомления. Подробности см. в
                                          //           руководстве по одноразовым пушам.
      "apns_collapse_id": "promo",        // опционально. Идентификатор сворачивания APNs. Уведомления с одинаковым
                                          //           apns_collapse_id заменяют друг друга на устройстве.
      "apns_trim_content": 1              // опционально. (0|1) Обрезает слишком длинные строки контента многоточием.
    }]
  }
}
```

#### Параметры Android

```json title="Example"
{
  "request": {
    "application": "12345-67891",            // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",          // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "android_header": {                    // опционально. Заголовок уведомления Android.
        "en": "header"
      },
      "android_content": {                   // опционально. Контент уведомления Android.
        "en": "content"
      },
      "android_root_params": {               // опционально. Пользовательский объект ключ-значение.
        "key": "value",                      //           Параметры корневого уровня для получателей полезной нагрузки android.
        "CancelID": 12345678,                // опционально. Отменяет push-уведомление с
        "voip": true,                        // обязательный параметр VoIP. Параметр необходим для отправки VoIP push-уведомлений.
        "callerName": "callerName",          // опциональный параметр VoIP. Имя звонящего. Если не указано, отображается "неизвестный абонент".
        "video": true,                       // опциональный параметр VoIP. Указывает, поддерживаются ли видеозвонки.
      },                                     //           указанным ID сообщения (получите ID из Истории сообщений)
      "android_sound": "soundfile",          // опционально. Без расширения файла. Если оставить пустым,
                                             //           устройство воспроизведет системный звук по умолчанию.
      "android_sound_off": true,             // опционально. Включить/выключить звук, установленный полем "android_sound"
      "android_icon": "icon.png",            // опционально.
      "android_custom_icon": "URL.png",      // опционально. Полный URL к файлу изображения.
      "android_banner": "URL.png",           // опционально. Полный URL к файлу изображения.
      "android_badges": 5,                   // опционально. Число на значке иконки приложения Android.
                                             //           Используйте "+n" или "-n" для увеличения/уменьшения значения значка на n.
      "android_gcm_ttl": 3600,               // опционально. Параметр времени жизни — максимальный срок жизни сообщения в секундах.
      "android_vibration": 0,                // опционально. Принудительная вибрация Android для высокоприоритетных пушей.
      "android_led": "#rrggbb",              // опционально. HEX-цвет светодиода, устройство сделает все возможное для аппроксимации.
      "android_priority": -1,                // опционально. Устанавливает параметр "importance" для устройств с
                                             //           Android 8.0 и выше, а также параметр "priority"
                                             //           для устройств с Android 7.1 и ниже. Устанавливает
                                             //           уровень прерывания канала уведомлений или конкретного
                                             //           уведомления. Допустимые значения: -2, -1, 0, 1, 2.
      "android_delivery_priority": "normal", // опционально. "normal" или "high".
                                             //           Включает доставку уведомления, когда
                                             //           устройство находится в режиме энергосбережения.
      "android_ibc": "#RRGGBB",              // опционально. цвет фона иконки на Lollipop, #RRGGBB,
                                             //           #AARRGGBB, "red", "black", "yellow" и т.д.
      "android_silent": 1,                   // опционально. 0 или 1. Включить тихое уведомление.
                                             //           Игнорировать звук и контент
      "android_group_id": "123",             // опционально. Идентификатор для группировки связанных уведомлений. Сообщения с
                                             //           одинаковым ID потока будут сгруппированы в
                                             //           Центре уведомлений.
      "android_collapse_key": "promo"        // опционально. Ключ сворачивания FCM. Уведомления с одинаковым
                                             //           ключом сворачивания заменяют друг друга, пока устройство находится в оффлайне.
    }]
  }
}
```

**Параметры Huawei**

```json title="Huawei"
{
  "request": {
    "application": "12345-67891",                   // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",                 // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "huawei_android_header": {                    // опционально. Объект ИЛИ строка. Заголовок уведомления
        "en": "header"
      },
      "huawei_android_content": {                   // опционально. Объект ИЛИ строка. Контент уведомления
        "en": "content"
      },
      "huawei_android_badges": true,                // опционально.
      "huawei_android_silent": 0,                   // опционально. 0 или 1. Включить тихое уведомление.
                                                    //           Игнорировать звук и контент
      "huawei_android_icon": "URL.png",             // опционально.
      "huawei_android_led": "#FF0011",              // опционально. HEX-цвет светодиода, устройство сделает все возможное для аппроксимации
      "huawei_android_vibration": 1,                // опционально. Принудительная вибрация Huawei для высокоприоритетных пушей
      "huawei_android_sound": "sound.wav",          // опционально. Если оставить пустым, устройство воспроизведет
                                                    //           системный звук по умолчанию
      "huawei_android_sound_off": true,             // опционально. Включить/выключить звук, установленный
                                                    //           полем "huawei_android_sound"
      "huawei_android_custom_icon": "URL.png",      // опционально
      "huawei_android_gcm_ttl": 2400,               // опционально. Параметр времени жизни - максимальный
                                                    //           срок жизни сообщения в секундах
      "huawei_android_banner": "URL.png",           // опционально. Полный URL к файлу изображения
      "huawei_android_root_params": {               // опционально. Пользовательский объект ключ-значение.
        "key": "value"                              //           Параметры корневого уровня для получателей полезной нагрузки Huawei.
      },
      "huawei_android_priority": 0,                 // опционально. Допустимые значения: -2, -1, 0, 1, 2
      "huawei_android_ibc": "#0011AA",              // опционально. Цвет фона иконки на Lollipop
      "huawei_android_lockscreen": 1,               // опционально
      "huawei_android_delivery_priority": "normal", // опционально. "normal" или "high". Включает доставку
                                                    //           уведомлений в режиме энергосбережения
      "huawei_android_group_id": "group_id"         // опционально. Идентификатор для группировки связанных уведомлений
    }]
  }
}
```

#### Параметры Safari

```json title="Safari"
{
  "request": {
    "application": "12345-67891",    // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",  // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "safari_url_args": [           // обязательно, но значение может быть пустым
        "firstArgument",
        "secondArgument"
      ],
      "safari_title": {              // опционально. Объект ИЛИ строка. Заголовок уведомления.
        "en": "content"
      },
      "safari_content": {            // опционально. Объект ИЛИ строка. Контент уведомления.
        "en": "content"
      },
      "safari_action": "Click here", // опционально.
      "safari_ttl": 3600             // опционально. Параметр времени жизни — максимальный
                                     //           срок жизни сообщения в секундах.
    }]
  }
}


```

#### Параметры Chrome

```json title="Chrome"
{
  "request": {
    "application": "12345-67891",          // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H",        // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "chrome_title": {                    // опционально. Объект ИЛИ строка. Вы можете указать заголовок 
        "en": "title"                      //           сообщения в этом параметре.
      },
      "chrome_content": {                  // опционально. Объект ИЛИ строка. Вы можете указать контент 
        "en": "content"                    //           сообщения в этом параметре.
      },
      "chrome_icon": "URL.png",            // опционально. Полный URL к иконке или путь к файлу в ресурсах расширения
      "chrome_gcm_ttl": 3600,              // опционально. Параметр времени жизни – максимальный срок жизни сообщения в секундах.
      "chrome_duration": 20,               // опционально. макс. 50 секунд. Изменяет время отображения пуша в Chrome.
                                           //           Установите 0, чтобы пуш отображался до тех пор, пока пользователь не взаимодействует с ним.
      "chrome_image": "image_URL",         // опционально. URL к большому изображению. 
      "chrome_root_params": {              // опционально. Установить параметры, специфичные для сообщений, отправляемых в Chrome.
        "key": "value"
      }, 
      "chrome_button_text1": "text1",      // опционально
      "chrome_button_url1": "button1_URL", // опционально. Игнорируется, если chrome_button_text1 не установлен.
      "chrome_button_text2": "text2",      // опционально
      "chrome_button_url2": "button2_url"  // опционально. Игнорируется, если chrome_button_text2 не установлен. 
    }]
  }
}
```

#### Параметры Firefox

```json title="Firefox"
{
  "request": {
    "application": "12345-67891",   // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "firefox_title": {            // опционально. Объект ИЛИ строка. Здесь можно указать заголовок сообщения.
        "en": "title"
      },
      "firefox_content": {          // опционально. Объект ИЛИ строка. Здесь можно указать контент сообщения.
        "en": "content"
      },
      "firefox_icon": "URL.png",    // опционально. Полный URL к иконке или путь к
                                    //           файлу в ресурсах расширения.
      "firefox_root_params": {      // опционально. Установить параметры, специфичные для сообщений, отправляемых в Firefox.
        "key": "value"
      } 
    }]
  }
}
```

#### Параметры Amazon

```json title="Amazon"
{
  "request": {
    "application": "12345-67891",   // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "adm_header": {               // опционально. Объект ИЛИ строка. Здесь можно указать заголовок сообщения.
        "en": "header"
      },
      "adm_content": {              // опционально. Объект ИЛИ строка. Здесь можно указать контент сообщения.
        "en": "content"
      },
      "adm_root_params": {          // опционально. Пользовательский объект ключ-значение
        "key": "value"
      },
      "adm_sound": "push.mp3",      // опционально.
      "adm_sound_off": true,        // опционально. Включить/выключить звук, установленный полем "adm_sound"
      "adm_icon": "icon.png",       // опционально. Полный URL к иконке.
      "adm_custom_icon": "URL.png", // опционально.
      "adm_banner": "URL.png",      // опционально.
      "adm_ttl": 3600,              // опционально. Параметр времени жизни — максимальный срок жизни
                                    //           сообщения в секундах.
      "adm_priority": -1            // опционально. Приоритет пуша в панели пушей Amazon,
                                    //           допустимые значения: -2, -1, 0, 1 и 2.
    }]
  }
}
```

#### Параметры Mac OS X

```json title="Mac OS X"
{
  "request": {
    "application": "12345-67891",   // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "mac_title": {                // опционально. Объект ИЛИ строка. Добавляет заголовок для push-уведомления.
        "en": "title"
      },
      "mac_subtitle": {             // опционально. Добавляет подзаголовок для push-уведомления.
        "en": "subtitle"
      },
      "mac_content": {              // опционально. Добавляет контент для push-уведомления.
        "en": "content"
      },
      "mac_badges": 3,              // опционально.
      "mac_sound": "sound.caf",     // опционально.
      "mac_sound_off": true,        // опционально. Включить/выключить звук, установленный полем "mac_sound"
      "mac_root_params": {          // опционально.
        "content-available": 1
      },
      "mac_ttl": 3600               // опционально. Параметр времени жизни — максимальный срок жизни сообщения в секундах.
    }]
  }
}
```

#### Параметры Windows

```json title="Windows"
{
  "request": {
    "application": "12345-67891",   // обязательно. Код приложения Pushwoosh
    "auth": "yxoPUlwqm…………pIyEX4H", // обязательно. Токен доступа API из Панели управления Pushwoosh
    "notifications": [{
      "wns_content": {              // обязательно. Контент (XML или raw) уведомления, закодированный в base64 MIME
                                    //           в виде объекта ИЛИ строки
        "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
        "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
      },
      "wns_type": "Badge",          // опционально. 'Tile' | 'Toast' | 'Badge' | 'Raw'
      "wns_tag": "myTag",           // опционально. Используется в политике замены плиток.
                                    //           Буквенно-цифровая строка не более 16 символов.
      "wns_cache": 1,               // опционально. (1|0) Преобразуется в значение X-WNS-Cache-Policy.
      "wns_ttl": 600                // опционально. Время истечения срока действия уведомления в секундах.
    }]
  }
}
```
<Aside>
Быстрый старт! Ознакомьтесь с этими классными сторонними библиотеками!

Библиотека Python **от Pushwoosh**:
[https://github.com/makcyd/pushwoosh_api](https://github.com/makcyd/pushwoosh_api)

Библиотека Laravel:
[https://github.com/laravel-notification-channels/pushwoosh](https://github.com/laravel-notification-channels/pushwoosh)

Клиент Node JS
[https://github.com/vizeat/pushwoosh-node](https://github.com/vizeat/pushwoosh-node)

Клиент Meteor JS
[https://github.com/lpender/meteor-pushwoosh](https://github.com/lpender/meteor-pushwoosh)

Библиотека Rails
[https://github.com/iarie/pwush](https://github.com/iarie/pwush)

Библиотека Golang
[https://github.com/yyoshiki41/go-pushwoosh](https://github.com/yyoshiki41/go-pushwoosh)
</Aside>

<Aside type="caution">
#### Регулирование /createMessage

Имейте в виду, что аккаунты, не относящиеся к Enterprise, не могут отправлять более 600 запросов `/createMessage` и/или [`/createTargetedMessage`](/ru/developer/api-reference/messages-api/#createtargetedmessage) в минуту.

Однако, если вы отправляете пуши через параметр **devices** на **10 устройств или меньше**, ограничений нет для любого типа аккаунта, пока отключена трассировка сообщений API.

Обратите внимание, что **мы всегда сохраняем запланированные пуши** в Историю сообщений, даже если вы отправляете их менее чем на 10 устройств через параметр devices. Поэтому такие пуши также подлежат регулированию.
</Aside>

**Ответ**:

| Код состояния HTTP | status_code | Описание                                       |
| ---------------- | ------------ | ------------------------------------------------- |
| 200              | 200          | Сообщение успешно создано                      |
| 200              | 210          | Ошибка аргумента. См. status_message для получения дополнительной информации |
| 400              | N/A          | Неверно сформированная строка запроса                          |
| 500              | 500          | Внутренняя ошибка                                    |

<Aside type="note">
Ошибка в массиве уведомлений

Если запрос `createMessage` содержит несколько сообщений в массиве `notifications`, они будут обрабатываться и отправляться по одному. Если одно из сообщений не может быть разобрано, наш API вернет `"status_code":210` с кодами успешно отправленных сообщений, то есть тех, которые предшествовали ошибочному сообщению в запросе.
</Aside>

### Трассировка сообщений API

В целях балансировки нагрузки _мы не храним сообщения, отправленные через API с параметром “devices”, который содержит менее 10 устройств в массиве_. Из-за этого такие сообщения не будут отображаться в вашей Истории сообщений.

Чтобы видеть отчеты по пушам на этапе тестирования, используйте **трассировку сообщений API**. Включение этой опции **ON** позволяет вам _преодолеть это ограничение на 1 час и сохранить такие пуши в Истории сообщений_. Трассировка сообщений API автоматически отключается через 1 час.

Трассировку сообщений API можно активировать на странице [Истории сообщений](/ru/product/statistics-and-analytics/message-history/), нажав **Начать трассировку сообщений API** в правом верхнем углу.

### Условия по тегам

Каждое условие по тегу представляет собой массив вида `[tagName, operator, operand]`, где

* tagName: имя тега
* operator: "EQ" | "IN" | "NOTEQ" | "NOTIN" | "LTE" | "GTE" | "BETWEEN" | "NOTSET" | "ANY"
* operand: строка | целое число | массив | дата

#### Описание операторов

* EQ: значение тега равно операнду;
* IN: значение тега пересекается с операндом (операнд всегда должен быть массивом);
* NOTEQ: значение тега не равно операнду;
* NOTIN: значение тега не пересекается с операндом (операнд всегда должен быть массивом);
* GTE: значение тега больше или равно операнду;
* LTE: значение тега меньше или равно операнду;
* BETWEEN: значение тега больше или равно минимальному значению операнда, но меньше или равно максимальному значению операнда (операнд всегда должен быть массивом);
* NOTSET: тег не установлен. Операнд не учитывается;
* ANY: тег имеет любое значение. Операнд не учитывается.

#### Строковые теги

Допустимые операторы: EQ, IN, NOTEQ, NOTIN, NOTSET, ANY\
Допустимые операнды:

* EQ, NOTEQ: операнд должен быть строкой;
* IN, NOTIN: операнд должен быть массивом строк, например `["value 1", "value 2", "value N"]`;
* NOTSET: тег не установлен. Операнд не учитывается;
* ANY: тег имеет любое значение. Операнд не учитывается.

#### Целочисленные теги

Допустимые операторы: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
Допустимые операнды:

* EQ, NOTEQ, GTE, LTE: операнд должен быть целым числом;
* IN, NOTIN: операнд должен быть массивом целых чисел, например `[value 1, value 2, value N]`;
* BETWEEN: операнд должен быть массивом целых чисел, например `[min_value, max_value]`;
* NOTSET: тег не установлен. Операнд не учитывается;
* ANY: тег имеет любое значение. Операнд не учитывается.

#### Теги даты

Допустимые операторы: EQ, IN, NOTEQ, NOTIN, BETWEEN, GTE, LTE, NOTSET, ANY\
Допустимые операнды:

* `"YYYY-MM-DD 00:00"` (строка)
* unix timestamp `1234567890` (целое число)
* `"N days ago"` (строка) для операторов EQ, BETWEEN, GTE, LTE

#### Логические теги

Допустимые операторы: EQ, NOTSET, ANY\
Допустимые операнды: `0, 1, true, false`

#### Теги-списки

Допустимые операторы: IN, NOTIN, NOTSET, ANY\
Допустимые операнды: операнд должен быть массивом строк, например `["value 1", "value 2", "value N"]`.

<Aside type="danger">
Помните, что параметры “filter” и “conditions” не должны использоваться вместе.\
Также, оба они **будут проигнорированы**, если в том же запросе используется параметр "devices".
</Aside>

<Aside type="note">
#### Теги страны и языка

Значение тега языка - это двухбуквенный код в нижнем регистре согласно [ISO-639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)\
Значение тега страны - это двухбуквенный код в ВЕРХНЕМ РЕГИСТРЕ согласно [ISO_3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)\
Например, чтобы отправить push-уведомление португалоязычным подписчикам в Бразилии, вам нужно будет указать следующее условие: `"conditions": [["Country", "EQ", "BR"],["Language", "EQ", "pt"]]`
</Aside>

### Сниппеты для /createMessage

<Aside type="caution" title="Важно">
Пожалуйста, будьте осторожны при использовании сниппетов. Ограничьте количество получателей, указав параметр "users", "devices", "filter" или "conditions". Если ни один из этих параметров не указан, сообщение будет отправлено **на каждое устройство**, подписанное на push-уведомления от приложения.
</Aside>

Примеры запросов `/createMessage`:

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

Удаляет запланированное сообщение.

#### Тело запроса

| Имя                                      | Тип    | Описание                                      |
| ----------------------------------------- | ------ | ------------------------------------------------ |
| auth*    | string | [Токен доступа API](/ru/developer/api-reference/api-identifiers/#api-access-token) из Панели управления Pushwoosh.   |
| message* | string | [Код сообщения](/ru/developer/api-reference/api-identifiers/#message-code), полученный в запросе `/createMessage`. |

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

```json title="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // обязательно. Токен доступа API из Панели управления Pushwoosh
    "message": "xxxx-xxxxxxx-xxxxxx" // обязательно. Код сообщения, полученный в /createMessage
  }
}
```

<Aside type="danger">
Вы не можете удалять сообщения, которые уже были отправлены.
</Aside>

**Коды состояния:**

| Код состояния HTTP | status_code | Описание                                         |
| ---------------- | ------------ | --------------------------------------------------- |
| 200              | 200          | Сообщение успешно удалено                        |
| 200              | 210          | Ошибка аргумента. См. status_message для получения дополнительной информации |
| 400              | N/A          | Неверно сформированная строка запроса                            |
| 500              | 500          | Внутренняя ошибка                                      |

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

Получает детали сообщения.

#### Тело запроса

| Имя                                      | Тип    | Описание                                    |
| ----------------------------------------- | ------ | ---------------------------------------------- |
| auth*    | string | [Токен доступа API](/ru/developer/api-reference/api-identifiers/#api-access-token) из Панели управления Pushwoosh. |
| message* | string | [Код сообщения](/ru/developer/api-reference/api-identifiers/#message-code) или 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="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // обязательно. Токен доступа API из Панели управления Pushwoosh
    "message": "xxxx-xxxxxxx-xxxxxx" // обязательно. код сообщения или ID сообщения
  }
}
```

## createTargetedMessage <Badge text="Устарело" variant="caution" size="small" />

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

Создает новое целевое push-уведомление.

#### Тело запроса

| Имя                                              | Тип    | Описание                                                                                                                            |
| ------------------------------------------------- | ------- |----------------------------------------------------------------------------------------------------------------------------------------|
| auth*            | string  | [Токен доступа API](/ru/developer/api-reference/api-identifiers/#api-access-token) из Панели управления Pushwoosh.                                                                                         |
| devices_filter* | string  | См. примечание ниже.                                                                                                                      |
| send_date*      | string  | YYYY-MM-DD HH:mm или 'now'.                                                                                                             |
| ignore_user_timezone                            | boolean | Если не указано, для "send_date" по умолчанию используется UTC-0.                                                                                         |
| timezone                                          | string  | Если не указано, для "send_date" по умолчанию используется UTC-0.                                                                                         |
| campaign                                          | string  | [Код кампании](/ru/developer/api-reference/api-identifiers/#campaign-code), к которой вы хотите присвоить это push-сообщение.                                                                      |
| content*         | string  | Контент уведомления. Подробности см. в примере запроса.                                                                             |
| transactionId                                     | string  | Уникальный идентификатор сообщения для предотвращения дублирования сообщений в случае проблем с сетью. Хранится на стороне Pushwoosh в течение 5 минут. |
| link                                              | string  | Ссылка, которая будет открыта после того, как пользователь откроет push-сообщение.                                                                                    |
| minimize_link                                    | integer | 0 - не сокращать, 2 - bit.ly. По умолчанию = 2.                                                                                          |
| data                                              | object  | Строка JSON или объект JSON. Будет передан как параметр "u" в полезной нагрузке (преобразован в строку JSON).                                 |
| preset                                            | string  | [Код пресета](/ru/developer/api-reference/api-identifiers/#preset-code).                                                                                                                           |
| send_rate                                        | integer | Регулирование скорости. Допустимые значения от 100 до 1000 пушей в секунду.                                                                       |
| inbox_date                                       | string  | Укажите, когда удалить сообщение из Inbox.                                                                                       |
| inbox_image                                      | string  | URL изображения, которое будет показано рядом с сообщением в Inbox.                                                                            |

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

<TabItem label="400 синтаксические ошибки JSON">
```
The request cannot be fulfilled due to bad syntax.
```
</TabItem>
</Tabs>

Больше примеров ответов:

<Tabs>
<TabItem label="210 - синтаксис">
```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 - семантика">
```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 - лексика">
```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="Сложный режим">
Может, вам стоит использовать [`/createMessage`](#createmessage) вместо этого?
</Aside>


<Tabs>
<TabItem label="Example">
```json title="Example"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",    // обязательно. Токен доступа API из Панели управления Pushwoosh
    "devices_filter": "A(\"XXXXX-XXXXX\") * T(\"City\", EQ, \"Name\")", // обязательно. Синтаксис объяснен ниже
    "send_date": "now",                // опционально. YYYY-MM-DD HH:mm ИЛИ 'now'
    "ignore_user_timezone": true,      // опционально.
    "timezone": "America/New_York",    // опционально. Если не указано, для "send_date" по умолчанию используется UTC-0.
                                       //           Больше информации https://php.net/manual/timezones.php.
    "campaign": "CAMPAIGN_CODE",       // опционально. Код кампании, к которой вы хотите присвоить это push-сообщение.
    "content": {                       // опционально. Объект ИЛИ строка. Используйте "wns_content" для Windows.
      "en": "English",
      "de": "Deutsch"
    },
    "transactionId": "unique UUID",    // опционально. Уникальный идентификатор сообщения для предотвращения дублирования
                                       //           в случае проблем с сетью. Хранится на стороне
                                       //           Pushwoosh в течение 5 минут.
    "rich_media": "XXXXX-XXXXX",       // опционально. Скопируйте код Rich Media из URL-адреса
                                       //           страницы редактора Rich Media в Панели управления Pushwoosh. 
    "link": "https://google.com",      // опционально. Для диплинков добавьте "minimize_link": 0
    "minimize_link": 0,                // опционально. 0 — не сокращать, 2 — bitly. По умолчанию = 2.
                                       //           Сокращатель URL-адресов Google отключен с 30 марта 2019 года.
                                       //           Обратите внимание, что у сервисов сокращения ссылок есть ограничения
                                       //           на количество вызовов.
    "data": {                          // опционально. Строка JSON или объект JSON.
      "key": "value"                   //           Будет передан как параметр "u" в полезной нагрузке
    },                                 //           (преобразован в строку JSON).
    "preset": "XXXXX-XXXXX",           // опционально. Код пресета пуша из вашей Панели управления.
    "send_rate": 100,                  // опционально. Регулирование скорости. Допустимые значения от 100 до 1000 пушей/секунду.
    "dynamic_content_placeholders": {  // опционально. Плейсхолдеры для динамического контента вместо тегов устройства.
      "firstname": "John",
      "lastname": "Doe"
    },

    // Чтобы сохранить сообщение в Inbox через API, используйте "inbox_date" или "inbox_image".
    // Сообщение сохраняется, когда используется хотя бы один из этих параметров. 
    "inbox_image": "Inbox image URL",  // опционально. Изображение, которое будет показано рядом с сообщением.
    "inbox_date": "2017-02-02"         // опционально. Укажите, когда удалить сообщение из Inbox.
                                       //           Сообщение будет удалено из Inbox в 00:00:01 UTC
                                       //           указанной даты, поэтому предыдущая дата является последним
                                       //           днем, когда пользователь может видеть сообщение в своем Inbox.
                                       //           Если не указано, дата удаления по умолчанию - следующий
                                       //           день после даты отправки.
  }
}
```
</TabItem>

<TabItem label="Platform-specific parameters">
```json title="Platform-specific parameters"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",        // обязательно. Токен доступа API из Панели управления Pushwoosh
    "devices_filter": "FILTER CONDITION",
    "send_date": "now",                    // опционально. YYYY-MM-DD HH:mm ИЛИ 'now'
    "content": {                           // опционально. Объект ИЛИ строка.
      "en": "English",                     //           Используйте "wns_content" для Windows.
      "de": "Deutsch"
    },
    "ignore_user_timezone": true,          // опционально.
    "timezone": "America/New_York",        // опционально. Если не указано, для "send_date" по умолчанию используется UTC-0.
                                           //           Больше информации https://php.net/manual/timezones.php.
    "campaign": "CAMPAIGN_CODE",           // опционально. Код кампании, к которой вы хотите присвоить это push-сообщение.
    
    // Параметры, связанные с iOS
    "ios_badges": 5,                       // опционально. Число на значке приложения iOS.
                                           //           Используйте "+n" или "-n" для увеличения/уменьшения значения значка на n.
    "ios_sound": "sound file.wav",         // опционально. Имя звукового файла в основном бандле приложения.
                                           //           Если оставить пустым, устройство не будет издавать звук
                                           //           при получении пуша.
    "ios_sound_off": true,                 // опционально. Включить/выключить звук, установленный полем "ios_sound".
    "ios_ttl": 3600,                       // опционально. Параметр времени жизни — максимальный срок жизни сообщения в секундах.
    "ios_silent": 1,                       // опционально. Включает тихие уведомления (игнорирует "sound" и "content").
    "ios_category_id": "1",                // опционально. ID категории iOS8 из Pushwoosh.
    "ios_category_custom": "category",     // опционально. Пользовательская категория APNS.
    "ios_root_params": {                   // опционально. Параметры корневого уровня для словаря aps.
      "aps": {
        "content-available": "0",          // опционально. Установите "1" для отправки тихого пуша и "0" для обычного.
        "mutable-content": 1               // обязательно для медиа-вложений в iOS10+.
      },
      "attachment": "YOUR_ATTACHMENT_URL", // URL медиа-вложения для iOS10+.
      "data": {}                           // опционально. Пользовательские данные, макс. 4 КБ
    },
    "apns_trim_content": 1,                // опционально. (0|1) Обрезает слишком длинные строки контента многоточием.
    "ios_title": {                         // опционально. Добавляет заголовок для push-уведомления iOS.
      "en": "title"
    },
    "ios_subtitle": {                      // опционально. Добавляет подзаголовок для push-уведомления iOS.
      "en": "subTitle"
    },
    "ios_content": {                       // опционально. Добавляет контент для push-уведомления iOS.
      "en": "content"
    },
    
    // Параметры, связанные с Android
    "android_root_params": {               // опционально. Пользовательский объект ключ-значение.
      "key": "value"                       //           Параметры корневого уровня для получателей полезной нагрузки android.
    },
    "android_sound": "soundfile",          // опционально. Без расширения файла. Если оставить пустым, устройство
                                           //           не будет издавать звук при получении пуша.
    "android_sound_off": true,             // опционально. Включить/выключить звук, установленный полем "android_sound"
    "android_header": {                    // опционально. Объект ИЛИ строка. Заголовок уведомления Android.
      "en": "header" 
    },
    "android_content": {                   // опционально. Объект ИЛИ строка. Контент уведомления Android.
      "en": "content"
    },
    "android_icon": "icon.png",  
    "android_custom_icon": "URL.png",      // опционально. Полный URL к файлу изображения.
    "android_banner": "URL.png",           // опционально. Полный URL к файлу изображения.
    "android_badges": 5,                   // опционально. целое число. Число на значке иконки приложения Android.
                                           //           Используйте "+n" или "-n" для увеличения/уменьшения значения значка на n.
    "android_gcm_ttl": 3600,               // опционально. Параметр времени жизни — максимальный срок жизни сообщения в секундах.
    "android_vibration": 0,                // опционально. Принудительная вибрация Android для высокоприоритетных пушей.
    "android_led": "#rrggbb",              // опционально. HEX-цвет светодиода, устройство сделает все возможное для аппроксимации.
    "android_priority": -1,                // опционально. Устанавливает параметр "importance" для устройств с Android 8.0
                                           //           и выше, а также параметр "priority" для устройств
                                           //           с Android 7.1 и ниже. Устанавливает уровень прерывания
                                           //           канала уведомлений или конкретного уведомления.
                                           //           Допустимые значения: -2, -1, 0, 1, 2.
    "android_delivery_priority": "normal", // опционально. "normal" или "high". Включает доставку уведомления
                                           //           когда устройство находится в режиме энергосбережения. 
    "android_ibc": "#RRGGBB",              // опционально. цвет фона иконки на Lollipop, #RRGGBB,
                                           //           #AARRGGBB, "red", "black", "yellow" и т.д.
    "android_silent": 1,                   // опционально. 0 или 1. Включить тихое уведомление.
                                           //           Игнорировать звук и контент
    
    // Параметры, связанные с Amazon
    "adm_root_params": {                   // опционально. Пользовательский объект ключ-значение
      "key": "value"
    },
    "adm_sound": "push.mp3",
    "adm_sound_off": true,                 // опционально. Включить/выключить звук, установленный полем "adm_sound"
    "adm_header": {
      "en": "Header"
    },
    "adm_content": {
      "en": "content"
    },
    "adm_icon": "icon.png",
    "adm_custom_icon": "URL.png",
    "adm_banner": "URL.png",
    "adm_ttl": 3600,                       // опционально. Параметр времени жизни — максимальный срок жизни
                                           //           сообщения в секундах.
    "adm_priority": -1,                    // опционально. Приоритет пуша в панели пушей Amazon,
                                           //           допустимые значения: -2, -1, 0, 1 и 2.
    
    // Параметры, связанные с Mac OS X
    "mac_badges": 3,
    "mac_sound": "sound.caf",
    "mac_sound_off": true,
    "mac_root_params": {
      "content-available": 1
    },
    "mac_ttl": 3600,                       // опционально. Параметр времени жизни — максимальный срок жизни сообщения в секундах.
    "mac_title": {                         // опционально. Добавляет заголовок для push-уведомления.
      "en": "title"
    },
    "mac_subtitle": {                      // опционально. Добавляет подзаголовок для push-уведомления MacOS.
      "en": "subtitle"
    },
    "mac_content": {                       // опционально. Добавляет контент для push-уведомления MacOS.
      "en": "content"
    },
    
    // Параметры, связанные с Windows
    "wns_content": {                       // обязательно. Контент (XML или raw) уведомления, закодированный
                                           //           в base64 MIME в виде объекта ИЛИ строки
      "en": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9ImF2YWlsYWJsZSIvPg==",
      "de": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48YmFkZ2UgdmFsdWU9Im5ld01lc3NhZ2UiLz4="
    },
    "wns_type": "Badge",                   // 'Tile' | 'Toast' | 'Badge' | 'Raw'
    "wns_tag": "myTag",                    // опционально. Используется в политике замены плиток.
                                           //           Буквенно-цифровая строка не более 16 символов.
    "wns_cache": 1,                        // опционально. (1|0) Преобразуется в значение X-WNS-Cache-Policy.
    "wns_ttl": 600,                        // опционально. Время истечения срока действия уведомления в секундах.
    
    // Параметры, связанные с Safari
    "safari_title": {                      // опционально. Объект ИЛИ строка. Заголовок уведомления.
      "en": "title"
    },
    "safari_content": {                    // опционально. Объект ИЛИ строка. Контент уведомления.
      "en": "content"
    },
    "safari_action": "Click here",         // опционально.
    "safari_url_args": [                   // обязательно. но значение может быть пустым
      "firstArgument",
      "secondArgument"
    ],
    "safari_ttl": 3600,                    // опционально. Параметр времени жизни — максимальный
                                           //           срок жизни сообщения в секундах.
    
    // Параметры, связанные с Chrome
    "chrome_title": {                      // опционально. Вы можете указать заголовок сообщения в этом параметре.
      "en": "title"
    },
    "chrome_content": {                    // опционально. Вы можете указать контент сообщения в этом параметре.
      "en": "content"
    },
    "chrome_icon": "icon_URL",             // опционально. Полный URL к иконке или путь к файлу в ресурсах расширения
    "chrome_gcm_ttl": 3600,                // опционально. Параметр времени жизни – максимальный срок жизни сообщения в секундах.
    "chrome_duration": 20,                 // опционально. Изменяет время отображения пуша в Chrome. Установите 0, чтобы пуш отображался
                                           //           до тех пор, пока пользователь не взаимодействует с ним.
    "chrome_image": "image_URL",           // опционально. URL к большому изображению
    "chrome_root_params": {                // опционально. Установить параметры, специфичные для сообщений, отправляемых в Chrome.
      "key": "value"
    },
    "chrome_button_text1": "text1",        // опционально.
    "chrome_button_url1": "button1_URL",   // опционально. Игнорируется, если chrome_button_text1 не установлен.
    "chrome_button_text2": "text2",        // опционально.
    "chrome_button_url2": "button2_url",   // опционально. Игнорируется, если chrome_button_text2 не установлен.
    
    // Параметры, связанные с Firefox
    "firefox_title": {                     // опционально. Объект ИЛИ строка. Здесь можно указать заголовок сообщения.
      "en": "title"
    },
    "firefox_content": {                   // опционально. Объект ИЛИ строка. Здесь можно указать контент сообщения.
      "en": "content"
    },
    "firefox_icon": "icon_URL",            // опционально. Полный URL к иконке или путь
                                           //           к файлу в ресурсах расширения.
    "firefox_root_params": {               // опционально. Установить параметры, специфичные для сообщений, отправляемых в Firefox.
      "key": "value"
    }
  }
}
```
</TabItem>
</Tabs>

Основы очень просты – все фильтры выполняются над **наборами** сущностей.

### Наборы

Наборы определяются как:

**1.** Устройства, подписанные на конкретное приложение (A);\
**2.** Устройства, которые соответствуют указанным значениям тегов (T) или значению тега для конкретного приложения (AT);\


### Синтаксис

Давайте попробуем на нескольких примерах в соответствии с приведенным выше списком.

#### Таргетинг на подписчиков приложения

Фильтр "A" определяет набор устройств, подписанных на конкретное приложение:

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

где

* "XXXXX-XXXXX" – Код приложения Pushwoosh
* \["iOS", "Android", ...] – массив целевых платформ. Если опущен, сообщение будет отправлено на все платформы, доступные для этого приложения.

#### Фильтрация по значениям тегов

Фильтр "T" определяет набор устройств, которым присвоены указанные значения тегов.

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

Определяет набор устройств, у которых тег “age” установлен в одно из значений: 17, 18, 19, 20.

<Aside type="caution">
Для **тегов, специфичных для приложения**, применяется фильтр "AT". Убедитесь, что вы указали соответствующий код приложения в качестве первого значения в наборе AT:

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


### Типы тегов и операторы

Очень важно понимать, что теги являются общими для приложений, и это представляет собой очень мощный инструмент для сегментации и фильтрации ваших целевых пользователей без привязки к конкретному приложению.

Тег может быть одного из трех различных типов: **Строка, Целое число, Список**. Тип тега определяет, какие операторы вы можете использовать для конкретного тега.

#### Строковые теги

**Применимые операторы:**

* **EQ** – нацеливается на устройства с указанным значением тега
* **IN** – нацеливается на устройства с любым из указанных значений тегов
* **NOTIN** – нацеливается на устройства без указанных значений тегов
* **NOTEQ** – нацеливается на устройства со значением тега, не равным указанному
* **NOTSET** – нацеливается на устройства без значения для указанного тега
* **ANY** – нацеливается на устройства с любым значением, установленным для указанного тега

Примеры:

`T (\"Age\", EQ, 30)` – фильтрует пользователей в возрасте 30 лет

`T (\"favorite_color\", IN, [\"red\",\"green\",\"blue\"])` – фильтрует пользователей, которые выбрали красный, зеленый или синий в качестве своего любимого цвета.

`T (\"Name", NOTSET, \"\")` – нацеливается на устройства без значения для тега Name.

Вы можете использовать числовые значения со строковыми тегами, но такие значения будут преобразованы в строку.

#### Целочисленные теги

**Применимые операторы:**

* **GTE** – больше или равно указанному значению
* **LTE**– меньше или равно указанному значению
* **EQ** – равно указанному значению
* **BETWEEN** – между минимальным и максимальным указанными значениями
* **IN** – любое из указанных значений
* **NOTIN** – ни одно из указанных значений не присвоено устройству
* **NOTEQ** – устройства со значением тега, не равным указанному
* **NOTSET** – устройства без значения для указанного тега
* **ANY** – устройства с любым значением, установленным для указанного тега

Примеры:

`T (\"Level\", EQ, 14)` – фильтрует пользователей только на 14 уровне.

`T (\"Level\", BETWEEN, [1,5)` – фильтрует пользователей на 1, 2, 3, 4 и 5 уровнях.

`T (\"Level", GTE, 29)` – нацеливается на пользователей, достигших как минимум 29 уровня. 

#### Теги-списки

**Применимые операторы:**

* **IN** – устройства с любым из указанных значений тегов

Пример: `T("Category", IN, ["breaking_news","business","politics"])`

#### Теги даты

**Применимые операторы:**

* **GTE** – больше или равно указанному значению
* **LTE**– меньше или равно указанному значению
* **EQ** – равно указанному значению
* **BETWEEN** – между минимальным и максимальным указанными значениями
* **NOTEQ** – устройства со значением тега, не равным указанному
* **NOTSET** – устройства без значения для указанного тега
* **ANY** – устройства с любым значением, установленным для указанного тега

Примеры:

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

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

### Операции

* “+” – объединяет два набора (равно ИЛИ)
* “\*” – пересекает два набора (равно И)
* “\” – вычитает один набор из другого (равно НЕ)

Все операции левоассоциативны. "+" и "*" имеют одинаковый приоритет. "\" имеет более высокий приоритет. Вы можете использовать скобки для определения приоритетов вычислений.

Обратите внимание, что операция “\” не коммутативна. `A("12345-12345") \ A("67890-67890")` не то же самое, что `A("67890-67890") \ A("12345-12345")`.


<Aside type="note">
Вы не можете использовать ни один из следующих параметров, связанных с таргетингом, в запросе /createTargetedMessage:

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

Все остальные параметры, перечисленные в [`/createMessage`](#createmessage), поддерживаются.
</Aside>

<Aside type="caution" title="Важно">
Существует известная проблема с методом `/createTargetedMessage`: если вы не указываете никаких приложений в разделе "devices_filter", Pushwoosh не отображает никаких приложений в деталях пуша.
</Aside>

## getPushHistory <Badge text="Устарело" variant="caution" size="small" />

<Aside type="note">
Используйте [**/messages:list**](/ru/developer/api-reference/statistics-api/message-statistics-api/#messageslist) для получения истории сообщений и более подробных данных.
</Aside>

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

Получает историю сообщений с деталями пушей.

#### Тело запроса

| Имя                                   | Тип    | Описание                                                                                                          |
| -------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
| auth* | string  | [Токен доступа API](/ru/developer/api-reference/api-identifiers/#api-access-token) из Панели управления Pushwoosh.                                                                       |
| limitMessages                          | integer | Ограничивает количество сообщений в ответе. Возможные значения от 10 до 1000.                                        |
| source                                 | string  | Источник истории пушей. Может быть null или: "CP", "API", "GeoZone", "RSS", "AutoPush", "A/B Test".       |
| searchBy                               | string  | Возможные значения для поиска. Может быть null или: "notificationID", "notificationCode", "applicationCode", "campaignCode". |
| value                                  | string  | Значение поиска, установленное в соответствии с полем "searchBy".                                                                  |
| lastNotificationID                     | string  | Используется для пагинации. Последний messageId из предыдущего вызова /getPushHistory. Подробности ниже.                       |

<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="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // обязательно. Токен доступа API из Панели управления Pushwoosh
    "source": null,                  // опционально. Возможные значения: null, "CP", "API", "GeoZone",
                                     //           "RSS", "AutoPush", "A/B Test"
    "searchBy": "applicationCode",   // опционально. Возможные значения: "", "notificationID",
                                     //           "notificationCode", "applicationCode", "campaignCode"
    "value": "C8717-703F2",          // опционально. Значение поиска, установленное в соответствии с полем "searchBy".
    "lastNotificationID": 0,         // опционально. Используется для пагинации. Последний messageId из
                                     //           предыдущего вызова /getPushHistory. Подробности ниже.
    "limitMessages": 1000            // опционально. Возможное значение от 10 до 1000.
  }
}
```

Этот метод вернет 1000 сообщений из аккаунта, отсортированных по Id сообщения. Чтобы получить вторую страницу, укажите последний Id сообщения из предыдущего ответа в параметре **lastNotificationId**.

### Типы данных ответа

```
id -- int | 0 
code -- string
createDate -- string  (дата: %Y-%m-%d %H:%M:%S)
sendDate -- string  (дата: %Y-%m-%d %H:%M:%S)
content -- array ( dict {язык: значение} | list [])
title -- array ( dict {язык: значение} | list [])
subtitle -- array ( dict {язык: значение} | list [])
url -- string
ios_title -- string | array ( dict {язык: значение} ) | null
ios_subtitle -- string | array ( dict {язык: значение} ) | null
ios_root_params -- dict (JSON) | null
android_header -- string | array ( dict {язык: значение} ) | 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 (устарело) -- list (JSON) | null
data -- dict (JSON) | null
open -- dict [dict [string: int]]  | ""   Пример: 'open': {'AAAAA-BBBBB': {'IOS': 1, 'ANDROID': 1}}
sent -- dict [dict [string: int]]  | ""   Пример: 'sent': {'AAAAA-BBBBB': {'IOS': 10, 'ANDROID': 10}}
ctr -- dict [string: int] | ""  Пример: {'AAAAA-BBBBB': 1}
errors -- dict [string: int] | ""  Пример: {'ANDROID': 1, 'IOS': 1}
```



## cancelMessage

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

Отменяет запланированное сообщение.

#### Тело запроса

| Имя                                      | Тип    | Описание                                           |
| ----------------------------------------- | ------ | ----------------------------------------------------- |
| auth*    | string | [Токен доступа API](/ru/developer/api-reference/api-identifiers/#api-access-token) из Панели управления Pushwoosh.        |
| message* | string | [Код сообщения](/ru/developer/api-reference/api-identifiers/#message-code), полученный в ответе `/createMessage`. |

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

<Aside type="note">
Метод разрешен только для сообщений, находящихся в статусе ожидания, обработки или в очереди.
</Aside>

```json title="Example"
{
  "request":{
    "auth": "yxoPUlwqm…………pIyEX4H",  // обязательно. Токен доступа API из Панели управления Pushwoosh
    "message": "xxxx-xxxxxxx-xxxxxx" // обязательно. Код сообщения, полученный в ответе /createMessage
  }
}
```

**Коды состояния:**

| Код состояния HTTP | status_code | Описание                                         |
| ---------------- | ------------ | --------------------------------------------------- |
| 200              | 200          | Сообщение успешно отменено                       |
| 200              | 210          | Ошибка аргумента. См. status_message для получения дополнительной информации.  |
| 400              | N/A          | Неверно сформированная строка запроса                            |
| 500              | 500          | Внутренняя ошибка                                      |