---
description: Ниже представлено описание запросов для получения статусов отправки.
---

# Получение уведомлений

Есть несколько способов получения статусов сообщений:&#x20;

* Выполнить POST-запрос /receive.
* Выполнить POST-запрос /receivebymsid
* Настроить URL для получения статусов callback-методом.

### Запросы для получение статусов

Для получения массива статусов необходимо выполнить следующий запрос:&#x20;

## Получение статусов сообщений

<mark style="color:green;">`POST`</mark> `URL: https://external-api.weasy.pro/receive.`

#### Headers

| Name                                            | Type   | Description                 |
| ----------------------------------------------- | ------ | --------------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | string | application/json            |
| Authorization<mark style="color:red;">\*</mark> | string | 'nodeID:password' \| base64 |

#### Request Body

| Name                                    | Type    | Description                                                                                                                                      |
| --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| count<mark style="color:red;">\*</mark> | integer | <p>Количество сообщений, статусы которых нужно включить в ответ.<br>Максимальное количество запрашиваемых статусов не должно превышать 1000.</p> |

::::{tab-set}

:::{tab-item} 200: OK Успешный ответ на запрос

```javascript
{
    "timestamp": 1632217053017,
    "code": 200,
    "states": [
    {
         "@type": "state",
         "msid": "MSID сообщения",
         "status": "статус сообщения",
         "creationDate": "время генерации статуса",
         "errorCode": код ошибки,
         "final": true
      },
      {
         "@type": "state",
         "msid": "MSID сообщения",
         "status": "статус сообщения",
         "creationDate": "время генерации статуса",
         "errorCode": код ошибки,
         "final": false
      },
      ...]
}
```
:::


:::{tab-item} 400: Bad Request Некорректный синтаксис запроса

```javascript
{
    "timestamp": 1632217156341,
    "code": 400,
    "description": "incorrect request body"
}
```
:::

::::


Для получения статуса сообщения по идентификатору необходимо выполнить следующий запрос:&#x20;

## Получение статуса по id сообщения

<mark style="color:green;">`POST`</mark> `https://external-api.weasy.pro/receivebymsid`

#### Headers

| Name                                            | Type   | Description                 |
| ----------------------------------------------- | ------ | --------------------------- |
| Content-Type<mark style="color:red;">\*</mark>  | string | application/json            |
| Authorization<mark style="color:red;">\*</mark> | string | 'nodeID:password' \| base64 |

#### Request Body

| Name                                    | Type    | Description                                                                                                             |
| --------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------- |
| msids<mark style="color:red;">\*</mark> | integer | <p>Перечень id сообщений, по которым необходимо получить статусы.<br>Количество запрашиваемых статусов от 1 до 100.</p> |

::::{tab-set}

:::{tab-item} 200 Успешный ответ на запрос

```
{
    "timestamp": 1632215128266,
    "code": 200,
    "states": [
        {
            "@type": "state",
            "msid": "41937aa1-6322-1463-7134-aa0003464415",
            "status": "UNDELIVERED",
            "creationDate": 1632214638388,
            "properties": {},
            "totalParts": 0,
            "sentParts": 0,
            "errorCode": 6969,
            "final": true
        }
    ]
}
```
:::


:::{tab-item} 400 Некорректный синтаксис запроса

```
{
    "timestamp": 1632217316090,
    "code": 400,
    "description": "Cannot receive messages by msid, use receive instead}
```
:::

::::


**Параметры ответа**:

| Параметр      | Тип       | Значение                                                                                                            |
| ------------- | --------- | ------------------------------------------------------------------------------------------------------------------- |
| **timestamp** | timestamp | Время отправки сообщения в формате Unix Timestamp                                                                   |
| **code**      | integer   | Код ответа                                                                                                          |
| **states**    | array     | Массив со статусами сообщений. Последовательность сообщений в массиве соответствует их последовательности в запросе |

#### **Параметры объекта в массиве states:**

| Параметр         | Тип       | Значение                                                                                                          |
| ---------------- | --------- | ----------------------------------------------------------------------------------------------------------------- |
| **@type**        | string    | Тип ответа (в запросах на получение статусов - state)                                                             |
| **msid**         | string    | UUID сообщения                                                                                                    |
| **status**       | string    | <p>Статус сообщения:<br> - DELIVERED - доставлено.<br> - UNDELIVERED - не доставлено.<br> - READ - прочитано.</p> |
| **creationDate** | timestamp | Дата формирования статуса                                                                                         |
| **errorCode**    | integer   | Код ошибки                                                                                                        |
| **final**        | boolean   | Указывает, является ли статус сообщения финальным                                                                 |

::::::{tip}
* Опция получения статусов подключается по запросу, обратитесь в службу технической поддержки или к вашему менеджеру.
* Срок хранения статусов сообщений составляет 48 часов.
* время получения статуса зависит от доступности абонента, качества сигнала мобильной сети и некоторых других технических параметров;
* временем ожидания статуса считается промежуток времени от отправки до даты, указанной в параметре expirationDate; по истечении этого промежутка возвращается статус EXPIRED;
* если оператор связи по тем или иным причинам не предоставляет код доставки, сообщение будет финализировано как недоставленное с кодом 127.
* статус EXPIRED\_READ по умолчанию не передаётся; если вам нужно получать этот статус, обратитесь в службу технической поддержки или к вашему менеджеру.
::::::

**Примеры запросов**:&#x20;

{% code title="CURL" %}
```
curl --location --request POST 'https://external-api.weasy.pro/receive' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic MTIzNDU6dGVzdA==' \
--data-raw '10'


curl --location --request POST 'https://external-api.weasy.pro/receivebymsid' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic MTIzNDU6dGVzdA==' \
--data-raw '{"msids":["41937aa1-6322-1463-7134-aa0003464415"]}'
```
{% endcode %}

### Получение статусов методом callback

Чтобы воспользоваться сервисом HTTP Callback, вам потребуется сообщить нам адрес и порт вашего сервера, на который будут приходить статусы.

Сервис HTTP Callback периодически проверяет доступность вашего сервера, отправляя GET-запрос на адрес \<host>/ping. Если ваш сервер доступен и возвращает ответ с кодом 200 OK, вам будут отправлены доступные на текущий момент статусы.

**Пример запроса**:&#x20;

{% code title="CURL" %}
```
curl --location --request GET 'https://app.test/remote-api/whatsapp/ping' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic MTIzNDU6dGVzdA==' \
--header 'Cookie: XSRF-TOKEN=eyJpdiI6IjF4QUF5RENyUjF3YmlzQ3ZwSEE9PSIsInZhbHVlIjoiN0U2UUN3R2p0NThoWTF3QXU1VlJBa3h6clp0djdkamtUQWU4TDdDbU40NldndXlrcGhReVRpZkZCbm52aXdscjdaVWliY1NXaGtDUEFnMU5IbG9rMUE9PSIsIm1hYyI6IjQwNjUxZmYxMmY0MTMyYjkyMDMwODYzY2I2ZWY3NWVmODVjYTBmMDdlOWZhNGY1NzQ5ZDNiNzE4MmYxZTg5MDYifQ%3D%3D; laravel_session=eyJpdiI6InRwVkFqU2FcL200ZHBxWGczOEthQ1RBPT0iLCJ2YWx1ZSI6IlQ2UnpydnJ0SFhIemlMWFd2ZHBKWEJcLzlBSjhndUpGY3B6dktMSjNESXNQRVpaZWorRU9pR28wOHJrb0o0V0c2djZKSDJ5MkloNzJOQ1lLR0VDc1g4UT09IiwibWFjIjoiYzMzYWVjN2EyZDA5YjMzZTkxMmYyZWUyNjE4NjJmNGYxOWU4NWUzYjdmZTcxYzg3OTMwM2Q4NjYzYmIxYTYyYyJ9' \
--data-raw ''
```
{% endcode %}

Статусы будут передаваться на ваш сервер в запросе, который имеет следующую структуру:

* тип запроса - POST;
* URL:\<host>:\<port>/states;
* Authorization: Basic base64(login:pass)
* Content-Type - application/json

В качестве значений параметров \<host> и \<port> вам потребуется указать адрес и порт вашего сервера.

По умолчанию эндпоинт для получения статусов /states. Вы можете задать кастомное значение эндпоинта для получения статусов. Для этого необходимо вместе с адресом и портом вашего сервера указать необходимое название эндпоинта.

В теле запроса передаётся точно такой же JSON-объект, как в ответе на запрос статусов:

```
{
  "timestamp": "1551106300857",
  "states": [
    {
      "@type": "state",
      "msid": "43000aa1-1111-1111-0000-aa0007777777",
      "status": "UNDELIVERED",
      "creationDate": "1551106273415",
      "errorCode": "6969",
      "final": true
    }
  ]
}
```

В ответ на запрос ваш сервер должен вернуть код 200 OK или 202 (Accepted). Если ваш сервер вернёт другой код, будет предпринята повторная попытка отправки согласно заданным правилам. Для всех клиентов применяется правило переотправки и выглядит следующим образом: 10:100:1000 (10с - первая попытка, 100с - вторая, 1000 сек - 3 попытка).
