Используемые термины и сокращения
Документация по интеграции с системой RCS состоит из двух частей: руководство пользователя (настоящий документ) и ссылочная документация.
Знакомство с механизмами интеграции с системой RCS рекомендуется начинать с прочтения руководства пользователя и только потом переходить к ссылочной документации.
В настоящем документе описаны механизмы обмена данными между системой RSC и информационными системами подписчиков (дилеров). Документ описывает как использовать API в целом, рассказывает о принципах, заложенных в API и о моделях поведения.
Ссылочная документация построена с помощью набора инструментов Swagger на базе OpenAPI Specification (OAS) и доступна по следующим ссылкам:
Ссылка | Описание |
---|---|
Third-Party API endpoints | Ссылочная документация по точкам входа Third-Party API. |
DMS - Dealers | Ссылочная документация по точкам входа DMS API Дилеры. |
DMS - Car catalogue | Ссылочная документация по точкам входа DMS API Автомобили для тест-драйва и кредита. |
DMS - Requests | Ссылочная документация по точкам входа DMS API Заявки. |
DMS - Users & vehicles | Ссылочная документация по точкам входа DMS API Пользователи и автомобили пользователей. |
DMS - Loyalty programme | Ссылочная документация по точкам входа DMS API Программа лояльности. |
DMS - Service maintenance | Ссылочная документация по точкам входа DMS API История техобслуживания и ремонта. |
Важно: во всем, что касается сигнатур точек входа, передаваемых и возвращаемых параметров, ссылочная документация является приоритетной.
В настоящем разделе приведены аббревиатуры и термины, используемые в документе.
API (Application Program Interface) – интерфейс прикладных программ.
RCS (Remoto Cloud Services) – экземпляр облачного сервиса Bright Box, предназначенный для:
Third-Party API – интеграционные веб-службы, развёртываемые на стороне RCS.
DMS (Dealer Mobility Service) – веб-служба со стандартизованным API, предоставляемым дилером для обмена данными по инициативе RCS.
Подписка – сущность в системе RCS, набор параметров, представляющий B2B клиента Bright Box и его настройки для корректного функционирования порталов и мобильного приложения клиента.
Подписчик – сторона (клиент) в договоре с Bright Box на использование RCS. В системе RCS представлен подпиской.
Клиент – подписчик, дилер, использующий службы Third-Party API RCS и/или предоставляющий службы DMS API для обмена данными с RCS.
NSC (National Sales Company) – национальная торговая компания. Это субъект в организационной иерархии подписчика, который определяет контент, чувствительный к локализации, и задаёт локализацию контента для нижестоящих (субординированных) субъектов (дилерских сетей и дилеров). В системе RCS является подобъектом подписки.
Дилерская сеть – субъект в организационной иерархии подписчика. В системе RCS является подобъектом NSC.
Дилер – дилер в составе организационной структуры подписчика, дилерский центр в составе организационной структуры подписчика. В системе RCS является подобъектом дилерской сети.
МП (Remoto) – мобильное приложение клиента (подписчика), предоставляющее услуги Connected Car и услуги дилеров с помощью RCS (включая устройство Remoto).
Пользователь – пользователь мобильного приложения Remoto, выступающий потребителем услуг Connected Car и услуг дилера.
DTO (Data Transfer Object) – это лишённый всякого поведения тип объекта (класс), служащий контейнером для данных при их передаче (включая сериализацию и десериализацию) из одной системы в другую.
Оперативные данные/real-time данные от устройств – сообщения и данные телеметрии, получаемые в режиме реального времени с помощью средств телематики от устройств Remoto, установленных в транспортных средствах.
ПУ (Панель управления) – один из порталов RCS. Предназначен для управления данными подписки, включающей в себя всю организационную структуру: NSC, дилерские сети и дилерские центры.
Устройство Remoto – физическое устройство, устанавливаемое на автомобиль. Предназначено для удаленного управления автомобилем и/или для отслеживания состояния автомобиля и передачи телеметрической информации через систему RCS.
Автомобиль с телематикой (connected car) – автомобиль с установленным устройством Remoto и подключенный к системе RCS.
Автомобиль без телематики (unconnected car) – автомобиль без установленного устройства Remoto, но зарегистрированный в системе RCS с целью получения услуг от дилера, таких как, получений новостей, специальных предложений, услуг по обслуживанию автомобиля, его ремонту и т. д.
RCC (Remoto Car Control) – это набор функций и сервисов Remoto, которые отвечают за удаленное управление автомобилем путем отправки ему команд.
OAS (OpenAPI Specification) – стандартный, не зависящий от языка интерфейс для построения RESTful API. Может использоваться для генерации ссылочной документации по API, клиентского и серверного кода для реализации API, тестирования и другими вариантами использования.
Swagger – набор инструментов для разработки и документирования API, базирующийся на OAS.
RCS использует два механизма интеграции с информационными системами подписчиков (дилеров):
Third-Party API – это интеграционные веб-службы, развёртываемые на стороне RCS. Приложение подписчика (дилера) обращается к методам Third-Party API, чтобы получить данные для синхронизации справочников, оперативные данные телеметрии, удаленно управлять автомобилем, выполняя команды на устройствах Remoto, или сообщить об изменении статуса информационных объектов, таких, например, как заявки пользователей на приобретение автозапчастей или прохождение тест-драйва.
Dealership Mobility Service (DMS) – это интеграционная веб-служба, развёрнутая на стороне подписчика (дилера) для обмена данными по инициативе системы RCS. RCS обращается к методам DMS API для синхронизации справочников, получения информации об оперативной деятельности подписчика (дилера), требуемой для удовлетворения потребностей пользователей.
Вся информация, приведенная в этом разделе, относится к обоим механизмам интеграции. Специфичные для одного из механизмов сведения будут отмечены явным образом: (Third-Party API) или (DMS API).
Оба API предназначены для взаимодействия «сервер-сервер», что обуславливает ряд архитектурных особенностей. В частности, основные API систем представлены в стиле REST: функции системы выставляются для клиента в виде набора ресурсов, над которыми можно выполнять операции посредством отправки запросов по протоколу HTTPS.
(Third-Party API) Оперативные данные от устройств предоставляются по протоколу AMQP 0-9-1 поверх TLS.
Для защиты трафика на транспортном уровне используются протоколы TLS 1.3. Не допускается использование незащищенного соединения.
Для защиты от несанкционированного доступа используется двусторонняя аутентификация с помощью сертификатов:
Аутентификация и авторизация клиента осуществляется по сертификату, использованному им при установлении соединения.
Практически все запросы к API являются авторизованными и требуют предоставления корректного клиентского сертификата. Лишь несколько запросов могут быть анонимными. Такая возможность явно обозначается в их спецификации. Следует иметь ввиду, что обращение к таким ресурсам в любом случае защищается протоколом TLS 1.3, но аутентификация в этом случае является односторонней, сервер не требует наличия клиентского сертификата. Тем не менее, в таких запросах может присутствовать сертификат.
Сертификат, указанный в запросе, должен быть корректным, действительным и соответствовать зарегистрированному клиенту.
(Third-Party API)
Сервер осуществляет разграничение прав доступа клиента к автомобилям на трех уровнях:
Предоставления доступа ко всем устройствам подписки. Клиент получает доступ ко всем автомобилям подписки. Эта возможность является свойством подписки и должна быть явно включена для клиента.
Список привязок автомобилей к клиентам. Клиент имеет доступ к автомобилю только при условии наличия такой привязки. С точки зрения клиента отсутствие привязки полностью аналогично отсутствию данных об автомобиле в БД сервера. При попытке выполнить запрос, оперирующий непривязанным к клиенту или отсутствующим в БД автомобилем, запрос не будет выполнен, и сервер вернет код ответа 404 Not Found
или 400 Bad Request
в зависимости от контекста (см. Общие форматы ответа).
Права, выданные клиенту, на операции, выполняемые с конкретным автомобилем. Привязка автомобиля к клиенту или предоставление доступа ко всем автомобилям подписки еще не означает, что клиент может выполнять с этим автомобилем любые операции. Сервер поддерживает гибкую настройку предоставляемых прав. При попытке выполнить операцию, на которую у клиента нет прав, с автомобилем, для которого есть привязка, запрос не будет выполнен, и сервер вернет код ответа 403 Forbidden
.
(Third-Party API)
Ссылочная документация по точкам входа: Third-Party API endpoints.
Swagger tag: Root
Клиент может определить, что он имеет дело именно с сервером RCS, отправив следующий анонимный запрос:
GET /
Запрос не требует указания поддерживаемой клиентом версии протокола (заголовок X-API-Version
может отсутствовать).
Получение ответа на запрос в ожидаемом формате, во-первых, подтверждает, что подключение выполнено к нужному серверу, а во-вторых, снабжает клиента информацией об используемой версии протокола.
Гарантируется, что для всех будущих версий протокола (включая обновление мажорной версии) формат ответа сервера при обращении к данному ресурсу будет обратно совместим с текущим форматом.
Выполнив запрос:
GET /parameters
клиент может запросить используемые сервером значения параметров протокола. Этот запрос уже требует авторизации и является версионируемым.
(Third-Party API)
Версии протокола нумеруются в формате X.Y. Изменение минорного компонента (Y) версии гарантирует обратную совместимость, мажорного (X) – не гарантирует. В случае мажорной версии 0 обратная совместимость не гарантируется даже при изменении минорного компонента.
Поддерживаемые сервером версии протокола клиент может определить по ответу на запрос GET /
. Отсутствие в списке записи для мажорной версии означает, что все семейство этих версий сервером не поддерживается, даже если поддерживается более старшая мажорная версия. Наличие записи для версии X.Y означает, что сервер поддерживает все версии протокола X.Z, где Z <= Y. Для мажорной версии 0 совместимость минорных версий не гарантируется. Это означает, что версия 0.Z поддерживается сервером только если явно присутствует в списке поддерживаемых протоколов.
При обращении к ресурсам REST клиент обязан явно указывать поддерживаемую им версию протокола в заголовке X-API-Version
. Заголовок поддерживается при обращении к любому ресурсу REST. Если версия протокола поддерживается, ответ сервера может быть представлен в формате более новой минорной версии в рамках той же мажорной, что не должно представлять проблем для клиента с учетом обратной совместимости (клиент должен просто игнорировать неизвестные ему поля). Если сервер не поддерживает указанную версию, он не выполнит запрос и вернет код 400 Bad Request
. Содержимое ответа при этом будет представлено в формате, соответствующем коду ошибки UNSUPPORTED_VERSION
(см. Общие форматы ответа). Гарантируется, что для всех будущих версий протокола (включая обновление мажорной версии) формат ответа сервера в этой ситуации будет обратно совместим с текущим форматом.
Исключением является запрос к ресурсу для чтения информации о сервере (GET /
), при обращении к которому указание поддерживаемой клиентом версии протокола (заголовка X-API-Version
) не требуется. Однако, если версия все же указана, то ресурс будет обрабатывать ее также, как и любой другой: проверять совместимость и поддерживаемость версии с возможным возвратом кода ошибки.
REST API поддерживает обмен данными в формате JSON. Соответственно, ответы сервера имеют заголовок Content-Type
, установленный в значение application/json
. Запросы клиента, подразумевающие передачу содержимого, также должны иметь такое значение заголовка Content-Type
. Если клиент не передает заголовок Content-Type
в запросе с содержимым, значение application/json
подразумевается. Передача заголовка Content-Type
с другим значением приведет к отказу в выполнении запроса с кодом ответа 415 Unsupported Media Type
.
В случае ожидания ответа на запрос, клиент может передать заголовок Accept
со значением application/json
, что не является обязательным. Если передан заголовок Accept
, не допускающий формат application/json
, сервер не будет выполнять запрос, вернув код ответа 406 Not Acceptable
.
Перечисленные здесь коды и форматы ответа являются общими для всех запросов к API. Они допускаются для всех запросов, помимо тех, что явно описаны в спецификациях конкретных запросов.
В данном разделе приводятся типовые ответы, явно генерируемые прикладным уровнем сервера API. Естественно, веб-инфраструктура (веб-сервер, прокси-серверы, шлюзы и т. д.) может выполнять генерацию других, допустимых HTTP протоколом, ответов, не описанных здесь. Кроме того, инфраструктурные модули могут генерировать ответы с теми же кодами, что описаны здесь, но с отличающимся содержимым. Подобные ситуации не отражены в данной спецификации.
Запрос сформирован неверно и не прошел валидацию на сервере.
Сервер не выполнил каких-либо операций, связанных с запросом.
Формат тела ответа:
{
// Информация об ошибке.
"error": {
// Технический код ошибки.
"code": "<string>",
// Человекочитаемое описание ошибки.
"message": "<string>",
// Техническое имя поля запроса, вызвавшего ошибку.
// Может не передаваться.
"source": "<string>"
}
}
Если конкретный запрос подразумевает какие-то особые правила валидации запроса, то эти случаи (с их техническими кодами) оговариваются отдельно в спецификации таких запросов. Следующие коды применимы к любым запросам, предполагающим отправку данных от клиента на сервер (в строке запроса, теле запроса или HTTP заголовке):
Клиент в заголовке X-API-Version
запросил версию протокола, которую сервер не поддерживает. Гарантируется, что для всех будущих версий протокола (включая обновление мажорной версии) формат ответа сервера в этой ситуации будет обратно совместим с текущим форматом.
{
// Информация об ошибке.
"error": {
// Технический код ошибки.
"code": "UNSUPPORTED_VERSION",
// Человекочитаемое описание ошибки.
"message": "<string>",
// Техническое имя поля запроса, вызвавшего ошибку.
// Может не передаваться.
"source": "X-API-Version"
}
}
Отсутствует обязательное поле. Код возврата также используется, если передается значение null
, когда оно не допустимо, или пустая строка (""
) для типов данных, представляемых в виде строки, но требующих значения.
{
"error": {
"code": "VALUE_REQUIRED",
...
}
}
Неверный формат данных поля (например, строка вместо числа и т. п.).
{
"error": {
"code": "INVALID_FORMAT",
...
}
}
Значение поля выходит за пределы допустимого диапазона. Следует иметь ввиду, что данный код не используется в тех случаях, когда ожидается положительное число, а передается 0 или отрицательное, или ожидается неотрицательное, а передается отрицательное. В указанных случаях используется предыдущий код (InvalidFormat
).
{
"error": {
"code": "OUT_OF_RANGE",
...
}
}
Размер значения поля (для строк и бинарных данных) выходит за пределы допустимого диапазона.
{
"error": {
"code": "INVALID_LENGTH",
...
}
}
В запросе указан идентификатор автомобиля, не существующий или не относящийся к текущему клиенту. Данный код подразумевает, что все идентификаторы автомобилей указаны в правильном формате. Иначе будет выдан ответ 400 Bad Request
с общим кодом “invalid_format
”.
{
// Информация об ошибке.
"error": {
// Технический код ошибки.
"code": "ILLEGAL_VEHICLE_ID",
// Человекочитаемое описание ошибки.
"message": "<string>",
// Техническое имя поля запроса, вызвавшего ошибку.
"source": "device_ids"
}
}
Сервер не смог выполнить аутентификацию клиента. См. раздел Аутентификация.
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Пользователь не имеет право выполнить одну или несколько операций, связанных с запросом.
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Ответ 404 Not Found
, а не 403 Forbidden
, может использоваться в случае запросов к ресурсам (в т. ч. на изменение), на которые у пользователя нет прав чтения.
Ресурс не существует или пользователь не имеет прав чтения на него (именно чтения, даже если осуществляется попытка выполнения другой операции).
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Предпринята попытка выполнения HTTP метода на ресурсе, не допускающем такой метод.
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Сервер не имеет возможности (из-за ограничений самого сервера или особенностей формата запрашиваемого ресурса) отдать клиенту ответ в одном из форматов, указанных в заголовке Accept
запроса.
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Сервер не может обработать запрос клиента, т. к. его (запроса) размер превышает допустимое ограничение.
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Сервер не имеет возможности (из-за ограничений самого сервера или особенностей формата запрашиваемого ресурса) принять от клиента запрос в формате, указанном в заголовке Content-Type
запроса.
Сервер не выполнил запуск каких-либо операций, связанных с запросом.
Тело ответа отсутствует.
Клиент отправил слишком много запросов за заданный промежуток времени. Для RCS это ограничение установлено в 5 запросов в секунду.
Тело ответа отсутствует.
Произошла внутренняя ошибка сервера.
Если ошибка была перехвачена прикладным уровнем, то клиенту может быть отправлен ответ в следующем формате:
{
// Информация об ошибке.
"error": {
// Внутренний тип ошибки.
"type": "<string>",
// Техническое описание ошибки.
"message": "<string>",
// Технический отладочный дамп.
// Может отсутствовать.
"trace": "<string>"
}
}
Однако, такой формат ответа не гарантируется, т. к., во-первых, такой ответ формируется только в отладочном режиме работы сервера, а во-вторых, ошибка может быть сформирована на более низком уровне (например, инфраструктурой веб-сервера). Таким образом, клиент может попытаться прочитать ответ и отобразить его в отладочных целях, например, в логе, однако не должен полагаться на обязательное наличие ответа в указанном формате.
В следующей таблице приведены обозначения типов данных, используемых в обоих механизмах интеграции:
Тип данных | Описание |
---|---|
string | Строка, кодированная по соответствующим правилам (экранирование и кодирование в JSON, кодирование в URL). |
boolean | Логическое значение true или false. |
integer | Целое число, соответствующее правилам JSON. |
double | Дробное число, соответствующее правилам JSON. |
guid или uuid | Строковое представление GUID в формате xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx . Регистр символов не учитывается. |
datetime | Дата/время в формате ISO-8601 без временной зоны, например 2005-08-09T18:31:42 . |
timespan | Временной интервал в формате HH:mm:ss , например 23:56:48 . |
base64 | Двоичные данные, закодированные в Base64. |
locale | Идентификатор локали в формате xx-XX , например en-US . |
enum<name> | Один из элементов перечисления (вариант допустимого значения) в строковом представлении. Элементы перечислений не требуют кодирования или экранирования символов как в составе JSON полей, так и в составе URL. |
Для эффективного обмена информацией между системой RCS и информационной системой подписчика (дилера) необходим механизм взаимной идентификации объектов интеграции. В качестве такого механизма предлагается обмен идентификаторами объектов между информационными системами. Так, в качестве объекта обмена идентификаторами используется DTO, который содержит два идентификатора – идентификатор объекта в системе RCS, обычно это id
и идентификатор объекта в информационной системе подписчика, обычно это sourceId
или source_id
. В некоторых случаях использования DTO такого типа, один из двух идентификаторов является обязательным. Подробную информацию об этом смотри в справочной документации по Third-Party API и DMS API.
Ссылочная документация по точкам входа: Third-Party API endpoints.
Swagger tag: Vehicles
Перечень «своих» автомобилей клиент может получить, выполнив запрос:
GET /vehicles
Возвращаемые данные содержат информацию, достаточную для сопоставления автомобилей с БД клиента и информацию о последнем состоянии автомобилей.
Информацию о конкретном автомобиле клиент может получить, выполнив запрос:
GET /vehicles/{vehicleId}
Автомобиль должен существовать в базе RCS и быть привязан к текущему клиенту или клиент должен иметь доступ ко всем автомобилям подписки через API.
Swagger tag: Health reports
Существует два вида запросов для получения диагностических данных:
запрос в режиме обзорный запрос (overview mode) используется с целью выявить все автомобили, у которых диагностировано наличие неисправностей (обзорный отчёт);
запрос в режиме фокусный запрос (fetch mode) используют, чтобы получить самый последний результат диагностики конкретного автомобиля (фокусный отчёт), содержащий DTC.
Чтобы получить обзорный отчёт, клиент должен выполнить два последовательных шага:
запустить задание на отбор диагностических отчётов, используя следующий метод точки входа:
POST /vehicle-health/reports
проверять состояние задания, пока оно не будет выполнено системой RCS с помощью следующего метода точки входа:
GET /vehicle-health/reports/{task-token}
Когда задание будет выполнено, то этот метод (помимо статуса задания) вернёт и готовый обзорный отчёт.
Полученный обзорный отчёт используется, чтобы сообщить автовладельцам о наличии в их автомобилях потенциальных или фактических неполадок и предложить им провести полную диагностику, в результате чего в RCS поступят диагностические отчёты, содержащие диагностические коды неисправностей (DTC).
С целью получить эти коды, клиент может использовать фокусный запрос. Для этого есть следующий метод точки входа:
GET /vehicles/{vehicleId}/health-reports
Получить от RCS диагностические отчеты, собранные от отдельного автомобиля с телематикой, можно выполнив запрос:
GET /vehicles/{vehicleId}/health-reports
Строка запроса может содержать параметры фильтра, определяющего набор возвращаемых диагностических отчётов.
Диапазон дат, указанных параметрами from
и to
не может захватывать более 7 календарных суток.
В возвращаемый ответ включаются отчёты независимо от типа (ФЛ, ЮЛ) и статуса (приняты или не приняты EULA, политики приватности и т. п.) пользователя.
Если среди параметров запроса присутствует severity=DTC_IS_PRESENT
, то в ответ включаются только диагностические отчёты по запросу (не включаются результаты самодиагностики, за исключением особых реализаций прошивки, допускающих чтение DTC на ходу).
Если в возвращенном отчете поле Trouble.status
заполнено, то поле maturity
заполняется вычисленным согласно стандарту ISO 14229-1 D.2 значением. Если ECU автомобиля не поддерживает стандарт ISO 14229-1 D.2 в этом отношении, то доверять значению поля maturity
нельзя.
Для запуска задания на отбор диагностических отчётов для автомобилей с телематикой, зарегистрированных (активированных) пользователями данного подписчика необходимо выполнить запрос:
POST /vehicle-health/reports
Строка запроса может содержать параметры фильтра, определяющего набор возвращаемых диагностических отчётов.
Диапазон дат, указанных параметрами from
и to
не может захватывать более 7 календарных суток.
В ответ на успешный запрос вместе с успешным статусом метод возвращает HTTP заголовок Location
, содержащий относительный (без схемы и хоста) URI для получения статуса запроса:
Location: /vehicle-health/reports/{task-token}
.
Для получения от RCS статуса отдельного (указанного его идентификатором) задания и самого отчёта (при условии его готовности), необходимо выполнить следующий запрос:
GET /vehicle-health/reports/{taskToken}
Параметр {taskToken}
указывает задание, запущенное с помощью запроса формирования обзорного отчета, обслуживаемого в асинхронном режиме.
В возвращаемый ответ включаются отчёты независимо от типа (ФЛ, ЮЛ) и статуса (приняты или не приняты EULA, политики приватности и т. п.) пользователя и типа отчёта (инициированные самим устройством или сервером RCS).
Swagger tag: Client notifications
Дилеры могут отправлять персональные предложения пользователям через push-уведомления и получать статистику по отправленным специальным и персональным предложениям.
Получить статистику по специальным и персональным предложениям, отправленным пользователям через уведомления можно выполнив запрос:
GET /client-notifications
Возвращаемые данные содержат информацию об отправленных специальных и персональных предложениях и отсортированы по времени запланированной отправки предложения в восходящем порядке (ascending).
Подписчик может направить одному или нескольким из своих пользователей уведомление, содержащее персональное предложение, с помощью запроса следующего вида:
POST /client-notifications/send
Для идентификации адресатов уведомления может быть использован по отдельности любой из параметров vehicle_ids
или user_phones
запроса (массив идентификаторов автомобилей, массив телефонов пользователей). Наличие одного из них обязательно.
Параметр запроса dealer_network
не является обязательным, но в случае наличия нескольких Dealer Network в одной NSC, отсутствия этого параметра вызовет ошибку 400 – Bad Request
.
Обслуживая запрос, RCS отражает в своём регистре возникновение персонального предложения в адрес указанного пользователя. Само сообщение регистрируется в очереди на отправку в указанное время.
Push-уведомление будет передано провайдеру для доставки пользователю в назначенное время.
Данные телеметрии с автомобилей, получаемые сервером RCS, могут быть получены клиентом в двух режимах:
Все данные телеметрии снабжаются уникальным значением ревизии (поле revision
). Значение приходит в пакетах real-time данных, присутствует в «холодных» данных, по нему возможна фильтрация «холодных» данных. Поле должно восприниматься клиентом как произвольная строка закрытого формата, в отношении которой, тем не менее, гарантируется следующее:
Поддержка ревизий позволяет реализовывать сценарии, для которых фильтрация по времени не подходит из-за недостаточной точности временных отсечек:
take
, а каждая следующая страница должна запрашиваться с фильтром по минимальной ревизии, равным максимальной ревизии ранее полученных данных.Swagger tag: Telemetry
Клиент может прочитать “холодные”, исторические, т. е. принятые, обработанные сервером RCS и сохраненные в серверной БД данные, отправив запрос:
GET /telemetry/history/{vehicleId}
Запрос позволяет ограничить диапазон времени, за который извлекаются данные, а также количество извлекаемых записей.
Для организации постраничного чтения данных, каждая следующая страница должна запрашиваться с фильтром по минимальной ревизии, равным максимальной ревизии ранее полученных данных.
Автомобиль должен существовать в базе RCS и быть привязан к текущему клиенту или клиент должен иметь доступ ко всем автомобилям подписки через API.
Swagger tag: Realtime queues
В режиме real-time поддерживается получение следующих видов сообщений:
Сами real-time данные передаются клиенту по протоколу AMQP 0-9-1. Полезная нагрузка передается в формате Google Protobuf 3. В целях безопасности, а также для возможности варьирования вариантов развертывания AMQP брокера, клиент сильно ограничен в использовании, собственно, протокола AMQP – доступны только команды, связанные непосредственно с чтением данных из уже существующих на брокере очередей. Подготовка же брокера с учетом актуального плана развертывания возлагается на сервисы REST API, посредством которых клиент имеет возможность запрашивать и управлять предоставлением ему сервиса передачи данных в real-time режиме.
Конкретные ресурсы REST API, используемые для управления сервисом, определяются видом запрашиваемых данных, однако общие принципы создания и использования real-time каналов идентичны. Общий алгоритм установления real-time канала и получения по нему данных следующий:
Клиент создает очередь сообщений для получения real-time данных выполняя POST запрос к соответствующему ресурсу REST API (Swagger tag: Telemetry):
POST /telemetry/monitor
В случае успешного выполнения запроса, создана real-time очередь, передача данных по ней успешно инициирована. Ответ содержит URI экземпляра AMQP брокера, а также имя очереди, из которой клиент может читать запрошенные данные.
HTTP заголовок ответа Location содержит относительный (без схемы и хоста) URI для обновления информации об очереди:
Location: /realtime-queues/{queue-name}
Клиент устанавливает соединение по протоколу AMQP 0-9-1 поверх TLS 1.3 по URI, полученному в ответе на запрос создания очереди. Подключение к брокеру должно выполняться с использованием того же клиентского сертификата, который использовался при «заказе» сервиса через REST API. Для аутентификации клиент должен выбирать SASL механизм “EXTERNAL” (на самом деле, только он и поддерживается брокером).
Клиент создает AMQP канал в рамках установленного соединения.
Клиент читает (через подписку или basic.get) сообщения из AMQP очереди, имя которой было возвращено в ответе на запрос ее создания. Права клиента на AMQP брокере ограничены чтением указанной очереди, однако в рамках этой операции клиент может использовать любые возможности, поддерживаемые протоколом AMQP 0-9-1, в том числе все виды подтверждений, отказов, транзакционность, QoS и прочее.
Время с момента создания очереди (п.1) до момента подключения к ней по AMQP (п.4) не должно превышать таймаута, определяемого параметром {REALTIME_TTL}
.
В случае ошибки на шагах 2-4, клиент должен обновить информацию об очереди, выполнив запрос:
GET /realtime-queues/{queue_name}
В случае успешного выполнения этого запроса, клиент повторяет попытку подключения с шага 2, используя обновленный URI AMQP брокера. Если запрос обновления информации об очереди вернул статус 404 Not Found
, это означает, что клиент не успел установить соединение с очередью за регламентированное время. В этом случае клиент предпринимает новую попытку открытия real-time канала с шага 1. При этом возможно неполучение данных, уже хранящихся в очереди или отправленных автомобилями с момента удаления очереди сервером до момента ее пересоздания. Клиент должен предпринять не менее трех попыток установления real-time канала, прежде чем констатировать сбой.
В случае обрыва уже установленного AMQP соединения по любой причине, клиент должен предпринять попытку восстановления соединения аналогично шагу 6, включая повторы неудачных попыток соединения. Время с момента обрыва соединения до его восстановления не должно превышать периода, определяемого параметром {REALTIME_TTL}
.
Созданная клиентом очередь имеет время жизни (TTL) в случае неактивности. Под неактивностью подразумевается отсутствие AMQP соединения, читающего данную очередь. Время жизни очереди определяется параметром {REALTIME_TTL}
. При соблюдении описанного выше регламента в части последовательности и таймаутов действий клиента по установлению и восстановлению real-time канала, сервер гарантирует клиенту передачу всех запрошенных real-time данных, полученных от автомобилей с момента создания очереди, без потерь, даже за время отсутствия установленного AMQP соединения. Если же очередь (в силу нарушения регламента) остается неактивной в течение времени, определенного параметром {REALTIME_TTL}
, сервер автоматически удаляет ее, что приведет к потере как уже хранящихся в очереди данных, так и тех, что получены после удаления очереди до ее пересоздания. Непереданные по real-time каналу данные, тем не менее, в любом случае обрабатываются и сохраняются сервером и могут быть получены клиентом путем выполнения соответствующего запроса к ресурсу REST API.
Сервер накладывает ограничение на количество очередей, созданных клиентом, определяемое параметром {REALTIME_MAX_QUEUES}
. Если клиент превышает это ограничение, попытка создания новой очереди завершится ошибкой 429 Too Many Requests
. Чтобы избежать этой ситуации клиенту рекомендуется явно удалять ненужные больше очереди запросом:
DELETE /realtime-queues/{queue_name}
Естественно, создание новой очереди также становится вновь доступным для клиента и при автоматическом удалении неактивных очередей по таймауту.
Swagger tag: Commands
Для запуска команды на устройстве Remoto, установленном в автомобиле, клиент должен выполнить запрос с данными команды в теле запроса:
POST /commands/send
Выполнение команд всегда осуществляется асинхронно. Успешное выполнение запроса означает успешность запуска команды, но не ее завершение. При успешном принятии команды сервер вернет ответ 202 Accepted
, указывающий на факт асинхронного выполнения запроса и содержащий необходимую информацию для отслеживания дальнейшего выполнения команды.
После запуска команды клиент может отслеживать ее завершение двумя способами:
Посредством pull модели, выполняя запросы:
GET /commands/statuses/{command_id}
и анализируя возвращаемую информацию.
Мониторингом выполнения команд в режиме real-time. Для этого клиенту достаточно открыть соответствующий real-time канал до запуска первой команды и отслеживать события завершения команд по мере их возникновения. Установление и использование real-time канала для мониторинга выполнения команд осуществляется по общим принципам. Для запроса real-time очереди используется запрос:
POST /commands/monitor
Запрос позволяет ограничить поток пересылаемых в real-time режиме данных конкретными автомобилями.
Устройство Remoto поддерживает специальный, сервисный, режим работы. В этом режиме устройство не принимает никаких команд, кроме выхода из сервисного режима. Данная возможность может использоваться для блокирования выполнения команд пользователем на время сервисного обслуживания автомобиля. Клиент имеет возможность включить или выключить сервисный режим через API посредством запроса:
POST /commands/special/switch-service-mode/send
HTTP заголовок ответа Location содержит относительный (без схемы и хоста) URI для обновления информации о выполнении команды:
Location: /commands/statuses/{command-id}
Процедура выполнения запроса и дальнейшего отслеживания перевода устройства в сервисный режим (выполнения соответствующей команды) аналогична процедуре запуска команд, описанной ранее.
Swagger tag: Car catalog
При оформлении заявок на тест-драйв или приобретение автомобиля в кредит в заявке указывается автомобиль из каталога, составленного дилером. RCS поддерживает два способа актуализации этих каталогов:
Это два альтернативных варианта актуализации каталогов. Реализовывать их оба не имеет смысла, но запрета на это нет.
Тем не менее, существует различие в этих двух способах:
первый способ позволяет актуализировать каталоги для заявок на тест-драйв и приобретение автомобиля в кредит;
второй способ актуализирует ТОЛЬКО каталог для заявок на тест-драйв.
Далее в этом разделе речь пойдет о первом способе – актуализация каталогов автомобилей для заявок по инициативе подписчика (дилера). Подробную информацию о втором способе см. Автомобили для тест-драйва и кредита (DMS API).
Каталог автомобилей для заявок представляет собой отдельный ресурс, которому соответствует путь /catalog/vehicles
.
Подписчик (дилер) может зарегистрировать новый автомобиль в каталоге или обновить информацию об уже зарегистрированном автомобиле с помощью следующего запроса:
PUT /catalog/vehicles
Если автомобиль с указанным идентификатором (source_Id
в запросе) уже зарегистрирован, то сведения о нём будут обновлены, в противном случае будет зарегистрирован новый.
Подписчик (дилер) может удалить автомобиль из каталога с помощью запроса вида:
DELETE /catalog/vehicles/{sourceId}
Исключение автомобиля из каталога того или иного дилера не влияет на уже существующие заявки. Пользователь может указать автомобиль в своей новой заявке, направляемой конкретному дилеру, только если этот автомобиль имеется в каталоге данного дилера.
Swagger tag: Users
Пользователь – пользователь мобильного приложения Remoto (автомобилист) и/или водитель автомобиля, выступающий потребителем услуг Connected Car и являющийся клиентом дилера.
Запрос
GET /users
позволяет получить от RCS перечень пользователей данного подписчика, зарегистрированных в указанном интервале времени. Диапазон дат задается с помощью фильтра в строке запроса.
Запрос
PUT /users
позволяет подписчику (дилеру) зарегистрировать нового пользователя в системе RCS или обновить информацию в профиле зарегистрированного ранее пользователя.
Идентификация пользователя производится по номеру мобильного телефона. Если профиль пользователя с указанным номером мобильного телефона найден, то он обновляется, в противном случае создаётся новый.
Swagger tag: Unconnected vehicles
Подписчик (дилер) может зарегистрировать или обновить профиль автомобиля без телематики некоторого пользователя используя запрос:
PUT /unconnected-vehicles
Подписчик может изменить значения отдельных полей профиля некоторого автомобиля без телематики используя запрос:
PATCH /unconnected-veicles
Строка запроса должна содержать один из параметров, идентифицирующих модифицируемый профиль автомобиля: id
(идентификатор автомобиля в системе RCS) или sourceId
(идентификатор автомобиля в системе подписчика). Дополнительную информацию о синхронизации идентификаторов см. Синхронизация идентификаторов.
Подписчик может удалить профиль некоторого автомобиля без телематики используя запрос:
DELETE /unconnected-vehicles
Строка запроса должна содержать один из параметров, идентифицирующих модифицируемый профиль автомобиля: id
(идентификатор автомобиля в системе RCS) или sourceId
(идентификатор автомобиля в системе подписчика). Дополнительную информацию о синхронизации идентификаторов см. Синхронизация идентификаторов.
Swagger tag: Loyalty programme
Подписчик (дилер) может зарегистрировать новую бонусную карту или обновить данные об имеющейся бонусной карте, предлагаемой в рамках программы лояльности дилера, используя запрос
PUT /loyalty-program/cards
Подписчик (дилер) может изменить состояние счёта бонусной карты (увеличить, уменьшить на указанную величину или установить новое значение остатка), используя запрос
PUT /loyalty-program/cards/operations
Swagger tag: Requests
Для организации визитов пользователей для технического обслуживания, ремонта своих автомобилей, выполнения тест-драйвов, дилер составляет расписание, согласно которому каждому посетителю назначается его собственное время посещения.
С помощью запросов вида
/requests/{requestType}/dealers/{dealerId}
ячейки этого расписания (time slots) могут быть переданы в RCS для отображения в мобильном приложении.
Время посещения применимо к заявкам следующих типов:
Тип заявки {requestType} |
Описание |
---|---|
ServiceMaintenance | Заявки на техобслуживание. |
Service | Заявки на ремонт. |
TestDrive | Заявки на тест-драйв. |
В поле object_id
тела запроса клиент может передать идентификатор автомобиля для тест-драйва, тогда ячейка расписания будет привязана к этому автомобилю. Следует подчеркнуть, что object_id
может фигурировать ТОЛЬКО в запросах на управление ячейками расписания для тест-драйва. И передавать object_id
надо только в том случае, если клиент хочет разделить ячейки расписания, регистрировать их в разрезе автомобилей. Таким образом, object_id
это sourceId
(идентификатор автомобиля в системе подписчика (дилера)) автомобиля для тест-драйва. Если у клиента нет необходимости регистрировать ячейки расписания в разрезе автомобилей, object_id
можно не передавать. Когда пользователь мобильного приложения записывается на тест-драйв, он сначала выбирает автомобиль, а потом время посещения и ему будут предложены ячейки расписания для выбора, именно на тот автомобиль, который он выбрал.
Запрос
POST /requests/{requestType}/dealers/{dealerId}
позволяет подписчику (дилеру) зарегистрировать новое время посещения (time slot).
Запрос
DELETE /requests/{requestType}/dealers/{dealerId}
позволяет удалить время посещения указанного дилера.
Swagger tag: Requests
При обслуживании зарегистрированных заявок их состояние может измениться: заявка может быть отклонена (отменена) или принята, о чём информационная система подписчика (дилера) может уведомить систему RCS.
Запрос
PUT /requests/{requestType}/state
позволяет подписчику (дилеру) сообщить системе RCS об изменении статуса заявки.
Поддерживаются следующие типы заявок:
Тип заявки {requestType} |
Описание |
---|---|
ServiceMaintenance | Заявки на техобслуживание. |
Service | Заявки на ремонт. |
TestDrive | Заявки на тест-драйв. |
Question | Вопросы и ответы. |
Insurance | Заявки на заключение договора страхования. |
Credit | Заявки на приобретение автомобиля в кредит. |
Call | Заявки на обратный звонок. |
CallStock | Заявки на обратный звонок из магазина автомобилей. |
Parts | Заявки на приобретение запчастей. |
Lifestyle | Заявки на приобретение коллекционных аксессуаров. |
ServicemanRating | Заявки на выставление оценки сотруднику. |
В теле запроса может быть указана новая дата и время посещения (request_time
). Это время должно быть в будущем и применимо к нескольким типам заявок, требующих указывать время посещения:
Тип заявки {requestType} |
Описание |
---|---|
ServiceMaintenance | Заявки на техобслуживание. |
Service | Заявки на ремонт. |
TestDrive | Заявки на тест-драйв. |
Swagger tag: Chat
Пользователь может отправить сообщение дилеру из мобильного приложения.
Дилер может ответить на сообщение пользователя используя следующий метод точки входа:
POST /chat
Ссылочная документация на точки входа: DMS - Dealers.
Swagger tag: Dealers
С помощью запроса
GET /dealers
RCS получает актуальный перечень дилеров данного подписчика, который далее используется для актуализации словаря дилеров в системе. Новые дилеры добавляются, измененные обновляются, отсутствующие в полученном списке НЕ удаляются из системы.
Для поиска дилеров в процессе актуализации их регистра система RCS использует идентификатор дилера в информационной системе подписчика (поле sourceId
в составе возвращаемого методом DTO).
Признак видимости дилера пользователям в мобильном приложении Remoto (поле isActive
в возвращаемом DTO) используется для «удаления» дилера из списка с помощью данного метода. False
означает исключение дилера из списка доступных для пользователя в мобильном приложении.
Для определения населённого пункта (города) местонахождения дилера используются географические координаты (поля latitude
, longitude
в составе возвращаемого DTO). RCS определяет город дилера с помощью сервиса Mapbox API. Если по какой-то причине RCS не смогла определить город, дилер создается с городом по умолчанию и признак isActive
устанавливается в значение False
.
В поле requests
возвращаемого DTO приходит массив DTO DealerRequestSetting
, в котором находятся настройки, касающиеся заявок, поддерживаемых дилером.
В случае отсутствия DealerRequestSetting
для какого-либо типа заявки, заявка этого типа считается отключенной для дилера.
Поддерживаются следующие типы заявок:
Тип заявки | Описание |
---|---|
ServiceMaintenance | Заявки на техобслуживание. |
Services | Заявки на ремонт. |
TestDrive | Заявки на тест-драйв. |
Question | Вопросы и ответы. |
Insurance | Заявки на заключение договора страхования. |
Credit | Заявки на приобретение автомобиля в кредит. |
Call | Заявки на обратный звонок. |
CallStock | Заявки на обратный звонок из магазина автомобилей. |
AutoParts | Заявки на приобретение запчастей. |
Lifestyle | Заявки на приобретение коллекционных аксессуаров. |
ServicemanRating | Заявки на выставление оценки сотруднику. |
Поле DealerRequestSetting.enabled
не применимо к заявкам типов TestDrive и Credit.
Поле DealerRequestSetting.interval
поддерживается только для заявок ServiceMaintenance, Service, TestDrive. Для заявок остальных типов это поле игнорируется.
При создании или изменении заявки, дилер может получать от RCS электронные письма. При формировании такого письма используются шаблоны. С помощью поля DealerRequestSetting.template
можно задать заполнитель для стандартного фрагмента сообщения. В шаблонах могут применяться так называемые токены – метки, вместо которых при формировании письма подставляется некая значимая информация, свойства заявки. Имя токена заключается в двойные фигурные скобки, например: {{Автовладелец}}
. Шаблоны применимы ко всем типам заявок. Для каждого типа заявок определен набор допустимых токенов. Токены можно применять при формировании заголовка письма и тела письма. Заголовок письма может состоять из произвольного текста и токенов, в тело письма можно включить только токены (произвольный текст в теле письма игнорируется). В настоящее время RCS не проверяет валидность токенов, каждый нераспознанный токен рассматривается как обычный текст в заголовке письма и игнорируется в теле письма.
Кроме токенов, в шаблоне можно использовать кнопки, которые будут отображаться в письме и при нажатии на которые будут выполняться некоторые действия с заявкой. Для каждого типа заявок определен набор допустимых кнопок.
RCS поддерживает два варианта токенов: русскоязычные и англоязычные. Русскоязычные токены являются устаревшими и не рекомендуются к применению. В дальнейшем, поддержка русскоязычных токенов будет прекращена.
Токен (English) | Токен (Russian). Устарело | Описание |
---|---|---|
{{Vehicle owner}} | {{Автовладелец}} | Информация о владельце: полное имя, телефон, email, идентификатор пользователя в системе подписчика. |
{{Insurance type}} | {{Тип страховки}} | Информация о страховке: тип страховки, срок страховки. |
{{Loan type}} | {{Тип кредита}} | Тип кредита. |
{{Down payment}} | {{Сумма первоначального взноса}} | Сумма первоначального взноса. |
{{Term length}} | {{Срок кредита}} | Срок кредита. |
{{Department}} | {{Департамент}} | Департамент. |
{{Employee}} | {{Сотрудник}} | Информация о сотруднике: полное имя, должность. |
{{User vehicle collection}} | {{Авто пользователя}} | Информация об автомобилях пользователя. |
{{User vehicle}} | {{Автомобиль}} | Информация об указанном в заявке автомобиле. |
{{Dealership}} | {{Дилерский центр}} | Информация о дилерском центре: название, адрес. |
{{Visit time}} | {{Дата и время записи}} | Дата и время записи. |
{{Maintenance type}} | {{Выбранное ТО}} | Информация о выбранном ТО, пробег, количество месяцев с момента продажи автомобиля. |
{{Service adviser}} | {{Мастер приемщик}} | Выбранный мастер приемщик. |
{{Issue description}} | {{Описание проблемы}} | Описание проблемы. |
{{Model}} | {{Модель}} | Модель автомобиля. |
{{Modification}} | {{Модификация}} | Модификация автомобиля. |
{{Price}} | {{Стоимость}} | Цена автомобиля. |
{{Brand}} | {{Марка}} | Марка автомобиля (бренд). |
{{Request message}} | {{Текст Обращения}} | Текст обращения пользователя. |
{{Repair type}} | {{Тип ремонта}} | Тип ремонта. |
{{Car of interest}} | {{Интересующий автомобиль}} | Интересующий пользователя автомобиль. |
{{Part info}} | {{Описание запчасти}} | Описание запчасти. |
{{Attachments}} | {{Фото}} | Вложенные фотографии. |
{{Accessory info}} | {{Аксессуар}} | Описание коллекционного аксессуара. |
{{Taxi}} | {{Такси}} | Информация о необходимости предоставления такси. |
{{Replacement car}} | {{Подменный автомобиль}} | Информация о необходимости предоставления подменного автомобиля. |
{{Employee rating}} | {{Рейтинг}} | Рейтинг сотрудника. |
Тип кнопки | Описание |
---|---|
Accept | Подтвердить заявку. |
AcceptWithChanges | Подтвердить заявку с изменениями. |
Decline | Отклонить заявку. |
OpenInPm | Открыть заявку в Портале. |
ReplyToChat | Ответить пользователю в чате. |
Тип заявки | Доступные токены | Доступные кнопки |
---|---|---|
ServiceMaintenance | {{Автовладелец}}, {{Дилерский центр}}, {{Дата и время записи}}, {{Марка}}, {{Автомобиль}}, {{Выбранное ТО}}, {{Описание проблемы}}, {{Мастер приемщик}} | Accept, AcceptWithChanges, Decline, OpenInPm |
Services | {{Автовладелец}}, {{Дилерский центр}}, {{Дата и время записи}}, {{Марка}}, {{Автомобиль}}, {{Тип ремонта}}, {{Описание проблемы}}, {{Фото}}, {{Мастер приемщик}} | Accept, AcceptWithChanges, Decline, OpenInPm |
TestDrive | {{Автовладелец}}, {{Дилерский центр}}, {{Дата и время записи}}, {{Марка}}, {{Модель}}, {{Модификация}} | Accept, AcceptWithChanges, Decline, OpenInPm |
Question | {{Автовладелец}}, {{Дилерский центр}}, {{Текст Обращения}} | OpenInPm, ReplyToChat |
Insurance | {{Автовладелец}}, {{Дилерский центр}}, {{Марка}}, {{Автомобиль}}, {{Тип страховки}}, {{Фото}} | Accept, Decline, OpenInPm |
Credit | {{Автовладелец}}, {{Дилерский центр}}, {{Марка}}, {{Модель}}, {{Тип кредита}}, {{Сумма первоначального взноса}}, {{Срок кредита}}, {{Модификация}}, {{Стоимость}} | Accept, Decline, OpenInPm |
Call | {{Автовладелец}}, {{Дилерский центр}}, {{Департамент}}, {{Авто пользователя}} | Accept, Decline, OpenInPm |
CallStock | {{Автовладелец}}, {{Дилерский центр}}, {{Интересующий автомобиль}}, {{Авто пользователя}} | Accept, Decline, OpenInPm |
AutoParts | {{Автовладелец}}, {{Дилерский центр}}, {{Автомобиль}}, {{Описание запчасти}}, {{Фото}} | Accept, Decline, OpenInPm |
Lifestyle | {{Автовладелец}}, {{Дилерский центр}}, {{Аксессуар}}, {{Фото}} | Accept, Decline, OpenInPm |
ServicemanRating | {{Автовладелец}}, {{Дилерский центр}}, {{Департамент}}, {{Сотрудник}}, {{Рейтинг}} | Accept, Decline, OpenInPm |
В качестве примера формирования сообщений о заявках в таблице ниже представлены три типичных варианта – для типов заявок ServiceMaintenance, Service, Credit.
Вид заявки | title | body | emailsForRequest | buttons |
---|---|---|---|---|
ServiceMaintenance | Заявка на ТО | {{Dealership}} {{Visit time}} {{Brand}} {{User vehicle}} {{Maintenance type}} {{Issue description}} {{Service adviser}} | xx@mail.ru | Accept, Decline, AcceptWithChanges |
Service | Заявка на ремонт | {{Dealership}} {{Visit time}} {{Service adviser}} {{Issue description}} {{Brand}} {{User vehicle}} {{Repair type}} {{Attachments}} |
xx@mail.ru | Accept, Decline, AcceptWithChanges, OpenInPm |
Credit | Заявка на кредит | {{Dealership}} {{Brand}} {{Model}} {{Loan type}} {{Down payment}} {{Term length}} {{Modification}} {{Price}} |
xx@mail.ru | Accept, Decline |
Фотогалерея дилера (поле gallery
в возвращаемом DTO) в настоящий момент не поддерживается RCS.
Опции наличия у дилера автомобиля на замену или возможность предоставления такси (поля availableTaxi
и availableReplacementCar
в возвращаемом DTO) применимы только если дилером поддерживается заявка типа Service.
Процедура актуализации словаря дилеров запускается по расписанию.
Ссылочная документация на точки входа: DMS - Requests.
Swagger tag: Requests
С помощью семейства запросов вида
PUT /requests/{rqfolder}/{id}
RCS передаёт в систему подписчика (дилера) сведения о заявках пользователей, созданных или изменившихся в RCS. Каждому типу заявок в URI запросов отвечает отдельный каталог, обозначенный как {rqfolder}
. RCS поддерживает следующие типы каталогов:
Назначение каталога (тип заявок) | Имя каталога |
---|---|
Заявки на тест-драйв | testdrives |
Заявки на заключение договора страхования | insurances |
Заявки на приобретение автомобиля в кредит | credits |
Заявки на приобретение запчастей | autoparts |
Заявки на техобслуживание | maintenances |
Заявки на обратный звонок и заявки на обратный звонок из магазина автомобилей | calls |
Заявки на ремонт | services |
Вопросы и ответы | questions |
Заявки на приобретение коллекционных аксессуаров | lifestyles |
Идентификатор заявки в RCS {id}
указывается в пути адреса вызываемого метода. В теле запроса размещается DTO заявки, зарегистрированной в RCS. RCS вызывает этот метод всякий раз, когда пользователь отправил новую заявку через мобильное приложение или изменил имеющуюся заявку.
Метод может вернуть один из двух HTTP кодов успешного ответа: 204 (No Content) или 200 (OK). В случае кода 200, в теле ответа может быть прислан sourceId
– идентификатор запроса в системе подписчика (дилера). RCS сохраняет этот идентификатор и в дальнейшем использует его для осуществления синхронизации идентификаторов, передавая его в теле запроса. HTTP код 204 (No Content) является устаревшим (deprecated) и не рекомендуется к дальнейшему использованию.
Сведения о заявках на обратный звонок и заявках на обратный звонок из магазина автомобилей передаются в один ресурсный каталог ({rqfolder}
): calls
. В случае заявок на обратный звонок из магазина автомобилей в теле запроса передается дополнительная информация о заинтересовавшем пользователя автомобиле.
RCS вызывает метод
PUT /requests/testdrives/{id}
всякий раз, когда пользователь отправил новую заявку на тест-драйв через мобильное приложение или изменил имеющуюся заявку.
RCS вызывает метод
PUT /requests/insurances/{id}
всякий раз, когда пользователь отправил новую заявку на заключение договора страхования через мобильное приложение или изменил имеющуюся заявку.
RCS вызывает метод
PUT /requests/credits/{id}
всякий раз, когда пользователь отправил новую заявку на заключение кредитного договора с целью приобретения автомобиля через мобильное приложение или изменил имеющуюся заявку.
RCS вызывает метод
PUT /requests/autoparts/{id}
всякий раз, когда пользователь отправил новую заявку на поставку автозапчастей или приобретение аксессуаров для автомобиля через мобильное приложение или изменил имеющуюся заявку.
RCS вызывает метод
PUT /requests/maintenances/{id}
всякий раз, когда пользователь отправил новую заявку на техобслуживание через мобильное приложение или изменил имеющуюся заявку.
RCS вызывает метод
PUT /requests/calls/{id}
всякий раз, когда пользователь отправил новую заявку на обратный звонок или заявку на обратный звонок из магазина автомобилей через мобильное приложение или изменил имеющуюся заявку.
В случае заявки на обратный звонок из магазина автомобилей в теле запроса передается дополнительная информация о заинтересовавшем пользователя автомобиле.
RCS вызывает метод
PUT /requests/services/{id}
всякий раз, когда пользователь отправил новую заявку на ремонт через мобильное приложение или изменил имеющуюся заявку.
RCS вызывает метод
PUT /requests/questions/{id}
всякий раз, когда пользователь отправил новый вопрос (заявку) дилеру через мобильное приложение.
RCS вызывает метод
PUT /requests/lifestyles/{id}
всякий раз, когда пользователь отправил новую заявку на приобретение коллекционных аксессуаров через мобильное приложение.
Ссылочная документация на точки входа: DMS - Car catalog.
Swagger tag: Car catalog
При оформлении заявок на тест-драйв или приобретение автомобиля в кредит в заявке указывается автомобиль из каталога, составленного дилером. RCS поддерживает два способа актуализации этих каталогов:
Это два альтернативных варианта актуализации каталогов. Реализовывать их оба не имеет смысла, но запрета на это нет.
Тем не менее, существует различие в этих двух способах:
первый способ позволяет актуализировать каталоги для заявок на тест-драйв и приобретение автомобиля в кредит;
второй способ актуализирует ТОЛЬКО каталог для заявок на тест-драйв.
Далее в этом разделе речь пойдет о втором способе – актуализация каталогов автомобилей для заявок по инициативе RCS. Подробную информацию о первом способе см. Автомобили для тест-драйва и кредита (Third-Party API).
С помощью запроса
GET /catalog/testdrive/vehicles
RCS получает перечень автомобилей, доступных для тест-драйва. Информация по доступным автомобилям в системе обновляется ПОЛНОСТЬЮ, т. е. происходит замена списка автомобилей на полученный по запросу.
Обновление каталога автомобилей запускается ПОСЛЕ обновления справочника дилеров. Таким образом, при обновлении каталога автомобилей, возможно использование новых, только что созданных дилеров.
Ссылочная документация на точки входа: DMS - Users & vehicles.
Swagger tag: Users
Пользователь – пользователь мобильного приложения Remoto (автомобилист) и/или водитель автомобиля, выступающий потребителем услуг Connected Car и являющийся клиентом дилера.
С помощью запроса
POST /users
RCS уведомляет информационную систему подписчика о факте регистрации новой учётной записи пользователя, когда тот успешно предъявляет одноразовый пароль и вводит полное имя в мобильном приложении.
В поле City
тела запроса передаётся город (населенный пункт) местонахождения пользователя. Название города (населенного пункта) берется из словаря системы RCS, причём в локализации национальной торговой компании (NSC), которой «принадлежит» регистрируемый пользователь.
С помощью запроса
PUT /users
RCS уведомляет информационную систему подписчика о внесении пользователем изменений в его профиль.
С помощью запроса
DELETE /users
RCS уведомляет информационную систему подписчика об удалении пользователем его учётной записи и профиля.
Ссылочная документация на точки входа: DMS - Users & vehicles.
Swagger tag: Users
С помощью запроса
PUT /users/vehicles
RCS уведомляет информационную систему подписчика о создании или изменении пользователем регистрационной записи (профиля) его автомобиля.
С помощью запроса
DELETE /users/vehicles
RCS уведомляет приложение информационную систему подписчика об удалении пользователем регистрационной записи (профиля) его автомобиля.
Ссылочная документация на точки входа: DMS - Loyalty programme.
Swagger tag: Loyalty programme
С помощью запроса
GET /rewards/{sourceId}
RCS получает детальные сведения о бонусной карте из информационной системы подписчика. Полученные в ответ сведения предоставляются пользователю мобильного приложения (владельцу карты).
С помощью запроса
POST /rewards/search
RCS проверяет право владения бонусной картой, запрашивая детальные сведения о бонусной карте из информационной системы подписчика. Полученные в ответ сведения используются для авторизации операции регистрации карты в системе RCS.
С помощью запроса
GET /rewards/{sourceId}/transactions
RCS получает из информационной системы подписчика журнал операций по счёту бонусной карты, указанной её идентификатором из информационной системы подписчика. Полученный в ответ журнал далее используется для актуализации состояния счёта бонусной карты. Под транзакцией в данном контексте следует понимать изменение состояния счёта бонусной карты (начисление, списание, назначение количества бонусных пунктов).
Число объектов, возвращаемых в ответе, определяется параметром take
запроса. Пока поле result
в теле ответа содержит непустой массив, следует продолжать делать запросы с новыми значениями параметра skip
.
RCS вызывает метод
DELETE /rewards/{sourceId}/users
всякий раз, когда пользователь успешно удалил зарегистрированную бонусную карту.
Ссылочная документация на точки входа: DMS - Service maintenance.
Swagger tag: Service history
RCS вызывает метод
POST /serviceHistory/search
для получения перечня записей журнала обслуживания и ремонта автомобиля, который формируется на основании исполненных заявок.
Для того, чтобы цена услуги или запасной части не отображалась в истории обслуживания и ремонта автомобиля в мобильном приложении, ответ на запрос не должен содержать цену услуги или запасной части.