Базовые запросы
SDK (Software Development Kit) — это набор инструментов для разработки собственных приложений. Wialon SDK включает в себя несколько API. Самым базовым из них является Remote API, на изучение которого нацелены данные статьи. Remote API предполагает доступ к данным через HTTP-запросы и актуален для 1С, PHP, C++/C# и других языков программирования. JS API и остальные построены на базе Remote API.
В данной статье будут рассмотрены базовые знания, необходимые новичкам для использования Remote API.
Также вам могут быть полезны:
- Документация с подробным описанием каждого API-запроса.
- Примеры готовых решений с использованием SDK из раздела Маркетплейс.
- Серия вебинаров Wialon API и SDK: обучающие видео.
- Коллекция примеров в приложении Postman для тестирования API-запросов.
- Раздел форума Собственные разработки под Wialon.
Просмотр запросов в браузере
В начале изучения SDK часто возникает необходимость понять, какой API-запрос отправляется на сервер при совершении того или иного действия в интерфейсе Wialon. Это можно легко отследить, используя встроенные инструменты браузера для мониторинга сетевых запросов.
В браузере Chrome для этого используется вкладка Сеть из Инструментов разработчика, которые открываются при нажатии на клавишу F12. В других браузерах данный инструмент может открываться иначе, о чем можно прочитать в документации браузера.
При просмотре сетевых запросов можно увидеть отправляемый запрос, его параметры и ответ от API-сервера в формате JSON.
Некоторые запросы выполняются пакетно. Тогда при просмотре сетевых запросов нужно найти запрос core/batch и изучить его параметры.
Не весь функционал интерфейса мониторинга основан на Wialon API (примером исключения является инструмент Расстояние).
Формат запроса
Запросы HTTP отправляются на сервер в следующем формате:
https://host/wialon/ajax.html?svc=НАИМЕНОВАНИЕ_ЗАПРОСА¶ms={ПАРАМЕТРЫ}&sid=ИДЕНТИФИКАТОР_СЕССИИ
Параметр | Описание |
---|---|
host | Для Wialon Hosting это обычно hst-api.wialon.com, а для Wialon Local — сайт системы мониторинга или CMS. |
svc | Наименование запроса (например, resource/update_zone). |
params | Параметры для выполнения запроса в формате JSON. Они перечислены в документации, при этом некоторые из них могут быть опциональными. В некоторых случаях отправляется пустое значение params={}. |
sid | Уникальный идентификатор сессии, который используется практически во всех запросах. Сервер возвращает его при запросе на авторизацию. |
Отправлять запросы для тестирования функционала API можно через адресную строку браузера. При этом необходимо, чтобы символы были закодированы для передачи в URL. Например, код символа % имеет вид %25, что можно проверить с помощью общедоступных онлайн-инструментов. Если специальные символы не будут закодированы, то в качестве ответа сервер вернет ошибку с кодом 4.
Получение токена и авторизация
Для авторизации в Wialon используется токен, то есть ключ, применяемый для зашифрованной идентификации пользователя.
Для создания токена можно использовать форму oAuth. После успешного логина токен отобразится в адресной строке браузера в качестве значения параметра access_token. При этом важно учитывать дополнительные параметры, которые регулируют такие свойства, как срок жизни (параметр duration), имя пользователя (параметр user), права доступа (параметр access_type) и другие.
Пример расширенной формы для получения токена:
https://hosting.wialon.com/login.html?client_id=ИМЯ_ПРИЛОЖЕНИЯ&access_type=256&activation_time=0&duration=0&lang=ru&flags=0&user=ИМЯ_ПОЛЬЗОВАТЕЛЯ
Пример ответа:
https://hosting.wialon.com/login.html?lang=ru&user=ИМЯ_ПОЛЬЗОВАТЕЛЯ&wialon_sdk_url=https%3A%2F%2Fhst%2Dapi%2Ewialon%2Ecom&access_token=ЗНАЧЕНИЕ_ТОКЕНА&svc_error=0
После получения токена его нужно использовать для авторизации. Пример логина под токеном:
https://hst-api.wialon.com/wialon/ajax.html?&svc=token/login¶ms={"token":"ЗНАЧЕНИЕ_ТОКЕНА"}
В ответе на логин под токеном содержится параметре eid, значение которого является уникальным идентификатором сессии. Далее он будет использоваться практически во всех API-запросах.
Настройка часового пояса
По умолчанию при работе c Remote API данные отображаются согласно часовому поясу GMT+0. Чтобы изменить его на необходимый, используется запрос render/set_locale. Достаточно выполнить данный запрос в рамках одной активной сессии.
Рекомендуется осуществлять настройку часового пояса сразу после авторизации, то есть до выполнения основных действий (запроса сообщений, построения трека и так далее).
При отправке запроса render/set_locale необходимо использовать параметр tzOffset. Стандартный метод вычисления его значения описан в документации.
Также узнать необходимое значение параметра tzOffset можно с помощью просмотра сетевых запросов в момент изменения часового пояса пользователя в веб-интерфейсе.
Системный ID
В API работа почти со всеми элементами ведется через внутренние идентификаторы, называемые системными ID, которые представлены уникальными цифровыми значениями.
Не нужно путать системный ID объекта с его Уникальным ID, который указывается в свойствах на вкладке Основное.
В веб-интерфейсах системные ID по умолчанию не отображаются, но их можно увидеть тремя методами:
- В ответе на запрос поиска элементов по критериям (core/search_items). Он будет рассмотрен подробнее в следующем разделе данной статьи.
- В параметрах запросов при просмотре сетевых запросов в браузере.
- В столбце avl_id в системе управления.
Чтобы столбец avl_id отображался, необходимо авторизоваться в CMS, добавив в конец ссылки ?features=avl_id. Пример такой ссылки приведен на изображении ниже.
Поиск элементов по критериям
Данный запрос позволяет найти элементы по указанным в параметрах критериям.
Поиск осуществляется по следующим типам элементов, которые указываются в поле itemsType:
- avl_hw — тип устройства;
- avl_resource — ресурс;
- avl_retranslator — ретранслятор;
- avl_unit — объект;
- avl_unit_group — группа объектов;
- user — пользователь;
- avl_route — маршрут.
Одним из возможных критериев поиска могут являться подэлементы. В таком случае для параметра propType устанавливается значение propitemname, а параметр propName будет принимать следующие значения:
- объекты:
- unit_sensors — датчики;
- unit_commands — команды;
- service_intervals — интервалы техобслуживания;
- ресурсы:
- drivers — водители;
- driver_groups — группы водителей;
- jobs — задания;
- notifications — уведомления;
- trailers — прицепы;
- trailer_groups — группы прицепов;
- zones_library — геозоны;
- reporttemplates — шаблоны отчетов;
- orders — заявки;
- маршруты:
- rounds — рейсы;
- route_schedules — расписания;
- ретрансляторы:
- retranslator_units — ретранслируемые объекты;
- объекты, пользователи или ресурсы:
- custom_fields — произвольные поля;
- admin_fields — административные поля.
Системные ID элементов имеют уникальные числовые значения и присваиваются сервером.
Нумерация системных ID подэлементов ведется в порядке создания и начинается с 1.
Если ранее было создано несколько подэлементов (например, с системными ID 1, 2 и 3), а потом какой-то из них был удален (предположим, нетронутыми остались подэлементы с ID 1 и 3), то следующий созданный подэлемент займет наименьший свободный ID (в данном примере это ID 2).
При помощи запроса поиска нельзя отобразить данные по конкретному подэлементу. В ответе на запрос поиска содержится информация именно о самих элементах (тип устройства, ресурс, ретранслятор, объект, группа объектов, пользователь, маршрут). То есть подэлементы являются критерием для поиска.
Например, можно вести поиск по имени датчика Engine, но в ответе на запрос вернется не только информация о датчиках, а именно об объектах, в которых создан датчик с искомым именем.
Информация в ответе зависит от того, какие флаги указаны в запросе поиска в параметре flags. Флаги задаются в формате DEC.
Флаги можно суммировать между собой, чтобы получить несколько видов данных одновременно, а не выполнять несколько отдельных запросов.
Например, если необходимо вывести основные свойства объекта (“flag”:1), созданные в нем команды (“flag”:524288) и последнее местоположение (“flag”:4194304), то достаточно выполнить поиск по объектам с флагом “flag”:4718593, так как 1 + 524288 + 4194304 = 4718593.
Рассмотрим несколько примеров использования запроса о поиске элементов по критерию (другие примеры можно найти в документации).
Поиск элементов с определенным именем
Необходимо получить список всех доступных пользователю объектов, в имени которых есть слово Tractor, а также информацию о датчиках, созданных в объектах. В таком случае можно использовать следующий запрос:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/search_items¶ms={"spec":{"itemsType":"avl_unit","propName":"sys_name","propValueMask":"*Tractor*","sortType":"sys_name"},"force":1,"flags":4097,"from":0,"to":0}&sid=ИДЕНТИФИКАТОР_СЕССИИ
Параметр и его значение | Описание |
---|---|
“itemsType”:“avl_unit” | Поиск будет выполнен по объектам.Если оставить значение пустым (“itemsType”:“”), то поиск будет осуществляться по всем типам элементов. |
“propName”:“sys_name” | Поиск будет выполнен по имени элемента. |
“propValueMask”:“*Tractor*” | В ответе будет отображен список объектов, имя которых содержит слово Tractor, а до и после него может быть любое количество символов.Если задать для данного параметра значение *, то в ответе на запрос будут присутствовать элементы с любым значением именем, то есть все доступные пользователю элементы. |
“sortType”:“sys_name” | Сортировка будет выполнена по имени элемента. |
“force”:1 | Результаты предыдущих поисков не будут учитываться. |
“flags”:4097 | В ответе будет содержаться информация об основных свойствах, так как необходимо получить имена объектов, и о созданных датчиках. 1 + 4096 = 4097 |
“from”:0;“to”:0 | Ограничения по количеству найденных элементов не будут применяться. |
Поиск пользователей, созданных после определенной даты
Необходимо получить список пользователей, которые были созданы после 23 февраля 2021 05:41:46 (GMT+0). В ответе должны содержаться системные ID данных пользователей и их адреса электронной почты. В таком случае можно использовать следующий запрос:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/search_items¶ms={"spec":{"itemsType":"user","propName":"rel_creation_time","propValueMask":">=1614058906","sortType":"sys_name"},"force":1,"flags":3,"from":0,"to":0}&sid=ИДЕНТИФИКАТОР_СЕССИИ
Параметр и его значение | Описание |
---|---|
“itemsType”:“user” | Поиск будет выполнен по пользователям. |
“propName”:“rel_creation_time” | Поиск будет выполнен по дате создания. |
“propValueMask”:“>=1614058906” | В ответе будет отображен список элементов, время создания которых больше или равно 23 февраля 2021 05:41:46 (GMT+0).В запросах используется Unix-время. Для перевода даты и времени в Unix-время можно использовать общедоступные онлайн-инструменты. |
“sortType”:“sys_name” | Сортировка будет выполнена по имени элемента. |
“force”:1 | Результаты предыдущих поисков не будут учитываться. |
“flags”:3 | В ответе вернется информация об основных свойствах, так как необходимо получить системные ID пользователей, и о произвольных свойствах, так как необходимо получить адреса электронной почты пользователей. 1 + 2 = 3 |
“from”:0;“to”:0 | Ограничения по количеству найденных элементов не будут применяться. |
Поиск объектов определенного типа
Необходимо вывести список объектов с типом оборудования Wialon Retranslator, которые отправляли сообщения после 12 февраля 2023 12:00:00 (GMT+0). В ответе необходимо отобразить датчики объектов, время последнего сообщения и местоположения. В таком случае можно использовать следующий запрос:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/search_items¶ms={"spec":{"itemsType":"avl_unit","propName":"rel_hw_type_name,rel_last_msg_date","propValueMask":"Wialon%20Retranslator,>1676203200","sortType":"rel_creation_time"},"force":1,"flags":1,"from":0,"to":0}&sid=ИДЕНТИФИКАТОР_СЕССИИ
Параметр и его значение | Описание |
---|---|
“itemsType”:“avl_unit” | Поиск будет выполнен по объектам. |
“propName”:“rel_hw_type_name,rel_last_msg_date” | Поиск будет выполнен по типу оборудования и времени последнего полученного сообщения. |
“propValueMask”:“Wialon%20Retranslator,>1676203200” | В ответе будет отображен список элементов с типом оборудования Wialon Retranslator, время отправки последнего сообщения от которых позже, чем 12 февраля 2023 12:00:00 (GMT+0). |
“sortType”:“rel_creation_time” | Сортировка будет выполнена по дате создания элементов. |
“force”:1 | Результаты предыдущих поисков не будут учитываться. |
“flags”:1 | В ответе вернется информация об основных свойствах объекта. |
“from”:0;“to”:0 | Ограничения по количеству найденных элементов не будут применяться. |
Поиск объектов по имени датчика
Необходимо вывести список объектов, в которых создан датчик с именем Engine. В таком случае можно использовать следующий запрос:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/search_items¶ms={"spec":{"itemsType":"avl_unit","propType":"propitemname","propName":"unit_sensors","propValueMask":"Engine","sortType":"sys_name"},"force":1,"flags":1,"from":0,"to":0}&sid=ИДЕНТИФИКАТОР_СЕССИИ
Параметр и его значение | Описание |
---|---|
“itemsType”:“avl_unit” | Поиск будет выполнен по объектам. |
“propType”:“propitemname” | Поиск будет выполнен по имени подэлемента. |
“propName”:“unit_sensors” | Поиск будет выполнен по имени датчика. |
“propValueMask”:“engine” | В ответе будет отображен список объектов, в свойствах которых создан датчик с названием Engine. |
“sortType”:“sys_name” | Сортировка будет выполнена по имени элемента. |
“force”:1 | Результаты предыдущих поисков не будут учитываться. |
“flags”:1 | В ответе вернется информация об основных свойствах объектов. |
“from”:0;“to”:0 | Ограничения по количеству найденных элементов не будут применяться. |
Поиск групп объектов по нескольким критериям
Необходимо получить список групп объектов, которые были созданы пользователем User, и в которые добавлено более 5 объектов. В таком случае можно использовать следующий запрос:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/search_items¶ms={"spec":{"itemsType":"avl_unit_group","propName":"rel_user_creator_name,rel_group_unit_count","propValueMask":"User,>5","sortType":"sys_name"},"force":1,"flags":133,"from":0,"to":0}&sid=ИДЕНТИФИКАТОР_СЕССИИ
Параметр и его значение | Описание |
---|---|
“itemsType”:“avl_unit_group” | Поиск будет выполнен по группам объектов. |
“propName”:“rel_user_creator_name,rel_group_unit_count” | Поиск будет выполнен по имени создателя и количеству элементов в группе. |
“propValueMask”:“User,>5” | В ответе будет отображен список групп объектов, создателем которых является пользователь User, и в которые добавлено более 5 объектов. |
“sortType”:“sys_name” | Сортировка будет выполнена по имени элемента. |
“force”:1 | Результаты предыдущих поисков не будут учитываться. |
“flags”:133 | В ответе вернется информация об основных свойствах, свойствах биллинга и административных записях. 1 + 4 + 128 = 133 |
“from”:0;“to”:0 | Ограничения по количеству найденных элементов не будут применяться. |
Список частых ошибок
Ошибка отображается в случае невозможности выполнить запрос. Полный список возвращаемых ошибок можно найти в документации.
Наиболее частыми ошибками являются:
-
{error: 1} — недействительная сессия.
Данная ошибка отображается, когда истек срок действия уникального идентификатора сессии. Чтобы исправить ошибку, достаточно выполнить логин под токеном еще раз и использовать новый идентификатор сессии (sid) для выполнения запросов.Если в течение 5 минут в рамках сессии не выполняется ни одного запроса, то она становится неактивной. Чтобы поддерживать сессию, вы можете каждые 5 минут отправлять запрос avl_evts.
-
{error: 4} — неверный ввод.
Данная ошибка отображается, если в тексте запроса присутствует ошибка: указаны не все требуемые параметры, текстовые параметры не заключены в кавычки, нет открывающей или закрывающей скобки и т. д. Чтобы исправить ошибку, необходимо исправить текст выполняемого запроса согласно его описанию в документации. -
{error: 7} — доступ запрещен.
Данная ошибка отображается, если у пользователя недостаточно прав на выполнение запроса. Чтобы исправить ошибку, необходимо проверить, достаточно ли прав у токена, который используется для получения уникального идентификатора сессии, а также достаточно ли у пользователя, для которого был сгенерирован токен, прав в отношении используемых элементов.