# Параметры push-уведомлений

Для автоматической обработки и отображения push-уведомлений Ваше приложение должно быть осведомлено о возможных типах уведомлений и об аргументах, присылаемых в этих уведомлениях. Звёздочкой отмечены названия обязательных параметров.

## Типы данных

| Тип          | Описание                                      |
|--------------|-----------------------------------------------|
| `Double`     | Вещественный тип числа.                       |
| `Long`/`Int` | Целочисленный тип.                            |
| `String`     | Строковый тип.                                |
| `Enum`       | Значение из списка возможных (строковый тип). |
| `Array<*>`   | Список значений (массив).                     |

## Уведомление

| Название параметра | Тип                                                 | Пример                                                                                                                                                                                                                                                                    | Описание                                                                                                                                                                                                                                                                                                                  |
| ------------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type*`            | `Enum`                                              | `P.OM`                                                                                                                                                                                                                                                                    | Тип push-уведомления.<br><br>Возможные значения:<br><br>`P.OM`, `P.OF`, `P.CR`, `P.OA`, `P.WM`                                                                                                                                                                                                                            |
| `event*`           | `Enum`                                              | `add`                                                                                                                                                                                                                                                                     | Действие push-уведомления.<br><br>Возможные значения:<br><br>`add`, `del`                                                                                                                                                                                                                                                 |
| `message`          | Представление типа `JSON` (см. [message](#message)) | <code>message={<br>    "kind": "operator",<br>     "clientSideId": "03ef89e10352b87809e67f74504c4bb6",<br>      "name": "Никита К",<br>      "avatar": "/webim/images/avatar/wmtest2_181510.png",<br>      "text": "1232",<br>      "ts": 1.531582962567873E9<br>}</code> | Сообщение push-уведомления.<br><br>Обязателен, если `type` – `P.OM`, `P.OF`, `P.CR`.                                                                                                                                                                                                                                      |
| `params`           | `Array`                                             | `["Никита К","1232"]`                                                                                                                                                                                                                                                     | Параметры push-уведомления.<br><br>Обязателен, если `type` – `P.OA`, `P.OM`, `P.OF`:<br><ul><li>Для `P.OA` – массив из одного элемента: имя оператора</li><li>Для `P.OF` – массив из двух элементов: имя оператора, название файла</li><li>Для `P.OM` – массив из двух элементов: имя оператора, текст сообщения</li></ul> |

Возможные значения параметра `loc-key` (**iOS**) и `type` (**Android**):

  * `P.CR` означает, что оператор прислал запрос контактных данных.

  * `P.OA` означает, что оператор взял чат в обработку.

  * `P.OF` означает, что оператор прислал файл.

  * `P.OM` означает, что оператор прислал сообщение.

  * `P.RO` означает, что необходимо оценить оператора.

  * `P.WM` означает, что оператор прислал виджет (для включения данной функциональности необходимо обратиться в [службу поддержки](mailto:support@webim.ru)).

Значения массива аргументов — параметр `loc-args` (**iOS**) и `params` (**Android**):

  * Для `P.CR` – массив пустой.

  * Для `P.OA` – массив из одного элемента: имя оператора.

  * Для `P.OF` – массив из двух элементов: имя оператора, название файла.

  * Для `P.OM` – массив из двух элементов: имя оператора, текст сообщения.

  * Для `P.RO` – массив пустой.

  * Для `P.WM` – массив содержит информацию о виджете (для включения данной функциональности необходимо обратиться в [службу поддержки](mailto:support@webim.ru)).

Данные параметры приходят без названий, порядок в массиве важен.

Возможные значения параметра `event` (**Android**)

  * `add` – push-уведомление необходимо показать

  * `del` – push-уведомление необходимо удалить

Если push-уведомление имеет тип `P.OF` или `P.OM`, то параметр `message` содержит в себе сообщение, в ином случае этого параметра нет.

## message

| Название параметра | Тип      | Пример                                    | Описание                                                                                                                |
|--------------------|----------|-------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|
| `name*`            | `String` | `Никита К`                                | Имя автора сообщения.                                                                                                   |
| `avatar*`          | `String` | `/webim/images/avatar/wmtest2_181510.png` | URL аватара автора сообщения.                                                                                           |
| `kind*`            | `Enum`   | `operator`                                | [Тип сообщения](https://webim.ru/kb/dev/basic-objects/message-types.html).<br><br>Возможные типы: `operator`, `file_operator`, `cont_req`. |
| `clientSideId*`    | `String` | `03ef89e10352b87809e67f74504c4bb6`        | ID сообщения.                                                                                                           |
| `ts*`              | `Double` | `1.531582962567873E9`                     | Время сообщения в микросекундах.                                                                                        |
| [`text*`](#text)   | `String` | `Текст сообщения`                         | Текст сообщения или строковое представление формата `JSON` с файлом, сериализованное в строку.                          |

## text

| kind            | Тип      | Пример                                             | Описание                                                             |
|-----------------|----------|----------------------------------------------------|----------------------------------------------------------------------|
| `operator`      | `String` | `Здравствуйте, чем я могу Вам помочь?`             | Текстовое сообщение оператора.                                       |
| `file_operator` | `String` | См. описание [параметра](#file_operator)           | Сообщение с файлом от оператора, содержащее сериализированный JSON.  |
| `cont_req`      | `String` | `Введите, пожалуйста, Вашу контактную информацию.` | Сообщение с запросом контактной информации.                          |

## file_operator

| Параметр              | Тип       | Пример                             | Описание                                               |
|-----------------------|-----------|------------------------------------|--------------------------------------------------------|
| `is_voice`            | `Boolean` | `false`                            | Параметр, указывающий является ли сообщение голосовым. |
| `client_content_type` | `String`  | `image/jpeg`                       | Content type файла, указанный при отправке фронтэндом. |
| `image.size.width`    | `Int`     | `1125`                             | Ширина изображения в пикселях.                         |
| `image.size.length`   | `Int`     | `2000`                             | Высота изображения в пикселях.                         |
| `visitor_id`          | `String`  | `fbd431f77834ba107b120cfa07fec70d` | Идентификатор посетителя в guid-формате.               |
| `filename`            | `String`  | `3_(3).jpg`                        | Название файла.                                        |
| `content-type`        | `String`  | `image/jpeg`                       | Content type файла, распознанный при анализе файла.    |
| `guid`                | `String`  | `4bfc1ae213b84cd586abc2c787b87a8e` | Идентификатор файла.                                   |
| `size`                | `Int`     | `176001`                           | Размер файла в байтах.                                 |

## image

| Название параметра | Тип                                           | Пример                          | Описание                    |
|--------------------|-----------------------------------------------|---------------------------------|-----------------------------|
| `size*`            | Представление типа `JSON` (см. [size](#size)) | `{"width": 300, "height": 300}` | Размеры превью изображения. |

## size

| Название параметра | Тип   | Пример | Описание                   |
|--------------------|-------|--------|----------------------------|
| `width*`           | `Int` | `300`  | Ширина превью изображения. |
| `height*`          | `Int` | `300`  | Высота превью изображения. |

В уведомлениях в **iOS** используются в основном те же параметры. Среди специфических для этой платформы упомянем:

| Название параметра | Тип      | Пример                           | Описание                                                                                                                                                                                                                                                                                                                 |
|--------------------|----------|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `loc-key*`         | `String` | `P.OM`                           | Тип уведомления.                                                                                                                                                                                                                                                                                                         |
| `loc-args`         | `Array`  | Массив с параметрами (см. выше). | Параметры push-уведомления.<br><br>Обязателен, если type – `P.OA`, `P.OM`, `P.OF`:<br><ul><li>Для `P.OA` – массив из одного элемента: имя оператора</li><li>Для `P.OF` – массив из двух элементов: имя оператора, название файла</li><li>Для `P.OM` – массив из двух элементов: имя оператора, текст сообщения</li></ul> |
| `sound`            | `String` | `default`                        | Звук уведомления.                                                                                                                                                                                                                                                                                                        |
| `webim*`           | `Int`    | `1`                              | Параметр для идентификации приложения. Всегда равен `1`.                                                                                                                                                                                                                                                                 |

## Примеры для FCM Android

Оператор взял чат в обработку:

```
{params=["Никита К"], type=P.OA, event=add}
```

Пришло сообщение:

```
{
            params=[
                "Никита К",
                "1232"
            ],
            type=P.OM,
            event=add,
            message={
                "kind": "operator",
                "clientSideId": "03ef89e10352b87809e67f74504c4bb6",
                "name": "Никита К",
                "avatar": "/webim/images/avatar/wmtest2_181510.png",
                "text": "1232",
                "ts": 1.531582962567873E9
            }
}
```

Пришёл файл:

```
{
            params=   [
                "Никита К",
                "p.jpg"
            ],
            type=P.OF,
            event=add,
            message=   {
                "kind": "file_operator",
                "clientSideId": "a49529502be8482ba9134756c4a4a211",
                "name": "Никита К",
                "avatar": "/webim/images/avatar/wmtest2_181510.png",
                "text": {
                    "client_content_type": "image/jpeg",
                    "image": {
                        "size": {
                        "width": 300,
                        "height": 300
                        }
                    },
                    "visitor_id": "1b0c5d865529418a91f728c525b6d9fd",
                    "filename": "p.jpg",
                    "content_type": "image/jpeg",
                    "guid": "ac741895c19a47078bc54f722951957f",
                    "size": 53323
                },
                "ts": 1.531584932619524E9
            }
}
```

Оператор запросил контактные данные:

```
{
            params=[

            ],
            type=P.CR,
            event=add,
            message={
                "kind": "cont_req",
                "clientSideId": "525a9cd6c49a46de90ca4c9016681b56",
                "name": "Никита К",
                "avatar": "/webim/images/avatar/wmtest2_181510.png",
                "text": "Please enter your contact information.",
                "ts": 1.531584937099446E9
            }
}
```

## Пример для APNs iOS

Пример push-уведомления для iOS:

```
{
        "aps": {
            "alert": {
                "loc-key": "P.OM",
                "loc-args": ["Имя Оператора", "Сообщение"]
            },
            "sound": "default",
        },
        "webim": 1
}
```

!!! Note "N.B."
    В зависимости от типа сообщения, в коде push-уведомления для **iOS** изменяются только значения `loc-key` и `loc-args`.

## Пример для Huawei Push Kit

Пример push-уведомления для Huawei может выглядеть следующим образом:

```
{
    "validate_only": false,
    "token": "токен",
    "data": {
        "pushtype": 1,
        "pushbody": Стандартное тело для push-уведомления Android
    } 
}
```

---

Источник: https://webim.ru/kb/mobile/push-notifications/push-notifications-payload.html
