Devino AddressBook Api¶
Описание¶
Сервис позволяет управлять списками контактов адресной книги и получать списки отписавшихся от рассылок.
Внимание
Для использования сервиса необходимо обратиться к менеджеру компании либо в техническую поддержку.
Список методов¶
ContactGroups - набор методов для работы с группами контактов.
Ресурс | Метод | Описание |
---|---|---|
/ContactGroups | GET | Получение списка всех групп |
/ContactGroups/{ContactGroupId} | GET | Получение информации об одной группе |
/ContactGroups | POST | Добавление группы |
/ContactGroups/{ContactGroupId} | PUT | Редактирование группы |
/ContactGroups/{ContactGroupId} | DELETE | Удаление группы |
ContactsImport - набор методов для импорта контактов.
Ресурс | Метод | Описание |
---|---|---|
/ContactsImport | POST | Импорт контактов |
/ContactsImport/{ImportId}/Progress | GET | Прогресс добавления контактов в группу |
/ContactsImport/{ImportId}/Duplicates | DELETE | Удаление дубликатов из завершённого импорта |
Contacts - набор методов для работы с контактами.
Ресурс | Метод | Описание |
---|---|---|
/Contacts?Query={Key} | GET | Получение контактов по номеру телефона или email |
/Contacts/{ContactId} | GET | Получение подробной информации о контакте |
/Contacts | POST | Создание контакта |
/Contacts/{ContactId} | PATCH | Редактирование контакта |
/Contacts/{ContactId} | DELETE | Удаление контакта |
Unsubscribed - набор методов для работы с отписавшимися.
Ресурс | Метод | Описание |
---|---|---|
/Unsubscribed?TaskId={TaskId} | GET | Получение списка отписавшихся по ID рассылки |
/Unsubscribed | GET | Получение списка всех отписавшихся |
Запрос к API состоит из следующих элементов:
- Основного URL запроса: https://integrationapi.net/addressbook/v2
- Ресурса, например: /Contacts
- Параметров запроса в кодировке UTF-8
Сервис позволяет передавать параметры в следующих форматах: XML, JSON, JSV, CSV.
Авторизация¶
Для доступа к сервису необходимо пройти авторизацию. Сервис поддерживает базовую авторизацию через заголовок Authorization:
Authorization: Basic dGVzdGVyOjExMTExMQ==
В заголовке необходимо передать логин и пароль из личного кабинета в формате login:password
в кодировке base64.
Ответ API состоит из двух частей:
- Код с описанием - присутствует во всех ответах.
- Result - специфический для каждого запроса. Может отсутствовать.
{
"Result":{
...
},
"Code": "validation_error",
"Description": "user not found"
}
Код можно использовать для проверки статуса запроса. Набор кодов ограничен, но может быть расширен.
Описание предназначено для диагностики возможных проблем. Набор описаний зависит от конкретного метода. Описание может быть изменено в новой версии API без предупреждения о нарушении обратной совместимости.
Локализация¶
В поле Description может возвращаться локализованная строка с текстом ошибки. Для этого необходимо передать заголовок Accept-Language с нужным языком. В текущей версии поддерживаются русский и английский языки.
По умолчанию, если заголовок не передан или язык не найден среди доступных, возвращаются ответы на английском.
Accept-Language: ru-RU
Запрос диапазонов¶
Некоторые запросы предполагают возвращение только части данных. Для таких запросов необходимо передавать специальный заголовок:
Range: items=1-100
Оба предела диапазона включены в запрос. Диапазоны применяются в заголовках запросов:
- /Unsubscribed
- /Contacts?Query={Key}
При отсутствии заголовка данные запросы возвращают ошибку validation_error
с кодом HTTP 416 RequestedRangeNotSatisfiable
.
Список кодов ответов¶
Код | HttpStatusCode | Расшифровка |
---|---|---|
validation_error | 400-404, 416 | Ошибки валидации, авторизации или доступа. |
ok | 200, 201, 206 | Запрос выполнен успешно. |
internal_error | 500 | Внутренняя ошибка сервиса, можно повторить запрос позже. |
Работа с группами контактов¶
Получить все ContactGroups¶
https://integrationapi.net/addressbook/v2/ContactGroups
Метод возвращает список всех групп контактов пользователя.
Параметры ответа¶
Результат - список объектов ContactGroupDto:
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId | integer | ID группы контактов |
Name | string | Имя группы |
Description | string | Описание группы |
CreatedDate | DateTime | Дата создания группы |
ContactsCount | integer | Количество контактов в группе |
Пример ответа¶
{
"Result":[
{
"ContactGroupId": 252,
"Name": "snuk",
"Description": "",
"CreatedDate": "/Date(1426504354337-0000)/",
"ContactsCount": 3
},
{
"ContactGroupId": 331,
"Name": "Group",
"Description": "AB api integration test",
"CreatedDate": "/Date(1454582978323-0000)/",
"ContactsCount": 0
}
],
"Code": "ok",
"Description": "ok"
}
Получить ContactGroups по ID¶
https://integrationapi.net/addressbook/v2/ContactGroups/{ContactGroupId}
Метод возвращает группу контактов по ID.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId обязательный |
integer | ID группы. Передается в URL. |
Параметры ответа¶
Результат - объект ContactGroupDto:
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId | integer | ID группы контактов |
Name | string | Имя группы |
Description | string | Описание группы |
CreatedDate | DateTime | Дата создания группы |
ContactsCount | integer | Количество контактов в группе |
Пример ответа¶
{
"Result":{
"ContactGroupId": 332,
"Name": "new group",
"Description": "best new group",
"CreatedDate": "/Date(1454587881407-0000)/",
"ContactsCount": 0
},
"Code": "ok",
"Description": "ok"
}
Добавить ContactGroups¶
https://integrationapi.net/addressbook/v2/ContactGroups
Метод добавляет новую группу контактов. Если группа была успешно добавлена, возвращается результат ok
и код HTTP 201
. Метод возвращает ID группы ContactGroupId в качестве Result.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
Name обязательный |
string | Имя группы |
Description | string | Описание группы |
Пример запроса¶
{
"Name":"new group",
"Description":"best group"
}
Пример ответа¶
{
"Result": 332,
"Code": "ok",
"Description": "ok"
}
Обновить ContactGroups¶
https://integrationapi.net/addressbook/v2/ContactGroups/{ContactGroupId}
Метод обновляет имя и описание группы. При успешном результате возвращается стандартный ответ, без поля Result.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId обязательный |
integer | ID группы. Передается в URL. |
Name обязательный |
string | Имя группы |
Description | string | Описание группы |
Пример запроса¶
{
"Name":"new group",
"Description":"best new group"
}
Пример ответа¶
{
"Code": "ok",
"Description": "ok"
}
Удалить ContactGroups¶
https://integrationapi.net/addressbook/v2/ContactGroups/{ContactGroupId}
Метод удаляет группу. При успешном результате возвращается стандартный ответ, без поля Result.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId обязательный |
integer | ID группы. Передается в URL. |
Пример ответа¶
{
"Code": "ok",
"Description": "ok"
}
Работа с контактами¶
Импорт контактов¶
https://integrationapi.net/addressbook/v2/ContactsImport/
Метод валидирует пачку контактов и отправляет во внутреннюю очередь для добавления в базу. Если контакты были успешно добавлены в очередь, возвращается результат ok
и код HTTP 201
. Метод возвращает количество добавленных контактов в качестве Result.
Параметры валидации:
- наличие группы, в которую импортируются контакты.
- максимальное количество контактов - не более 10 000.
Контакты проверяются на:
- наличие хотя бы одного поля - номер телефона или email-адрес.
- валидность номера телефона, если он передан (непустая строка длиной от 8 до 15 символов, состоящая из цифр, в начале может быть
+
). - валидность email-адреса, если он передан.
- длина полей FirstName, MiddleName и LastName - не более 100 символов.
- длина полей ExtraField1 и ExtraField2 - не более 700 символов.
- пол, если передано значение отличное от
1
и2
, будет проставлено3
(пол неизвестен).
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId обязательный |
integer | ID группы, в которую импортируются контакты. |
ImportId | string | ID импорта |
ConvertDirectPhones | bool | Преобразовывать ли прямые номера в федеральные |
FillGender | bool | Заполнять ли автоматически пол контакта на основе его ФИО |
Contacts обязательный |
ContactDto[] | Список импортируемых контактов |
ContactDto¶
Параметр | Тип данных | Описание |
---|---|---|
PhoneNumber обязательный |
string | Номер телефона |
Email обязательный |
string | Email-адрес |
FirstName | string | Имя |
MiddleName | string | Отчество |
LastName | string | Фамилия |
Gender | integer | Пол контакта Возможные значения: |
DateOfBirth | DateTime | Дата рождения |
ExtraField1 | string | Дополнительное поле №1 |
ExtraField2 | string | Дополнительное поле №2 |
MergeFields | Dictionary | Пользовательский словарь ключ-значение |
Параметры ответа¶
Параметр | Тип данных | Описание |
---|---|---|
ImportId | string | ID импорта. Генерируется автоматически, если не был передан |
ValidContacts | integer | Количество валидных контактов |
RejectedContacts | array[RejectedContactDto] | Список невалидированных контактов |
InvalidPhoneNumbers | array[string] | Список невалидированных номеров телефонов |
InvalidEmails | array[string] | Список невалидированных email-адресов |
RejectedContactDto¶
Параметр | Тип данных | Описание |
---|---|---|
Contact | ContactDto | Параметры контакта |
ErrorCode | ContactValidationCode | Тип ошибки валидации |
ErrorDescription | string | Описание ошибки валидации |
DuplicatesCount | integer | Количество дублирований в изначальном запросе |
ContactValidationCode¶
Текст | Число | Описание |
---|---|---|
Ok | 0 |
Значение по умолчанию |
Duplicate | 1 |
Дубликат |
NoPhoneNoEmail | 2 |
Не передан телефон или email-адрес |
InvalidPhone | 3 |
Невалидный номер телефона |
InvalidEmail | 4 |
Невалидный email-адрес |
InvalidField | 5 |
Невалидное поле - ФИО или ExtraField1, ExtraField2 |
Пример запроса¶
{
"ContactGroupId" : 9731,
"ImportId" : "50210B41-1C4E-4E48-9837-FB382A9BAE01",
"ConvertDirectPhones" : true,
"FillGender" : false,
"Contacts" :[
{
"PhoneNumber": "",
"LastName": "Ivanov",
"FirstName": "Ivan",
"Email": "ivanov@ivanov.com",
"DateOfBirth": "/Date(1454533200000-0000)/"
},
{
"PhoneNumber": "+79001234567",
}
]
}
Пример ответа¶
{
"Result":{
"ImportId" : "50210B41-1C4E-4E48-9837-FB382A9BAE01",
"ValidContacts": 2,
"RejectedContacts":[],
"InvalidPhoneNumbers":[],
"InvalidEmails":[]
},
"Code": "ok",
"Description": "ok"
}
Прогресс импорта контактов¶
https://integrationapi.net/addressbook/v2/ContactsImport/{ImportId}/Progress
Метод возвращает прогресс добавления контактов в группу по ID импорта, который передаётся в URL.
Параметры ответа¶
Параметр | Тип данных | Описание |
---|---|---|
Uploaded | integer | Общее количество загруженных контактов через POST /ContactsImport |
Processed | integer | Количество контактов, добавленных в базу. |
Пример ответа¶
{
"Result":{
"Uploaded" : 1123456,
"Processed": 1100000
},
"Code": "ok",
"Description": "ok"
}
Удалить дубликаты контактов¶
https://integrationapi.net/addressbook/v2/ContactsImport/{ImportId}/Duplicates
Метод удаляет дубликаты по ID импорта, который передаётся в URL.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId обязательный |
integer | ID группы, в которую импортированы контакты. |
ImportId обязательный |
GUID | ID импорта |
Field | DuplicatesCheckField | Ключевое поле для проверки - email или номер телефона |
Scope | DuplicatesCheckScope | Область проверки на дубли |
Groups | array[integer] | Список групп для проверки |
Значения DuplicatesCheckField¶
Текст | Число | Описание |
---|---|---|
No | 0 |
Без проверки на дубли |
PhoneNumber | 1 |
Проверка на дубли по номеру телефона |
2 |
Проверка на дубли по email-адресу |
Значения DuplicatesCheckScope¶
Текст | Число | Описание |
---|---|---|
No | 0 |
Без проверки на дубли |
Import | 1 |
Проверка на дубли в рамках импорта |
Groups | 2 |
Проверка на дубли в переданных группах |
DuplicatesCheckScope является битовой маской. В данном параметре можно передавать сочетания значений - можно передать 3
, и проверка будет выполнена в рамках импорта и в переданных группах одновременно.
Параметры ответа¶
Параметр | Тип данных | Описание |
---|---|---|
InCurrentGroup | integer | Количество дублей в текущей группе |
InOtherGroups | integer | Количество дублей в других группах |
InCurrentImport | array[string] | Список дублей в текущем импорте |
Пример запроса¶
{
"ContactGroupId" : 9731,
"ImportId" : "50210B41-1C4E-4E48-9837-FB382A9BAE01",
"Field" : "Email",
"Scope" : 3,
"Groups" : [123, 345, 9731]
}
Пример ответа¶
{
"Result":{
"InCurrentGroup" : 34,
"InOtherGroups": 55,
"InCurrentImport": ["79251234567"]
},
"Code": "ok",
"Description": "ok"
}
Получить Contacts¶
https://integrationapi.net/addressbook/v2/Contacts?Query={Key}
Метод возвращает контакты по ключу. В качестве ключа может выступать email или номер телефона. Параметры ответа - список объектов ContactDto.
Также необходимо задать диапазон возвращаемых записей.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
Query обязательный |
string | Ключ для поиска контактов. Передается в URL. |
Параметры ответа¶
Метод возвращает список записей ContactDto:
Параметр | Тип данных | Описание |
---|---|---|
ContactId | long | ID контакта |
PhoneNumber | string | Номер телефона |
string | Email-адрес | |
FirstName | string | Имя |
MiddleName | string | Отчество |
LastName | string | Фамилия |
Gender | integer | Пол контакта Возможные значения: |
DateOfBirth | DateTime | Дата рождения |
ExtraField1 | string | Дополнительное поле №1 |
ExtraField2 | string | Дополнительное поле №2 |
MergeFields | Dictionary | Пользовательский словарь ключ-значение |
Пример ответа¶
{
"Result": [
{
"ContactId": 1,
"PhoneNumber": "",
"LastName": "Snuk",
"MiddleName": "Snuk",
"FirstName": "Snuk",
"Email": "xx@gmail.com",
"Gender": 3,
"DateOfBirth": "/Date(1454533200000-0000)/",
"ExtraField1": "ddddddddddddddddd",
"ExtraField2": "cccccccccccccccc",
"ContactGroupId": 252
},
{
"ContactId": 100005,
"PhoneNumber": "",
"LastName": "sdfsdfdsf",
"MiddleName": "sfddsf",
"FirstName": "sdfdsfds",
"Email": "yy@list.ru",
"Gender": 3,
"ContactGroupId": 252
}
],
"Code": "ok",
"Description": "ok"
}
Получить контакты¶
https://integrationapi.net/addressbook/v2/Contacts/{ContactId}
Метод возвращает контакт по ID, в качестве Result возвращается объект ContactDto.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactId обязательный |
integer | ID контакта. Передается в URL. |
Пример ответа¶
{
"Result":{
"ContactId": 1,
"PhoneNumber": "",
"LastName": "Snuk",
"MiddleName": "Snuk",
"FirstName": "Snuk",
"Email": "xx@gmail.com",
"Gender": 3,
"DateOfBirth": "/Date(1454533200000-0000)/",
"ExtraField1": "ddddddddddddddddd",
"ExtraField2": "cccccccccccccccc",
"ContactGroupId": 252
},
"Code": "ok",
"Description": "ok"
}
Добавить контакты¶
https://integrationapi.net/addressbook/v2/Contacts
Метод создает контакт. Если контакт был успешно создан, возвращается код ok
и код HTTP 201
. В качестве Result возвращается ID контакта.
Контакты проверяются на:
- наличие хотя бы одного поля - номер телефона или email-адрес.
- валидность номера телефона, если он передан (непустая строка длиной от 8 до 15 символов, состоящая из цифр, в начале может быть
+
). - валидность email-адреса, если он передан.
- длина полей FirstName, MiddleName и LastName - не более 100 символов.
- длина полей ExtraField1 и ExtraField2 - не более 700 символов.
- пол, если передано значение отличное от
1
и2
, будет проставлено3
(пол неизвестен). - наличие группы, в которую добавляется контакт.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
PhoneNumber обязательный |
string | Номер телефона |
Email обязательный |
string | Email-адрес |
FirstName | string | Имя |
MiddleName | string | Отчество |
LastName | string | Фамилия |
Gender | integer | Пол контакта Возможные значения: |
DateOfBirth | DateTime | Дата рождения |
ExtraField1 | string | Дополнительное поле №1 |
ExtraField2 | string | Дополнительное поле №2 |
MergeFields | Dictionary | Пользовательский словарь ключ-значение |
ContactGroupId обязательный |
integer | ID группы, которой принадлежит контакт. |
Пример запроса¶
{
"PhoneNumber": "",
"LastName": "Snuk",
"MiddleName": "Snuk",
"FirstName": "Snuk",
"Email": "zzz@gmail.com",
"Gender": 3,
"DateOfBirth": "/Date(1454533200000-0000)/",
"ExtraField1": "ddddddddddddddddd",
"ExtraField2": "cccccccccccccccc",
"ContactGroupId": 252
}
Пример ответа¶
{
"Result": 100013,
"Code": "ok",
"Description": "ok"
}
Обновить контакты¶
https://integrationapi.net/addressbook/v2/Contacts/{ContactId}
Метод обновляет контакт.
Информация
PATCH по идеологии аналогичен PUT, с той лишь разницей, что PUT полностью заменяет ресурс, а PATCH меняет только те параметры, которые переданы.
Валидация идентична методу POST /Contacts. Исключается только проверка наличия группы контакта, так как группу менять нельзя. Возвращается только стандартный ответ, без поля Result.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactId обязательный |
long | ID контакта. Передается в URL. |
PhoneNumber обязательный |
string | Номер телефона |
Email обязательный |
string | Email-адрес |
FirstName | string | Имя |
MiddleName | string | Отчество |
LastName | string | Фамилия |
Gender | integer | Пол контакта Возможные значения: |
DateOfBirth | DateTime | Дата рождения |
ExtraField1 | string | Дополнительное поле №1 |
ExtraField2 | string | Дополнительное поле №2 |
MergeFields | Dictionary | Пользовательский словарь ключ-значение |
Пример запроса¶
{
"PhoneNumber": "",
"LastName": "Snuk",
"MiddleName": "Snuk",
"FirstName": "Snuk",
"Email": "zz@gmail.com",
"Gender": 3,
"DateOfBirth": "/Date(1454533200000-0000)/",
"ExtraField1": "ddddddddddddddddd",
"ExtraField2": "cccccccccccccccc"
}
Пример ответа¶
{
"Code": "ok",
"Description": "ok"
}
Удалить контакты¶
https://integrationapi.net/addressbook/v2/Contacts/{ContactId}
Метод удаляет контакт. Возвращается только стандартный ответ, без поля Result.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
ContactId обязательный |
integer | ID контакта. Передается в URL. |
Пример ответа¶
{
"Code": "ok",
"Description": "ok"
}
Работа с отписавшимися контактами¶
Получить отписавшиеся контакты¶
https://integrationapi.net/addressbook/v2/Unsubscribed?TaskId={TaskId}
Метод возвращает список отписавшихся от email-рассылок. Можно получить список отписавшихся от определенной рассылки. Для этого предусмотрен параметр taskId.
Параметры ответа - список объектов типа UnsubscribedDto. Также необходимо задать диапазон возвращаемых записей.
Параметры запроса¶
Параметр | Тип данных | Описание |
---|---|---|
TaskId | integer | ID рассылки |
Параметры ответа¶
Результат - список объектов UnsubscribedDto:
Параметр | Тип данных | Описание |
---|---|---|
string | Email контакта | |
DateTime | DateTime | Дата и время добавления контакта |
Reason | string | Причина отписки |
TaskId | integer | ID рассылки |
Пример ответа¶
{
"Result":[
{
"Email": "generated_1@generated.com",
"DateTime": "/Date(1439219917910-0000)/",
"Reason": "Другая причина",
"TaskId": 133696
},
{
"Email": "generated_11@generated.com",
"DateTime": "/Date(1439219917910-0000)/",
"Reason": "Скучные рассылки",
"TaskId": 133696
}
],
"Code": "ok",
"Description": "ok"
}