Перейти к содержанию

OMNI

Создание сценария

Для отправки OMNI-рассылки необходимо вызвать POST /omni-task-api/tasks, передавая в теле параметры с указанием данных авторизации в заголовке.

Параметры запроса

Параметр Тип данных Описание и Допустимые значения
taskName string Название рассылки
type string Тип рассылки. Возможные значения: SIMPLE, API
channel string Канал рассылки. Возможные значения: SMS, EMAIL, VIBER, PUSH
addressBookSource object Параметры адресной книги
addressBookSourceType string Тип адресной книги. Возможные значения: SIMPLE
byTimeZone boolean Учитывать или нет местное время контакта при отправке
checkDuplicate boolean Отправлять или нет сообщение дубликатам контактов
contactGroupIds array[integer] Массив идентификаторов листов
period string Тип периода. Заполняется, если type=PERIODIC. Возможные значения: ONCE, DAILY, WEEKLY, MONTHLY
segmentIds array[integer] Массив идентификаторов сегментов
smoothSendMinutes integer Плавная отправка, задается в минутах
stopContactGroupIds array[integer] Массив идентификаторов стоп-листов
triggers object Параметры триггеров
index integer Идентификатор триггера
parentIndex integer Идентификатор родительского триггера
startTime string Дата старта триггера
endTime string Дата окончания триггера
type string Тип триггера. Возможные значения: ADDRESS_BOOK_SOURCE, EVENT_SOURCE, NO_EVENT_SOURCE, TRAN_API_SOURCE
channel string Канал триггера. Возможные значения: SMS, EMAIL, VIBER, PUSH
eventSources array[object] Массив событий для триггера.
Заполняется следующим образом
{
"channel": "SMS" //канал родительского триггера,
"eventType": "STATE" //тип события, пока возможна передача только STATE
"eventValue": "string" //статус сообщения
}
template object Шаблон для отправки (подробное описание в "Заполнении шаблонов")
noEventSourceSettings object Параметр stateWaitMaxTimeSec - integer - время ожидания события (в секундах), определенного в eventSources , с указанием индекса в parentIndex. По истечении времени происходит повторная отправка сообщения.

Note

eventSources.eventValue может принимать следующие значения:
SMS: delivered или expired
VIBER: delivered, expired, opened или clicked
EMAIL: delivered, opened, clicked, unsubscribed или subscribed

Заполнение шаблонов

Параметр Тип данных Описание и Допустимые значения
smsTemplate Шаблон sms-сообщения
from string Имя отправителя
text string Текст сообщения
validity integer Срок жизни сообщения
viberTemplate Шаблон viber-сообщения
action string Ссылка кнопки
caption string Название кнопки
from string Имя отправителя
image string Картинка
text string Текст сообщения
validity integer Срок жизни сообщения
emailTemplate Шаблон email-сообщения
attachmentIds array[integer] Массив добавленных файлов
htmlBody string Html-текст письма
plainText string Текст письма
sourceAddress string Адрес отправителя
sourceName string Имя отправителя
subject string Тема письма
pushTemplate Шаблон push-сообщения
android object Специфичные настройки для Android
apns object Специфичные настройки для iOs
badge integer Число на бейдже
from integer Идентификатор отправителя
options object Дополнительные данные в виде:
{
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
silentPush boolean Silent Push
text string Текст сообщения
title string Заголовок сообщения
validity integer Срок жизни сообщения
pushWalletTemplate Шаблон pushwallet-сообщения
from string Идентификатор отправителя
to string Номер телефона получателя. Проверка на валидность номера телефона и обрезка
callbackUrl string Адрес отправителя колбека. Максимально 1000 символов
callbackData Map[String, Object] Данные колбека
scheduledTime string Время отправки сообщения в формате LocalDateTime
options Map[String, Object] (optional) Map дополнительные параметры, которые будут переданы на устройство
mergeKey string Ключ для объединения ответа и запроса
payload PushPayload Настройки контента сообщения
vkTemplate Шаблон vk-сообщения
templateId string Идентификатор шаблона в Devino Online
templateData
(optional)
object Дополнительные значения, которые подставляются в шаблон
routes array[string] Массив маршрутов VK в порядке использования. Возможные значения:
[VK]
[OK]
[OK,VK]
[VK,OK]
deliveryPolicy string Политика доставки.
Возможные значения: ANY, MOBILE_DEVICE_REQUIRED.
По умолчанию ANY.
Если указано MOBILE_DEVICE_REQUIRED, то доставка производится только в случае наличия у пользователя мобильного приложения и его использования в течение последних 7 дней. Доставка при этом производится во все имеющиеся устройства, а не только мобильные.
validity
(optional)
integer Срок жизни сообщения. Указывается только в случае отправки сообщения по шаблону. Минимальное значение - 15 (сек). Максимальное значение (сутки) - 86400 (сек).
callbackData
(optional)
string Данные, которые будут указаны в обратном вызове со статусом сообщения
callbackUrl
(optional)
string URL, на который система будет отправлять уведомления об изменениях статуса сообщения
Любой валидный URL со схемой http или https

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

{
  "taskName": "NEW_SMS",
  "type": "SIMPLE", 
  "channel": "SMS",
  "addressBookSource": {
    "contactGroupIds": [111],
    "addressBookSourceType": "SIMPLE",
    "period": "ONCE"
  },
  "triggers": [
    {
      "index": 321,
      "startTime": "2020-06-02 11:00:00",
      "endTime": "2020-06-02 12:00:00",
      "type": "ADDRESS_BOOK_SOURCE",
      "channel": "SMS",
      "eventSources": [
        {
          "channel": "SMS",
          "eventType": "STATE",
          "eventValue": "delivered"
        }
      ],
      "template": {
        "smsTemplate": {
          "text": "У нас новый магазин!",
          "from": "TEST",
          "validity": 600
        }
      }
    }
  ]
}

Пример ответа

{
  "result": {
    "code": "OK",
    "result": "7003"
  }
}

Получение конкретного сценария

Для получения OMNI-сценария необходимо вызвать GET /omni-task-api/tasks/{taskId}, передавая в теле параметры рассылки с указанием данных авторизации в заголовке.

Параметры запроса

Параметр Тип данных Описание и Допустимые значения
taskId integer Идентификатор рассылки

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

curl -X GET "https://api.devino.online/omni-task-api/tasks/7003" \
-H "Authorization: Key QWxhZGRpbjpvcGVuIHNlc2"

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

Параметр Тип данных Описание и Допустимые значения
id integer Идентификатор рассылки
taskName integer Название рассылки
userId integer Идентификатор пользователя
companyId integer Идентификатор компании
officeId integer Идентификатор представительства
creationDate string Дата создания рассылки
type string Тип рассылки. Возможные значения: SIMPLE, API
channel string Канал рассылки. Возможные значения: SMS, EMAIL, VIBER, PUSH
state string Статус рассылки. Возможные значения: DRAFT, NEW, STARTED, STOPPED, FINISHED, DELETED_FINISHED, DELETED_DRAFT, FAILED
triggersInfo array[object] Параметры триггеров
triggerId integer Идентификатор триггера
taskName integer Название рассылки
userId integer Идентификатор пользователя
companyId integer Идентификатор компании
officeId integer Идентификатор представительства
startTime string Дата старта триггера
endTime string Дата окончания триггера
type string Тип триггера. Возможные значения: ADDRESS_BOOK_SOURCE, EVENT_SOURCE, NO_EVENT_SOURCE
channel string Канал триггера. Возможные значения: SMS, EMAIL, VIBER, PUSH
counters object Список счетчиков
{
"totalCount": 1 //всего сообщений,
"successCount": 0, //успешных сообщений
"errorCount": 0 //сообщений с ошибками
}
externalId string Внешний идентификатор

Пример ответа

{
  "result": {
    "id": "7003",
    "taskName": "NEW_SMS",
    "userId": 22,
    "companyId": 50,
    "officeId": 1,
    "creationDate": "2020-06-02 07:59:08",
    "type": "SIMPLE",
    "channel": "SMS",
    "state": "NEW",
    "triggersInfo": [
      {
        "triggerId": "511",
        "taskId": "7003",
        "userId": 22,
        "companyId": 50,
        "officeId": 1,
        "startTime": "2020-06-02 11:00:00",
        "endTime": "2020-06-02 12:00:00",
        "state": "NEW",
        "type": "ADDRESS_BOOK_SOURCE",
        "channel": "SMS",
        "counters": {
          "totalCount": 1,
          "successCount": 0,
          "errorCount": 0
        },
        "externalId": "CAEF899C-C583-4DA4-B06D-8D364E6E14DE"
      }
    ]
  }
}

Получение сценариев

Для получения OMNI-сценариев необходимо вызвать GET /omni-task-api/tasks, передавая в теле параметры рассылки с указанием данных авторизации в заголовке.

Параметры запроса

Параметр Тип данных Описание и Допустимые значения
ascending boolean Порядок сортировки поля orderBy:
true - по возрастанию
false - по убыванию
channel
(optional)
string Канал рассылки. Возможные значения: SMS, EMAIL, VIBER, PUSH
count integer Количество выводимых строк
createdDateFrom
(optional)
string Дата, от которой идет поиск по Дате создания рассылки, вида yyyy-mm-dd hh:mm:ss
createdDateTo
(optional)
string Дата, по которую идет поиск по Дате создания рассылки, вида yyyy-mm-dd hh:mm:ss
endDateFrom
(optional)
string Дата, от которой идет поиск по Дате завершения последнего канала рассылки, вида yyyy-mm-dd hh:mm:ss
endDateTo
(optional)
string Дата, по которую идет поиск по Дате завершения последнего канала рассылки, вида yyyy-mm-dd hh:mm:ss
excludedStates
(optional)
array[string] Массив отсутствующих статусов поиска (исключаем эти статусы из поиска). Возможные значения: DRAFT, NEW, STARTED, STOPPED, FINISHED, DELETED_FINISHED, DELETED_DRAFT, FAILED, STOPPED_BALANCE_BLOCKED
includedStates
(optional)
array[string] Массив статусов поиска (включаем эти статусы в поиск). Возможные значения: DRAFT, NEW, STARTED, STOPPED, FINISHED, DELETED_FINISHED, DELETED_DRAFT, FAILED, STOPPED_BALANCE_BLOCKED
name
(optional)
string Название рассылки
offset integer С какой строки выводить результат (смещение)
orderBy string Поле, по которому будет проходить сортировка. Возможные значения: ID, NAME, STATE, CREATION_DATE
startDateFrom
(optional)
string Дата, от которой идет поиск по Дате старта рассылки, вида yyyy-mm-dd hh:mm:ss
startDateTo
(optional)
string Дата, по которую идет поиск по Дате старта рассылки, вида yyyy-mm-dd hh:mm:ss
types
(optional)
array[string] Массив типов рассылок. Возможные значения: SIMPLE, API

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

curl -X GET "https://api.devino.online/omni-task-api/tasks?ascending=true&count=10&offset=0&orderBy=ID \
-H "Authorization: Key QWxhZGRpbjpvcGVuIHNlc2"

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

Параметр Тип данных Описание и Допустимые значения
channel string Канал рассылки. Возможные значения: SMS, EMAIL, VIBER, PUSH
companyId integer Идентификатор компании
creationDate string Дата создания рассылки
id integer Идентификатор рассылки
officeId integer Идентификатор представительства
state string Статус рассылки. Возможные значения: DRAFT, NEW, STARTED, STOPPED, FINISHED, DELETED_FINISHED, DELETED_DRAFT, FAILED
taskName integer Название рассылки
triggersInfo array[object] Параметры триггеров
channel string Канал триггера. Возможные значения: SMS, EMAIL, VIBER, PUSH
companyId integer Идентификатор компании
counters object Список счетчиков
{
"totalCount": 1 //всего сообщений,
"successCount": 0, //успешных сообщений
"errorCount": 0 //сообщений с ошибками
}
endTime string Дата окончания триггера
externalId string Внешний идентификатор
officeId integer Идентификатор представительства
parentTriggerId integer Идентификатор родительского триггера
startTime string Дата старта триггера
state string Статус триггера. Возможные значения: DRAFT, NEW, STARTED, STOPPED, FINISHED, DELETED_FINISHED, DELETED_DRAFT, FAILED
taskId integer Идентификатор рассылки
triggerId integer Идентификатор триггера
type string Тип триггера. Возможные значения: ADDRESS_BOOK_SOURCE, EVENT_SOURCE, NO_EVENT_SOURCE
userId integer Идентификатор пользователя
type string Тип рассылки. Возможные значения: SIMPLE, API
userId integer Идентификатор пользователя

Пример ответа

{
  "result": [
  {
    "channel": "SMS", 
    "companyId": 50,     
    "creationDate": "2020-06-02 07:59:08",
    "id": "7003",    
    "officeId": 1,
    "state": "NEW",
    "taskName": "NEW_SMS",
    "triggersInfo": [
      {
        "channel": "SMS",
        "companyId": 50,
        "counters": {
          "totalCount": 1,
          "successCount": 0,
          "errorCount": 0
        },
        "endTime": "2020-06-02 12:00:00",          
        "externalId": "CAEF899C-C583-4DA4-B06D-8D364E6E14DE",
        "officeId": 1,        
        "parentTriggerId": "211",
        "startTime": "2020-06-02 11:00:00",
        "state": "NEW",
        "taskId": "7003",                                        
        "triggerId": "511",
        "userId": 22,
        "type": "ADDRESS_BOOK_SOURCE"     
      }
    ],   
    "type": "SIMPLE",
    "userId": 22                
  }  ]
}

Отправка транзакционных сообщений

Предварительно нужно создать сценарий для сообщений методом POST /omni-task-api/tasks, обязательно передав в него task.type=API и triggers.type=TRAN_API_SOURCE.

Для отправки транзакционных сообщений необходимо вызывать метод POST /omni-scheduler/api/messages, передавая в теле данные контакта сообщения и идентификатор сценария.

Для вызова метода POST /omni-scheduler/api/messages нужно заполнить его параметры.

Примечание

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

Параметры запроса

Параметр Тип данных Описание и Допустимые значения
contactIds array[integer] Массив ID контактов из адресной книги
contacts array[object] Данные контактов
contact object Данные контакта (см. описание Данные контакта)
callbackUrl string URL, на который система будет отправлять уведомления об изменениях статуса сообщения (callback). Любой валидный URL со схемой http или https
callbackData object Дополнительная информация вида "key":"value"
taskId integer Идентификатор транзакционного сообщения
templates object Данные шаблонов транзакционного сообщения
id триггера object ID конкретного триггера, взятого из taskId
Подробное описание в "Заполнении шаблонов")
Если заполнить описанные тут параметры, то они будут приоритетнее аналогичных параметров метода POST /omni-task-api/tasks, которым предварительно создавали шаблон!

Данные контакта

Параметр Тип данных Описание и Допустимые значения
email string Email контакта
fields array[object] Поля контакта.
Заполняется следующим образом:
"displayName": "string" // видимое название поля,
"name": "string", // название поля
"type": 0, // тип поля
"value": {} // значение поля
phone string Телефон контакта
pushInfo array[object] Информация для push.
Заполняется следующим образом:
"appId": "string", // id приложения
"os": 0, // операционная система
"pushToken": "string" // токен

Пример запроса POST /omni-task-api/tasks (для транзакционного сообщения)

// POST https://api.devino.online/omni-task-api/tasks
// Authorization: Key QWxhZGRpbjpvcGVuIHNlc2==
// Content-Type: application/json
// Accept: application/json
{
    "taskName": "PUSH -> EMAIL -> SMS",
    "type": "API",
    "channel": "OMNI",
    "triggers": [
        {
            "index": 0,
            "startTime": "2022-04-05 11:00:00",
            "endTime": "2022-04-05 12:00:00",
            "type": "TRAN_API_SOURCE",
            "channel": "PUSH_WALLET",
            "template": {
                "pushWalletTemplate": {
                    "from": "Привет",

                    "payload": {
                        "deeplink": {
                            "campaignId": "q123456",
                            "target": "campaign"
                        },
                        "message": "У нас новый магазин!",
                        "title": "Новый магазин"
                    }
                }
            }
        },
        {
            "index": 1,
            "parentIndex": 0,
            "startTime": "2022-04-04 12:00:00",
            "endTime": "2022-04-04 13:00:00",
            "type": "NO_EVENT_SOURCE",
            "noEventSourceSettings": {
                "stateWaitMaxTimeSec": 60
            },
            "EventSource": [
                {
                    "channel": "PUSH_WALLET",
                    "eventType": "STATE",
                    "eventValue": "MSISDN_NOT_REGISTERED"
                }
            ],
            "channel": "EMAIL",
            "template": {
                "emailTemplate": {
                    "htmlBody": "У нас новый магазин!${Unsubscribe}",
                    "plainText": "<h1>У нас новый магазин!</h1>${Unsubscribe}",
                    "sourceAddress": "testadr@newshop.com",
                    "sourceName": "DEVINOTELE",
                    "subject": "Новый магазин"
                }
            }
        },
        {
            "index": 2,
            "parentIndex": 1,
            "startTime": "2022-04-04 13:00:00",
            "endTime": "2022-04-04 14:00:00",
            "type": "NO_EVENT_SOURCE",
            "channel": "SMS",
            "eventSources": [
                {
                    "channel": "EMAIL",
                    "eventType": "STATE",
                    "eventValue": "delivered"
                }
            ],
            "template": {
                "smsTemplate": {
                    "text": "У нас новый магазин!",
                    "from": "smsSA",
                    "validity": 600
                }
            }
        }
    ]
}

Пример ответа POST /omni-task-api/tasks

{
  "result": {
    "code": "OK",
    "result": "7004"
  }
}

Пример запроса POST /omni-scheduler/api/messages

// POST https://api.devino.online/omni-scheduler/api/messages
// Authorization: Key QWxhZGRpbjpvcGVuIHNlc2
// Content-Type: application/json
// Accept: application/json
{
  "contacts": [
    {
      "contact": {
        "email": "ivan@yandex.ru",
        "phone": "79103398080"
      }
    }
  ],
  "taskId": 7004,
  "templates": {
    "63321": {   
        "emailTemplate": {
            "htmlBody": "<html><h1>У нас новый магазин!</h1><a id=\"unsubscribe-link\" href=\"${Unsubscribe}\" style=\"color: rgb(0, 122, 255); text-decoration: none;\">Отписаться от рассылки</a> | <a id=\"web-version-link\" href=\"${WebVersion}\" style=\"color: rgb(0, 122, 255); text-decoration: none;\">Web Версия</a></html>",
            "sourceAddress": "test@shop.org",
            "sourceName": "TEST",
            "subject": "Новый магазин"
        }
    },
    "63322": { 
        "smsTemplate": {
            "text": "У нас новый магазин!",
            "from": "TESTADR",
            "validity": 600
        }
    }
  }
}

Пример ответа POST /omni-scheduler/api/messages

{
  "result": {
    "contactIds": [
      "3111e47182ca9c11-3111e4711103c800"
    ],
    "sendAnswers": [
      {
        "code": "OK",
        "mergeKey": "3111e47182ca9c11-3111e4711103c800",
        "result": "3606044956953218300"
      }
    ],
    "errorAnswers": [
      {
        "code": "REJECTED",
        "result": null,
        "description": "{\"email\":\"test@test.com\",\"fields\":null,\"phone\":\"0\",\"pushInfo\":[{\"appId\":\"3410\",\"os\":1,\"pushToken\":\"ctJ5VzCERSiFTwvIQ8zUUN:APA91bEmdapZ9iHEPsVH9vBwfA0tW9o5Xe1N52URL6-ZraiGLMdeAhkLncsGiV8ooTiDoNjP5HUcAVfGa5nMjYFLSHexqAGovnlRqrjBrQJieB6a1fvlXm6znCCRjq64lLGy5PcF6nzG\"}]} #invalid.phone.size; Invalid phone size"
      }
    ]
  }
}

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

Параметр Тип данных Описание и допустимые значения
contactIds array[string] Массив загруженных контактов
sendAnswers array[object] Массив успешных сообщений (code=OK)
code string Указывает на результат обработки сообщения.
1. OK - Успешно обработано
2. REJECTED - Произоошла ошибка во время обработки запроса.
mergeKey string Идентификатор загруженного контакта
result string Идентификатор сообщения
errorAnswers array[object] Массив неуспешных сообщений (code=REJECTED)
code string Указывает на результат обработки сообщения.
1. OK - Успешно обработано
2. REJECTED - Произоошла ошибка во время обработки запроса.
result string Идентификатор сообщения.
В данном блоке равен null
description string Описание ошибки

Получение статуса транзакционного сообщения по CallbackURL

При формировании статуса сообщения будет отправлен POST-запрос на URL, указанный при отправке сообщения в параметре callbackUrl. В ответ на запрос ожидается 200 Ok.

В случае, если на запрос вернётся 500 Internal Error, то будут предприниматься попытки доставки статуса 5 раз с интервалом в минуту.

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

[
  { 
   "messageId": "string",
   "ts": 0,
   "status": "string",
   "errorCode": 0,
   "ip": "string",
   "browser": "string",
   "os": "string",
   "callbackData": {"additionalProp": "string"},   
   "userAgent": "string",
   "contactId": "string", 
   "taskId": 0,
   "triggerId": 0,
   "email": "string",
   "url": "string",
   "geolocation": {"country":"string", "region":"string", "city":"string"},
   "pushToken": "string",
   "actionId": "string",
   "pushApplicationId": 0
  }
]

Параметры запроса

Параметр Тип данных Статус Описание и Допустимые значения
messageId
(optional)
long any Уникальный идентификатор сообщения на платформе
ts
(optional)
int any Указывает на время создания объекта status
status
(optional)
enum any Код статуса доставки SMS сообщения
Подробнее см. раздел Возможные статусы
errorCode
(optional)
int rejected
undeliverable
Код причины недоставки сообщения
ip
(optional)
string opened
clicked
IP-адрес контакта
browser
(optional)
string opened
clicked
Браузер контакта
os
(optional)
string opened
clicked
Операционная система контакта
callbackData
(optional)
object any Данные, которые были указаны в callbackData при отправке запроса
userAgent
(optional)
string any Информация о браузере контакта (версия, тип)
contactId
(optional)
string any Уникальный идентификатор контакта
taskId
(optional)
long any Уникальный идентификатор рассылки
triggerId
(optional)
long any Уникальный идентификатор тригеера рассылки
email
(optional)
string any Email адрес
url
(optional)
string clicked Url, по которому перешел получатель
geolocation
(optional)
object any Данные геолокации (пока не добавляются):
country - страна
region - регион
city - город
pushToken
(optional)
string any Идентификатор устройства, на которое было отправлено сообщение
actionId
(optional)
string any Url/Deep link - действие по нажатию на уведомление
pushApplicationId
(optional)
int any Уникальный идентификатор push приложения, поле from в запросе на отправку

Возможные статусы

Параметр Описание
delivered Сообщение доставлено абоненту
expired Сообщение было просрочено по сроку жизни
undeliverable Сообщение невозможно доставить
bounced Email-сообщение невозможно доставить
opened Сообщение было открыто (прочитано)
clicked Произошел переход по ссылке в сообщении
rejected Сообщение было отклонено оператором или Devino
deleted Сообщение было удалено из очереди на отправку
subscribed Подписка через сообщение
unsubscribed Отписка от рассылки через сообщение
complained Жалоба через email-сообщение
unknown Произошла неизвестная ошибка
canceled Push-сообщение смахнули

Получение макросов

Для получения макросов необходимо вызвать метод GET /omni-task-api/macros с указанием данных авторизации в заголовке

Параметры запроса

Параметр Тип данных Описание и допустимые значения
taskIds
(optional)
array[integer] Массив идентификаторов рассылок
taskStates
(optional)
array[string] Массив статусов рассылок. Возможные значения: DRAFT, NEW, STARTED, STOPPED, FINISHED, DELETED_FINISHED, DELETED_DRAFT, FAILED, STOPPED_BALANCE_BLOCKED, STOPPED_NOT_WORKING_TIME

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

curl -X GET https://api.devino.online/omni-task-api/macros?taskStates=FINISHED

Пример ответа

{
  "result": [
    {
      "task": {
        "id": "7004",
        "taskName": "TRANSACTIONAL_CASCADE",
        "userId": 22,
        "companyId": 50,
        "officeId": 1,
        "creationDate": "2020-06-02 11:00:00",
        "type": "SIMPLE",
        "channel": "SMS",
        "state": "FINISHED",
        "triggersInfo": [
          {
            "triggerId": "321",
            "taskId": "7004",
            "userId": 22,
            "companyId": 50,
            "officeId": 1,
            "startTime": "2020-06-02 11:00:00",
            "endTime": "2020-06-02 12:00:00",
            "state": "FINISHED",
            "type": "ADDRESS_BOOK_SOURCE",
            "channel": "SMS",
            "counters": {
              "totalCount": 1,
              "successCount": 1,
              "errorCount": 0
            },
            "externalId": "4A8F5B75-29ED-473B-7AA0-4FC4507A41280"
          }
        ]
      },
      "macros": [
        "Unsubscribe",
        "WebVersion"
      ]
    }
  ]
}