Addressbook
Содержание:
- Как установить сертификат
- GetAddressBook
- Работа с отписавшимися¶
- Работа с группами контактов¶
- Requests and Responses
- Теперь по Борщеву HTTPS
- Очереди астериска и AddressBook
- Описание¶
- Работа в системе: с чего начать
- Работа с отписавшимися¶
- OpenVPN: как это бывает
- Настройка устройства для доступа к сервисам Банка
- Описание¶
Как установить сертификат
- Для начала необходимо получить сертификат на сайте Центра Сертификации;
- Жмём ссылку получить;
- Далее система вам предложит войти с помощью логина с паролем от домена Sigma, вводим данные, жмём войти;
- Успешная авторизация инициирует скачивания сертификата на ваш компьютер. Необходимо скачать и инсталлировать все три сертификата, ссылки на которые будут на странице.
Если у вас затруднения с инсталляцией сертификатов, то в нижней части страницы есть ссылки на пошаговые инструкции по инсталляции для каждой ОС. После того, как устройство (компьютер) настроен, сертификаты инсталлированы, возвращаемся на главную страницу SuccessFactors. Здесь кликаем на войти, автоматически система затребует сертификат, указываем в открывшемся окне сертификат с вашим логином от Sigma. После этого вы войдёте в систему, и можно начинать работать.
GetAddressBook
SOAP 1.1
The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.
POST /Addressbook.asmx HTTP/1.1 Host: addressgetter.mynet.com Content-Type: text/xml; charset=utf-8 Content-Length: SOAPAction: "http://tempuri.org/GetAddressBook" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAddressBook xmlns="http://tempuri.org/"> <email></email> <password></password> </GetAddressBook> </soap:Body> </soap:Envelope>
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAddressBookResponse xmlns="http://tempuri.org/"> <GetAddressBookResult></GetAddressBookResult> </GetAddressBookResponse> </soap:Body> </soap:Envelope>
SOAP 1.2
The following is a sample SOAP 1.2 request and response. The placeholders shown need to be replaced with actual values.
POST /Addressbook.asmx HTTP/1.1 Host: addressgetter.mynet.com Content-Type: application/soap+xml; charset=utf-8 Content-Length: <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <GetAddressBook xmlns="http://tempuri.org/"> <email></email> <password></password> </GetAddressBook> </soap12:Body> </soap12:Envelope>
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <GetAddressBookResponse xmlns="http://tempuri.org/"> <GetAddressBookResult></GetAddressBookResult> </GetAddressBookResponse> </soap12:Body> </soap12:Envelope>
HTTP GET
The following is a sample HTTP GET request and response. The placeholders shown need to be replaced with actual values.
GET /Addressbook.asmx/GetAddressBook?=&= HTTP/1.1 Host: addressgetter.mynet.com
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: <?xml version="1.0"?>
HTTP POST
The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.
POST /Addressbook.asmx/GetAddressBook HTTP/1.1 Host: addressgetter.mynet.com Content-Type: application/x-www-form-urlencoded Content-Length: =&=
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: <?xml version="1.0"?>
Работа с отписавшимися¶
Unsubscribed GET
https://integrationapi.net/addressbook/v2/Unsubscribed?TaskId={TaskId}
Параметры запроса:
Параметр | Тип данных | Описание | Обязательнй |
---|---|---|---|
TaskId | int | Идентификатор рассылки | Нет |
Возвращаемый результат — список записей UnsubscribedDto
Параметр | Тип данных | Описание |
---|---|---|
string | Email адрес | |
DateTime | DateTime | Дата и время добавления |
Reason | string | Причина отписки |
TaskId | int | Идентификатор рассылки |
Пример ответа:
{ "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" }
Работа с группами контактов¶
ContactGroups GET (all)
https://integrationapi.net/addressbook/v2/ContactGroups
Метод возвращает список всех групп контактов пользователя.
Возвращаемый результат — список объектов типа ContactGroupDto.
Возвращаемый результат — список записей ContactGroupDto
Параметр | Тип данных | Описание |
---|---|---|
ContactGroupId | int | Идентификатор группы |
Name | string | Имя группы |
Description | string | Описание группы |
CreatedDate | DateTime | Дата создания |
ContactsCount | int | Количество контактов в группе |
Пример ответа:
{ "Result":[ { "ContactGroupId" 252, "Name" "snuk", "Description" "", "CreatedDate" "/Date(1426504354337-0000)/", "ContactsCount" 3 }, { "ContactGroupId" 331, "Name" "zzzzzzz04.02.2016 16:49:35", "Description" "AB api intgration test", "CreatedDate" "/Date(1454582978323-0000)/", "ContactsCount" } ], "Code" "ok", "Description" "ok" }
ContactGroups GET
https://integrationapi.net/addressbook/v2/ContactGroups/{ContactGroupId}
Метод возвращает группу по идентификатору. В качестве Result возвращается объект ContactGroupDto, описание см. выше.
Параметры запроса
Параметр | Тип данных | Описание | Обязательнй |
---|---|---|---|
ContactGroupId | int | Идентификатор группы (предаётся в url) | Да |
Пример ответа:
{ "Result":{ "ContactGroupId" 332, "Name" "new group", "Description" "best new group", "CreatedDate" "/Date(1454587881407-0000)/", "ContactsCount" }, "Code" "ok", "Description" "ok" }
ContactGroups POST
https://integrationapi.net/addressbook/v2/ContactGroups
Метод добавляет новую группу контактов. Если группа была успешно добавлена, возвращается код «ok» и http код 201. Метод возвращает идентификатор группы ContactGroupId в качестве Result.
Параметры запроса
Параметр | Тип данных | Описание | Обязательнй |
---|---|---|---|
Name | string | Имя группы | Да |
Description | string | Описание группы | Нет |
Пример запроса:
{ "Name""new group", "Description""best group" }
Пример ответа:
{ "Result" 332, "Code" "ok", "Description" "ok" }
ContactGroups PUT
https://integrationapi.net/addressbook/v2/ContactGroups/{ContactGroupId}
Метод обновляет имя и описание группы, затирая старые значения, возвращается только стандартный ответ, без поля Result.
Параметры запроса
Параметр | Тип данных | Описание | Обязательнй |
---|---|---|---|
ContactGroupId | int | Идентификатор группы (передаётся в url) | Да |
Name | string | Имя группы | Да |
Description | string | Описание группы | Нет |
Пример запроса:
{"Name""new group","Description""best new group"}
Пример ответа:
{ "Code" "ok", "Description" "ok" }
Requests and Responses
URL | Action Description | Success HTTP Status Code |
---|---|---|
/address_book.json | ||
/address_book.json | ||
/address_book/registered_users.json |
Upload address book
Upload address book. Using this API you can actually do 4 things:
- Upload fresh address book (overwrite the previous one)
- Upload new contacts
- Update existing contacts
Parameters
Param | Required | Type | Value Example | Description |
---|---|---|---|---|
contacts | Yes | Hash | {‘name’:’Frederic Cartwright’, ‘phone’: ‘8879108395’} | Contains array of contact hashes. Each contact can contain 3 keys: name: contact name. String (required only for create/update), min 1 max 255 symbols. phone: contact phone. String (required), min 10 max 15 symbols. destroy: used in a case of contact destroy. Integer (not required, possible value 1). |
force | No | Integer | 1 | Defines force rewrite mode. If set 1 then all previous contacts for device context will be replaced by new ones. |
udid | No | String | D337E8A4-80AD-8ABA-9F5D-579EFF6BACAB | User’s device identifier. If specified all operations will be in this context. Max length 64 symbols. If not — it means a user has one global address book across all his devices. |
Request
curl -X POST \ -H "Content-Type: application/json" \ -H "QB-Token: cf5709d6013fdb7a6787fbeb8340afed8aec4c69" \ -d '{"contacts": , "force": 1, "udid": "A337E8A4-80AD-8ABA-9F5D-579EFF6BACAB"}'' \ https://api.quickblox.com/address_book.json
Response
{ "deleted" , "rejected" { "5" "Invalid fields set" , "6" "Length of 'phone' field should be min: 10 and max: 15." , "8" "Length of 'name' field should be min: 1 and max: 255." }, "created" 4, "updated" 1 }
Parameters
Param | Required | Type | Value Example | Description |
---|---|---|---|---|
udid | No | String | D337E8A4-80AD-8ABA-9F5D-579EFF6BACAB | User’s device identifier. If specified all operations will be in this context. Max length 64 symbols. If not — it means a user has one global address book across all his devices. |
Request
curl -X GET \ -H "Content-Type: application/json" \ -H "QB-Token: cf5709d6013fdb7a6787fbeb8340afed8aec4c69" \ https://api.quickblox.comaddress_book.json
Response
{ "phone" "6278336065", "name" "Frederic Cartwright" }, { "phone" "72783360345", "name" "John Samson" }
Parameters
Param | Required | Type | Value Example | Description |
---|---|---|---|---|
udid | No | String | D337E8A4-80AD-8ABA-9F5D-579EFF6BACAB | User’s device identifier. If specified all operations will be in this context. Max length 64 symbols. If not — it means a user has one global address book across all his devices. |
compact | No | Integer | 1 | Specifies whether to return only users’ id+phone fields. If 0 — will return all user’s fields. |
Request
curl -X GET \ -H "Content-Type: application/json" \ -H "QB-Token: cf5709d6013fdb7a6787fbeb8340afed8aec4c69" \ https://api.quickblox.comaddress_bookregistered_users.json
Response
{ "items" { "user" { "id" 87, "full_name" "John Partizan", "email" "john@domain.com", "login" "Kitty", "phone" "7665891", "website" "https://partizan.com", "created_at" "2012-03-20T08:47:34Z", "updated_at" "2012-05-09T08:25:33Z", "last_request_at" "2012-05-08T13:07:37Z", "external_user_id" 158, "1346987743", "545878645453", 23487743, "blob_id" null, "custom_data" null, "user_tags" "hello, world, hey" } }, ... }
Теперь по Борщеву HTTPS
- Очевидно, что на своей стороне вы можете только сгенерировать приватный ключ и запрос на подпись сертификата.
- При генерировании запроса в качестве Common Name обязательно нужно указывать ServerName вашего виртуального хоста и все алиасы, которые вы пропишете для него в конфигурации веб-сервера. Например, domain.tld и www.domain.tld, хотя «www» CA обычно сами добавляют при выпуске сертификатов. Чаще всего можно указать просто *.domain.tld (чтобы запросить так называемый wildcard certificate), но возможно ли это, нужно узнавать у конкретного CA, а также четко понимать последствия такого решения. Как правило, общедоступные CA не дают в качестве алиаса использовать IP-адрес.
- При генерировании запроса не стоит указывать challenge password, иначе вам придется вводить его вручную при каждом рестарте веб-сервера.
- Обычно общедоступные CA — это маститые конторы вроде Comodo,
Symantecи GoDaddy. Выпуск сертификата стоит денег, а хорошего сертификата — много денег. Впрочем, помимо них относительно недавно существует Let’s Encrypt — бесплатный проект, которому склонны доверять многие, но я бы очень хорошо подумал, какие ресурсы и при каких обстоятельствах защищать их сертификатами. - Эти ребята договорились с другими ребятами таким образом, что последние предустанавливают сертификаты (публичные части ключей, т.е. ca.crt из прошлого примера) этих CA в свои браузеры. То есть о PKI как таковой речи быть не может. Просто все договорились верить определенным компаниям. Это не плохо, так как HTTPS в конечном итоге нужен для шифрования трафика, а шифровать его можно и самоподписанной парой ключей. Скорее, тут вопрос престижа, чтобы не светить на весь интернет предупреждением о просроченном/недействительном сертификате.
- Некоторые особо одаренные CA предлагают для удобства сгенерировать приватный ключ и CSR за вас. Этого делать не надо. Надеюсь, понятно, почему.
- О сроке действия сертификатов. Всегда нужно заранее продумать систему их своевременного обновления. Особенно это актуально для сертификатов от Let’s Encrypt, срок действия которых составляет всего 3 месяца (на момент написания).
- И о договоренностях между «этими ребятами». Как оказалось после давешней фееричной истории с Google и Symantec, теперь нужно уметь подстелить соломки и на такой «веселый» случай.
Очереди астериска и AddressBook
Наверное каждый сталкивался с ситуацией потери Важного клиента. Когда клиент звонит в компанию попадает в очередь без высшего приоритета и ожидает на линии 5, а то и больше минут
Чтобы исправить такую ситуацию было решено разработать систему. Которая будет определять насколько важен клиент. Если такой находится, то вызов будет направляться в очередь с высшим приоритетом.
Установка и настройка приложения Addressbook
Поискав на просторах интернета, был найден простой и удобный интерфейс телефонной книги, реализованный на базе php>= 5.2 и Mysql
Установка Addressbook
1.Приступим к установке веб приложения:
-
- Перейдем в корневую директорию Apache, в нашем примере — это
Описание¶
Сервис представляет собой удобный интерфейс для управления списками контактов адресной книги и получения списка отписавшихся
от рассылок.
Список методов
Набор методов для работы с группами контактов — 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 | Получение диапазона контактов по телефону или почте |
/Contacts/{ContactId} | GET | Получение контакта с подробной информацией |
/Contacts | POST | Создание контакта |
/Contacts/{ContactId} | PATCH | Редактирование контакта |
/Contacts/{ContactId} | DELETE | Удаление контакта |
Набор методов для работы с отписавшимися — Unsubscribed.
Ресурс | Метод | Описание |
---|---|---|
/Unsubscribed?TaskId={TaskId} | GET | Получение диапазона отписавшихся по рассылке |
/Unsubscribed | GET | Получение диапазона отписавшихся |
Запрос к API состоит из следующих элементов:
- Основного URL запроса: https://integrationapi.net/addressbook/v2
- Ресурса, например: /Contacts
- Параметров запроса в кодировке UTF-8.
Сервис позволяет передавать параметры в следующих форматах:
XML, JSON, JSV, CSV.
Авторизация
Для доступа к сервису необходимо пройти авторизацию.
Сервис поддерживает базовую авторизацию через заголовок Authorization
(https://en.wikipedia.org/wiki/Basic_access_authentication):
Authorization: Basic dGVzdGVyOjExMTExMQ==
В заголовке необходимо передать логин и пароль из ЛК (https://my.devinotele.com) в формате login:password в base64 кодировке.
Ответ API состоит из 2х частей:
- Код с описанием — эта часть присутствует во всех ответах.
- 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.
Работа в системе: с чего начать
Чтобы начать пользоваться системой, необходимо разово настроить систему на своём компьютерном устройстве, инсталлировать сертификат безопасности. В том случае, если у вас на компьютере уже установлен почтовый клиент @sberbank, то перед тем, как настраивать устройство, нужно кликнуть по баннеру войти на странице входа sf sberbank. Если при этом сертификат не найден или выдаёт система ошибку, то необходимо сделать полную настройку устройства, которая заключается в том, что пользователь должен получить сертификат и инсталлировать его.
Важно! Для получения сертификата пользователь должен иметь действую учётку домена Sigma
Работа с отписавшимися¶
Unsubscribed GET
https://integrationapi.net/addressbook/v2/Unsubscribed?TaskId={TaskId}
Параметры запроса:
Параметр | Тип данных | Описание | Обязательнй |
---|---|---|---|
TaskId | int | Идентификатор рассылки | Нет |
Возвращаемый результат — список записей UnsubscribedDto
Параметр | Тип данных | Описание |
---|---|---|
string | Email адрес | |
DateTime | DateTime | Дата и время добавления |
Reason | string | Причина отписки |
TaskId | int | Идентификатор рассылки |
Пример ответа:
{ "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" }
OpenVPN: как это бывает
- a.ivanov-office.key — его приватный ключ, самая мякотка, которую нужно хранить как зеницу ока и никому не показывать (аналог в SSH — файл id_rsa);
- a.ivanov-office.csr — Certificate Signing Request, запрос на подпись сертификата, в котором описано, для кого нужно выписать сертификат, сгенерирован на основе предыдущего файла, чтобы не «палить» приватный ключ (для работы самого OpenVPN нафиг не нужен);
- a.ivanov-office.crt — вожделенный сертификат, который он предъявляет OpenVPN серверу, чтобы тот разрешил ему подключение (по сути это публичная часть ключа);
- ca.crt — сертификат нашего CA, чтобы OpenVPN клиент предъявил его серверу, чтобы тот сопоставил его с приватной частью, которая лежит у него, и убедился, что сертификат подписывал именно он, а не кто-то другой. «Деталька», которая обозначает принадлежность OpenVPN клиента Иванова А.А. к PKI, в которой работает сервер.
Настройка устройства для доступа к сервисам Банка
Настройка вашего оборудования заключается в получении и установке сертификатов.
Для этого Вам необходима действующая учётная запись в домене Sigma.
Установить сертификаты Банка на iPhone/iPad
1. Я не знаю, есть ли у меня учетная запись в домене Sigma. Как проверить её наличие?
Вы можете самостоятельно получить информацию о наличии учетной записи, используя портал «Лицо ДРУГа», выставить обращение по шаблону «Разблокировка/блокировка учетных записей» – «Уточнение статуса учетной записи».
2. У меня нет учетной записи в домене Sigma. Как мне её создать?
Для создания учетной записи в домене Sigma необходимо, используя портал «Лицо ДРУГа», выставить обращение на создание учетной записи в домене Sigma по шаблону «Программное обеспечение» – «Заявки на предоставление доступа к АС/ИР» – «Заявка на заведение учетной записи в домене» – «Заявка на доступ — Домен Sigma (пользователи Интернет)».
3. Не помню (не знаю) логин учетной записи в домене Sigma. Как его узнать?
Для уточнения логина в домене Sigma, используя портал «Лицо ДРУГа», Вам необходимо выставить обращение по шаблону «Разблокировка/блокировка учетных записей» – «Уточнение логина учетной записи» (выбрать проблему «Неизвестен логин» и указать домен «Sigma»).
4. Не помню (не знаю) пароль к учетной записи в домене Sigma. Как его узнать?
Данная проблема решается сбросом пароля на первоначальный (транспортный), для этого Вам необходимо, используя портал «Лицо ДРУГа», выставить обращение по шаблону «Разблокировка/блокировка учетных записей» — «Разблокировка учетной записи в Домене Sigma (@sberbank.ru)».
5. Моя учетная запись в домене Sigma заблокирована. Как разблокировать?
Для разблокировки учетной записи в домене Sigma Вам необходимо, используя портал «Лицо ДРУГа», выставить обращение по шаблону «Разблокировка/блокировка учетных записей» — «Разблокировка учетной записи в Домене Sigma (@sberbank.ru)».
6. Ввожу корректные логин/пароль учетной записи в домене SIGMA, но войти на портал PKI не удается. Что делать?
a. Проверить наличие учетной записи в домене Sigma (см. пункт №1)
b. У Вас нет учетной записи в домене Sigma, необходимо создать учетную запись (см. пункт №2)
c. Вы вводите некорректный пароль, необходимо сбросить пароль от учетной записи в домене Sigma на первоначальный (транспортный) (см. пункт №4)
d. Ваша учетная запись заблокирована, необходимо разблокировать учетную запись в домене Sigma (см. пункт №5)
Описание¶
Сервис представляет собой удобный интерфейс для управления списками контактов адресной книги и получения списка отписавшихся
от рассылок.
Список методов
Набор методов для работы с группами контактов — 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 | Получение диапазона контактов по телефону или почте |
/Contacts/{ContactId} | GET | Получение контакта с подробной информацией |
/Contacts | POST | Создание контакта |
/Contacts/{ContactId} | PATCH | Редактирование контакта |
/Contacts/{ContactId} | DELETE | Удаление контакта |
Набор методов для работы с отписавшимися — Unsubscribed.
Ресурс | Метод | Описание |
---|---|---|
/Unsubscribed?TaskId={TaskId} | GET | Получение диапазона отписавшихся по рассылке |
/Unsubscribed | GET | Получение диапазона отписавшихся |
Запрос к API состоит из следующих элементов:
- Основного URL запроса: https://integrationapi.net/addressbook/v2
- Ресурса, например: /Contacts
- Параметров запроса в кодировке UTF-8.
Сервис позволяет передавать параметры в следующих форматах:
XML, JSON, JSV, CSV.
Авторизация
Для доступа к сервису необходимо пройти авторизацию.
Сервис поддерживает базовую авторизацию через заголовок Authorization
(https://en.wikipedia.org/wiki/Basic_access_authentication):
Authorization: Basic dGVzdGVyOjExMTExMQ==
В заголовке необходимо передать логин и пароль из ЛК (https://my.devinotele.com) в формате login:password в base64 кодировке.
Ответ API состоит из 2х частей:
- Код с описанием — эта часть присутствует во всех ответах.
- 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.