# Создание шаблонов

## Отправка шаблона на регистрацию

<mark style="color:green;">`POST`</mark> `https://direct.i-dgtl.ru/api/v1/templates/sms`

Метод позволяет отправить на регистрацию шаблоны разных типов к разным зарегистрированным именам отправителей.

#### Headers

| Name                                            | Type   | Description        |
| ----------------------------------------------- | ------ | ------------------ |
| Authorization<mark style="color:red;">\*</mark> | string | `Basic {TOKEN_2}`  |
| Content-Type<mark style="color:red;">\*</mark>  | string | `application/json` |

#### Request Body

<table><thead><tr><th>Name</th><th width="362">Type</th><th>Description</th></tr></thead><tbody><tr><td>toAdd<mark style="color:red;">*</mark></td><td>string</td><td><p>Способ отправки шаблонов. Варианты значений:</p><ul><li><code>ALL_OR_NOTHING</code> – будут созданы либо все шаблоны (при условии валидности каждого из них), либо ни одного</li><li><code>ALL_VALID</code> – будут созданы все валидные шаблоны</li></ul></td></tr><tr><td>dateFrom<mark style="color:red;">*</mark></td><td>string</td><td>Желаемая дата начала действия шаблона</td></tr><tr><td>templates<mark style="color:red;">*</mark></td><td>array</td><td>Массив объектов с описанием шаблонов</td></tr><tr><td>templates.pattern<mark style="color:red;">*</mark></td><td>string</td><td>Текст шаблона</td></tr><tr><td>templates.templatesByType<mark style="color:red;">*</mark></td><td>array</td><td>Массив объектов с типами шаблонов и именами отправителей</td></tr><tr><td>templates.templatesByType.templateType<mark style="color:red;">*</mark></td><td>string</td><td><a href="../extra/references/#template-types">Тип шаблона</a></td></tr><tr><td>templates.templatesByType.senderNames<mark style="color:red;">*</mark></td><td>array</td><td>Массив объектов с идентификаторами имен отправителей, на которые нужно зарегистрировать шаблон.<br>Допускается регистрация на имена отправителей операторов Мегафон, Билайн, Теле2 и МТС в статусах, начиная с INTERNAL_REVIEW.</td></tr><tr><td>templates.templatesByType.senderNames.id<mark style="color:red;">*</mark></td><td>integer</td><td>Уникальный идентификатор имени отправителя в i-Digital Direct. Получить идентификатор можно методом <a href="../sender-names/get.md">Получение имен отправителей</a></td></tr><tr><td>templates.templatesByType.senderNames.externalTemplateId</td><td>string</td><td>Идентификатор шаблона в вашей внешней системе</td></tr></tbody></table>

{% hint style="warning" %}
* Создание шаблонов типа SERVICE допускается только для имен отправителей операторов Билайн, Мегафон, МТС
* Создание шаблонов типа AUTHORIZE допускается только для имен отправителей операторов Мегафон, Теле2
{% endhint %}

::::::{tab-set}

:::::{tab-item} 200

При отсутствии ошибок в запросе (независимо от валидности шаблонов) вернется HTTP-код 200.

```json
{
    "toAdd": "ALL_VALID",
    "dateFrom": "2024-07-27T21:00:00Z",
    "total":4, 
    "added":2, 
    "notAdded":2,
    "templates": [
        {
            "pattern": "текст шаблона 1",
            "templatesByType": [
                {
                    "templateType": "SERVICE",
                    "patternState": "INVALID",
                    "correctExample": "исправленный текст шаблона",
                    "senderNames": [
                        {
                            "id": 1,
                            "senderName": "first",
                            "brand": "BEELINE",
                            "state": "ERROR"
                        }
                    ]
                },
                {
                    "templateType": "AUTHORIZE",
                    "patternState": "VALID",
                    "senderNames": [
                        {
                            "id": 2,
                            "senderName": "second",
                            "brand": "MEGAFON",
                            "state": "SUCCESS",
                            "templateId": 11
                        }
                    ]
                }
            ]
        },
        {
            "pattern": "текст шаблона 2",
            "templatesByType": [
                {
                    "templateType": "SERVICE",
                    "patternState": "VALID",
                    "senderNames": [
                        {
                            "id": 3,
                            "senderName": "third",
                            "brand": "BEELINE",
                            "state": "ERROR",
                            "error": {
                                "type": "COVERED_BY_EXISTING",
                                "templateId": 124
                            },
                            "externalTemplateId": "1a2b3c"
                        },
                        {
                            "id": 4,
                            "senderName": "fourth",
                            "brand": "TELE2",
                            "state": "SUCCESS",
                            "templateId": 11,
                            "externalTemplateId": "3d4e5f"
                        }
                    ]
                }
            ]
        }
    ]
}
```
:::::


:::::{tab-item} 401

Использование невалидного токена / отсутствие заголовка авторизации.

::::{tab-set}

:::{tab-item} 4012

```json
{
    "error": {
        "code": 4012,
        "msg": "Bad credentials"
    }
}
```
:::


:::{tab-item} 4010

```json
{
    "error": {
        "code": 4010,
        "msg": "Not Authenticated"
    }
}
```
:::

::::

:::::


:::::{tab-item} 403

Использование неподходящего токена.

```json
{
    "error": {
        "code": 4030,
        "msg": "Access Denied"
    }
}
```
:::::


:::::{tab-item} 422

Несуществующее имя отправителя.

```json
{
    "error": {
        "code": 4220,
        "msg": "Client 5 has not sender name 734"
    }
}
```
:::::

::::::


## Описание объекта ответа <a href="#response-object" id="response-object"></a>

| Параметр                                               | Тип     | Описание                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ------------------------------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| toAdd                                                  | string  | Соответствует `toAdd` в запросе                                                                                                                                                                                                                                                                                                                                                                                                     |
| dateFrom                                               | string  | Соответствует `dateFrom` в запросе                                                                                                                                                                                                                                                                                                                                                                                                  |
| total                                                  | integer | Общее количество переданных шаблонов                                                                                                                                                                                                                                                                                                                                                                                                |
| added                                                  | integer | Количество добавленных шаблонов                                                                                                                                                                                                                                                                                                                                                                                                     |
| notAdded                                               | integer | Количество не добавленных шаблонов                                                                                                                                                                                                                                                                                                                                                                                                  |
| templates                                              | array   | Массив объектов с описанием шаблонов                                                                                                                                                                                                                                                                                                                                                                                                |
| templates.pattern                                      | string  | Текст шаблона                                                                                                                                                                                                                                                                                                                                                                                                                       |
| templates.templatesByType                              | array   | Массив объектов с типами шаблонов и именами отправителей                                                                                                                                                                                                                                                                                                                                                                            |
| templates.templatesByType.templateType                 | string  | Тип шаблона.  Соответствует `templateType` в запросе                                                                                                                                                                                                                                                                                                                                                                                |
| templates.templatesByType.patternState                 | string  | <p>Статус валидности текста шаблона</p><ul><li><code>VALID –</code> текст валиден</li><li><code>INVALID –</code> текст не валиден</li></ul>                                                                                                                                                                                                                                                                                         |
| templates.templatesByType.correctExample               | string  | Пример текста шаблона с исправленными ошибками                                                                                                                                                                                                                                                                                                                                                                                      |
| templates.templatesByType.senderNames                  | array   | Массив объектов имен отправителей, на которые регистрировались шаблоны                                                                                                                                                                                                                                                                                                                                                              |
| templates.templatesByType.senderNames.id               | integer | Идентификатор имени отправителя                                                                                                                                                                                                                                                                                                                                                                                                     |
| templates.templatesByType.senderNames.senderName       | string  | Имя отправителя                                                                                                                                                                                                                                                                                                                                                                                                                     |
| templates.templatesByType.senderNames.brand            | string  | Оператор имени отправителя                                                                                                                                                                                                                                                                                                                                                                                                          |
| templates.templatesByType.senderNames.state            | string  | <p>Статус отправки шаблона на данное имя отправителя:</p><ul><li><code>SUCCESS</code> – шаблон отправлен на регистрацию</li><li><code>ERROR</code> – произошла ошибка, шаблон не отправлен на регистрацию</li></ul>                                                                                                                                                                                                                 |
| templates.templatesByType.senderNames.templateId       | integer | Идентификатор созданного шаблона (передается при`state = SUCCESS`)                                                                                                                                                                                                                                                                                                                                                                  |
| templates.senderNames.error                            | object  | <p>Объект с описанием ошибки</p><p>(передается при<code>state = ERROR</code>)</p>                                                                                                                                                                                                                                                                                                                                                   |
| templates.templatesByType.senderNames.error.type       | string  | <p>Тип ошибки:</p><ul><li><code>DUPLICATE</code> – является дубликатом шаблона, который также присутствует в запросе</li><li><code>COVERED</code> – содержится в другом шаблоне, который также присутствует в запросе</li><li><code>DUPLICATES_EXISTING</code> – является дубликатом существующего в системе шаблона</li><li><code>COVERED_BY_EXISTING</code> – содержится в другом шаблоне, который существует в системе</li></ul> |
| templates.templatesByType.senderNames.error.templateId | integer | Идентификатор шаблона в системе, из-за которого нельзя добавить данный (актуально для ошибок `..._EXISTING`)                                                                                                                                                                                                                                                                                                                        |

## Пример запроса <a href="#example" id="example"></a>

::::::{tab-set}

:::::{tab-item} JSON

```json
POST https://direct.i-dgtl.ru/v1/templates/sms
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Type: application/json
{
    "toAdd": "ALL_VALID",
    "dateFrom": "2024-07-27T21:00:00Z",
    "templates": [
        {
            "pattern": "текст шаблона 1",
            "templatesByType": [
                {
                    "templateType": "SERVICE",
                    "senderNames": [
                        {
                            "id": 1
                        }
                    ]
                },
                {
                    "templateType": "AUTHORIZE",
                    "senderNames": [
                        {
                            "id": 2
                        }
                    ]
                }
            ]
        },
        {
            "pattern": "текст шаблона 2",
            "templatesByType": [
                {
                    "templateType": "SERVICE",
                    "senderNames": [
                        {
                            "id": 3,
                            "externalTemplateId": "1a2b3c"
                        },
                        {
                            "id": 4,
                            "externalTemplateId": "3d4e5f"
                        }
                    ]
                }
            ]
        }
    ]
}
```
:::::


:::::{tab-item} cURL

```bash
curl -X POST 'https://direct.i-dgtl.ru/api/v1/templates/sms' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
-d '{"toAdd":"ALL_VALID","dateFrom":"2024-07-27T21:00:00Z","templates":[{"pattern":"текст шаблона 1","templatesByType":[{"templateType":"SERVICE","senderNames":[{"id":1 }]},{"templateType":"AUTHORIZE","senderNames":[{"id":2 }]}]},{"pattern":"текст шаблона 2","templatesByType":[{"templateType":"SERVICE","senderNames":[{"id":3,"externalTemplateId":"1a2b3c"},{"id":4,"externalTemplateId":"3d4e5f"}]}]}]}'
```
:::::

::::::

