IntegrationDocuments.ru.markdown

Руководство по интеграции с системой RCS


Введение

Используемые термины и сокращения

Общие положения

Third-Party API

DMS API

Введение

Документация по интеграции с системой 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, предназначенный для:

  • сбора, обработки, анализа данных, полученных от подключенного к RCS транспортного средства, и выполнения действий на основе этих данных;
  • обеспечения пользователей без подключенных к RCS транспортных средств услугами от дилера, таких, как получение новостей, специальных предложений, услуг по обслуживанию автомобиля, его ремонту.

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. Не допускается использование незащищенного соединения.

Аутентификация

Для защиты от несанкционированного доступа используется двусторонняя аутентификация с помощью сертификатов:

  • серверный сертификат соответствует доменному имени сервера и подписывается общеизвестным доверенным центром сертификации (например, COMODO CA);
  • (Third-Party API) клиентский сертификат для доступа к Third-Party API выпускается и подписывается собственным центром сертификации продукта Remoto;
  • (DMS API) клиентский сертификат для доступа к DMS API выпускается, подписывается и предоставляется подписчиком (дилером);
  • при выпуске сертификатов должен быть использован алгоритм шифрования семейства SHA-2. Алгоритмы MD5 и SHA-1 являются устаревшими и корректная работа с сертификатами на базе этих алгоритмов не гарантируется.

Аутентификация и авторизация клиента осуществляется по сертификату, использованному им при установлении соединения.

Практически все запросы к 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 протоколом, ответов, не описанных здесь. Кроме того, инфраструктурные модули могут генерировать ответы с теми же кодами, что описаны здесь, но с отличающимся содержимым. Подобные ситуации не отражены в данной спецификации.

400 Bad Request

Запрос сформирован неверно и не прошел валидацию на сервере.

Сервер не выполнил каких-либо операций, связанных с запросом.

Формат тела ответа:

{
    // Информация об ошибке.
    "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"
        }
    }
    

401 Unauthorized

Сервер не смог выполнить аутентификацию клиента. См. раздел Аутентификация.

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

403 Forbidden

Пользователь не имеет право выполнить одну или несколько операций, связанных с запросом.

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

Ответ 404 Not Found, а не 403 Forbidden, может использоваться в случае запросов к ресурсам (в т. ч. на изменение), на которые у пользователя нет прав чтения.

404 Not Found

Ресурс не существует или пользователь не имеет прав чтения на него (именно чтения, даже если осуществляется попытка выполнения другой операции).

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

405 Method Not Allowed

Предпринята попытка выполнения HTTP метода на ресурсе, не допускающем такой метод.

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

406 Not Acceptable

Сервер не имеет возможности (из-за ограничений самого сервера или особенностей формата запрашиваемого ресурса) отдать клиенту ответ в одном из форматов, указанных в заголовке Accept запроса.

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

413 Request Entity Too Large

Сервер не может обработать запрос клиента, т. к. его (запроса) размер превышает допустимое ограничение.

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

415 Unsupported Media Type

Сервер не имеет возможности (из-за ограничений самого сервера или особенностей формата запрашиваемого ресурса) принять от клиента запрос в формате, указанном в заголовке Content-Type запроса.

Сервер не выполнил запуск каких-либо операций, связанных с запросом.

Тело ответа отсутствует.

429 Too Many Requests

Клиент отправил слишком много запросов за заданный промежуток времени. Для RCS это ограничение установлено в 5 запросов в секунду.

Тело ответа отсутствует.

500 Internal Server Error

Произошла внутренняя ошибка сервера.

Если ошибка была перехвачена прикладным уровнем, то клиенту может быть отправлен ответ в следующем формате:

{
    // Информация об ошибке.
    "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

Ссылочная документация по точкам входа: Third-Party API endpoints.

Получение информации об автомобилях с телематикой (недоступно с 01.07.21)

Swagger tag: Vehicles

Перечень «своих» автомобилей клиент может получить, выполнив запрос:

GET /vehicles

Возвращаемые данные содержат информацию, достаточную для сопоставления автомобилей с БД клиента и информацию о последнем состоянии автомобилей.

Информацию о конкретном автомобиле клиент может получить, выполнив запрос:

GET /vehicles/{vehicleId}

Автомобиль должен существовать в базе RCS и быть привязан к текущему клиенту или клиент должен иметь доступ ко всем автомобилям подписки через API.

Диагностика автомобилей с телематикой (недоступно с 01.07.21)

Swagger tag: Health reports

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

Существует два вида запросов для получения диагностических данных:

  • запрос в режиме обзорный запрос (overview mode) используется с целью выявить все автомобили, у которых диагностировано наличие неисправностей (обзорный отчёт);

  • запрос в режиме фокусный запрос (fetch mode) используют, чтобы получить самый последний результат диагностики конкретного автомобиля (фокусный отчёт), содержащий DTC.

Чтобы получить обзорный отчёт, клиент должен выполнить два последовательных шага:

  1. запустить задание на отбор диагностических отчётов, используя следующий метод точки входа:

    POST /vehicle-health/reports
    
  2. проверять состояние задания, пока оно не будет выполнено системой 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-уведомление будет передано провайдеру для доставки пользователю в назначенное время.

Получение данных телеметрии (недоступно с 01.07.21)

Данные телеметрии с автомобилей, получаемые сервером RCS, могут быть получены клиентом в двух режимах:

  • Чтение “холодных” данных.
  • Получение данных в режиме real-time.

Все данные телеметрии снабжаются уникальным значением ревизии (поле revision). Значение приходит в пакетах real-time данных, присутствует в «холодных» данных, по нему возможна фильтрация «холодных» данных. Поле должно восприниматься клиентом как произвольная строка закрытого формата, в отношении которой, тем не менее, гарантируется следующее:

  • Каждая запись данных телеметрии имеет непустое уникальное значение ревизии.
  • Регистр символов в строке ревизии не имеет значения (сервер всегда использует нижний регистр).
  • Строковые значения ревизий лексикографически упорядочены во времени. Данные, полученные позже, всегда имеют значение ревизии, лексикографически большее ревизий всех ранее полученных данных.

Поддержка ревизий позволяет реализовывать сценарии, для которых фильтрация по времени не подходит из-за недостаточной точности временных отсечек:

  • Организовывать чтение «холодных» данных телеметрии по страницам. В запросе на чтение “холодных” данных поддерживается только параметр take, а каждая следующая страница должна запрашиваться с фильтром по минимальной ревизии, равным максимальной ревизии ранее полученных данных.
  • Восстанавливать данные, утраченные из-за неудачных попыток восстановления real-time канала. Для этого можно запрашивать данные с фильтром по минимальной ревизии, равным максимально известному значению ревизии, полученному по real-time каналу.
  • Распознавать дублирования данных, полученных по real-time каналу и в «холодном» режиме. Для этого достаточно игнорировать данные с уже известным значением ревизии.
  • Упорядочивать данные, полученные несколькими независимыми потоками, основываясь на лексикографическом порядке значений ревизий.

Чтение “холодных” данных

Swagger tag: Telemetry

Клиент может прочитать “холодные”, исторические, т. е. принятые, обработанные сервером RCS и сохраненные в серверной БД данные, отправив запрос:

GET /telemetry/history/{vehicleId}

Запрос позволяет ограничить диапазон времени, за который извлекаются данные, а также количество извлекаемых записей.

Для организации постраничного чтения данных, каждая следующая страница должна запрашиваться с фильтром по минимальной ревизии, равным максимальной ревизии ранее полученных данных.

Автомобиль должен существовать в базе RCS и быть привязан к текущему клиенту или клиент должен иметь доступ ко всем автомобилям подписки через API.

Получение данных в режиме real-time

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 канала и получения по нему данных следующий:

  1. Клиент создает очередь сообщений для получения real-time данных выполняя POST запрос к соответствующему ресурсу REST API (Swagger tag: Telemetry):

    POST /telemetry/monitor
    

    В случае успешного выполнения запроса, создана real-time очередь, передача данных по ней успешно инициирована. Ответ содержит URI экземпляра AMQP брокера, а также имя очереди, из которой клиент может читать запрошенные данные.

    HTTP заголовок ответа Location содержит относительный (без схемы и хоста) URI для обновления информации об очереди:
    Location: /realtime-queues/{queue-name}

  2. Клиент устанавливает соединение по протоколу AMQP 0-9-1 поверх TLS 1.3 по URI, полученному в ответе на запрос создания очереди. Подключение к брокеру должно выполняться с использованием того же клиентского сертификата, который использовался при «заказе» сервиса через REST API. Для аутентификации клиент должен выбирать SASL механизм “EXTERNAL” (на самом деле, только он и поддерживается брокером).

  3. Клиент создает AMQP канал в рамках установленного соединения.

  4. Клиент читает (через подписку или basic.get) сообщения из AMQP очереди, имя которой было возвращено в ответе на запрос ее создания. Права клиента на AMQP брокере ограничены чтением указанной очереди, однако в рамках этой операции клиент может использовать любые возможности, поддерживаемые протоколом AMQP 0-9-1, в том числе все виды подтверждений, отказов, транзакционность, QoS и прочее.

  5. Время с момента создания очереди (п.1) до момента подключения к ней по AMQP (п.4) не должно превышать таймаута, определяемого параметром {REALTIME_TTL}.

  6. В случае ошибки на шагах 2-4, клиент должен обновить информацию об очереди, выполнив запрос:

    GET /realtime-queues/{queue_name}
    

    В случае успешного выполнения этого запроса, клиент повторяет попытку подключения с шага 2, используя обновленный URI AMQP брокера. Если запрос обновления информации об очереди вернул статус 404 Not Found, это означает, что клиент не успел установить соединение с очередью за регламентированное время. В этом случае клиент предпринимает новую попытку открытия real-time канала с шага 1. При этом возможно неполучение данных, уже хранящихся в очереди или отправленных автомобилями с момента удаления очереди сервером до момента ее пересоздания. Клиент должен предпринять не менее трех попыток установления real-time канала, прежде чем констатировать сбой.

  7. В случае обрыва уже установленного 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}

Естественно, создание новой очереди также становится вновь доступным для клиента и при автоматическом удалении неактивных очередей по таймауту.

Выполнение команд на устройствах Remoto (недоступно с 01.07.21)

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}

Процедура выполнения запроса и дальнейшего отслеживания перевода устройства в сервисный режим (выполнения соответствующей команды) аналогична процедуре запуска команд, описанной ранее.

Автомобили для тест-драйва и кредита (Third-Party API)

Swagger tag: Car catalog

При оформлении заявок на тест-драйв или приобретение автомобиля в кредит в заявке указывается автомобиль из каталога, составленного дилером. RCS поддерживает два способа актуализации этих каталогов:

  • по инициативе подписчика (дилера);
  • по инициативе RCS.

Это два альтернативных варианта актуализации каталогов. Реализовывать их оба не имеет смысла, но запрета на это нет.

Тем не менее, существует различие в этих двух способах:

  • первый способ позволяет актуализировать каталоги для заявок на тест-драйв и приобретение автомобиля в кредит;

  • второй способ актуализирует ТОЛЬКО каталог для заявок на тест-драйв.

Далее в этом разделе речь пойдет о первом способе – актуализация каталогов автомобилей для заявок по инициативе подписчика (дилера). Подробную информацию о втором способе см. Автомобили для тест-драйва и кредита (DMS API).

Каталог автомобилей для заявок представляет собой отдельный ресурс, которому соответствует путь /catalog/vehicles.

Подписчик (дилер) может зарегистрировать новый автомобиль в каталоге или обновить информацию об уже зарегистрированном автомобиле с помощью следующего запроса:

PUT /catalog/vehicles

Если автомобиль с указанным идентификатором (source_Id в запросе) уже зарегистрирован, то сведения о нём будут обновлены, в противном случае будет зарегистрирован новый.

Подписчик (дилер) может удалить автомобиль из каталога с помощью запроса вида:

DELETE /catalog/vehicles/{sourceId}

Исключение автомобиля из каталога того или иного дилера не влияет на уже существующие заявки. Пользователь может указать автомобиль в своей новой заявке, направляемой конкретному дилеру, только если этот автомобиль имеется в каталоге данного дилера.

Пользователи (Third-Party API)

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 (идентификатор автомобиля в системе подписчика). Дополнительную информацию о синхронизации идентификаторов см. Синхронизация идентификаторов.

Программа лояльности (Third-Party API)

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}

позволяет удалить время посещения указанного дилера.

Заявки (Third-Party API)

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 API

Дилеры

Ссылочная документация на точки входа: 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 API)

Ссылочная документация на точки входа: 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 API)

Ссылочная документация на точки входа: DMS - Car catalog.

Swagger tag: Car catalog

При оформлении заявок на тест-драйв или приобретение автомобиля в кредит в заявке указывается автомобиль из каталога, составленного дилером. RCS поддерживает два способа актуализации этих каталогов:

  • по инициативе подписчика (дилера);
  • по инициативе RCS.

Это два альтернативных варианта актуализации каталогов. Реализовывать их оба не имеет смысла, но запрета на это нет.

Тем не менее, существует различие в этих двух способах:

  • первый способ позволяет актуализировать каталоги для заявок на тест-драйв и приобретение автомобиля в кредит;

  • второй способ актуализирует ТОЛЬКО каталог для заявок на тест-драйв.

Далее в этом разделе речь пойдет о втором способе – актуализация каталогов автомобилей для заявок по инициативе RCS. Подробную информацию о первом способе см. Автомобили для тест-драйва и кредита (Third-Party API).

С помощью запроса

GET /catalog/testdrive/vehicles

RCS получает перечень автомобилей, доступных для тест-драйва. Информация по доступным автомобилям в системе обновляется ПОЛНОСТЬЮ, т. е. происходит замена списка автомобилей на полученный по запросу.

Обновление каталога автомобилей запускается ПОСЛЕ обновления справочника дилеров. Таким образом, при обновлении каталога автомобилей, возможно использование новых, только что созданных дилеров.

Пользователи (DMS API)

Ссылочная документация на точки входа: 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 API)

Ссылочная документация на точки входа: 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

для получения перечня записей журнала обслуживания и ремонта автомобиля, который формируется на основании исполненных заявок.

Для того, чтобы цена услуги или запасной части не отображалась в истории обслуживания и ремонта автомобиля в мобильном приложении, ответ на запрос не должен содержать цену услуги или запасной части.