Различия

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

Ссылка на это сравнение

ru:pro:remoteapi:apiref:resource:update_notification [05/12/2013 09:21]
zuve
ru:pro:remoteapi:apiref:resource:update_notification [13/02/2015 15:40]
Строка 1: Строка 1:
-{{indexmenu_n>​40}} 
-====== Уведомления:​ создание,​ редактирование и удаление ====== 
  
-Для создания,​ редактирования и удаления уведомлений используется команда **resource/​update_notification**:​ 
- 
-<code javascript>​ 
-svc=resource/​update_notification&​params={"​itemId":<​long>,​ 
- "​id":<​long>,​ 
- "​callMode":<​text>,​ 
- "​n":<​text>,​ 
- "​txt":<​text>,​ 
- "​ta":<​uint>,​ 
- "​td":<​uint>,​ 
- "​ma":<​uint>,​ 
- "​mmtd":<​uint>,​ 
- "​cdt":<​uint>,​ 
- "​mast":<​uint>,​ 
- "​mpst":<​uint>,​ 
- "​cp":<​uint>,​ 
- "​fl":<​uint>,​ 
- "​tz":<​int>,​ 
- "​la":<​text>,​ 
- "​un":​[<​long>​],​ 
- "​sch":​{  
- "​f1":<​uint>,​ 
- "​f2":<​uint>,​ 
- "​t1":<​uint>,​ 
- "​t2":<​uint>,​ 
- "​m":<​uint>,​ 
- "​y":<​uint>,​ 
- "​w":<​uint>​ 
- }, 
- "​trg":​{  
- "​t":<​text>,​ 
- "​p":​{  
- <​text>:<​text>,​ 
- ... 
- } 
- }, 
- "​act":​[  
- { 
- "​t":<​text>,​ 
- "​p":​{  
- <​text>:<​text>,​ 
- ... 
- } 
- } 
- ]} 
-</​code>​ 
- 
-===== Параметры ===== 
- 
-^  Название ​ ^ Описание ^ 
-|  itemId ​ | ID ресурса | 
-|  id  | ID уведомления | 
-|  callMode ​ | режим: создание,​ редактирование,​ удаление (create, update, delete) | 
-|  **Параметры,​ обязательными только при создании и редактировании:​** ​ || 
-|  n  | название | 
-|  txt  | текст уведомления | 
-|  ta  | время активации (UNIX формат) | 
-|  td  | время деактивации (UNIX формат) | 
-|  ma  | максимальное количество срабатываний (0 - не ограничено) | 
-|  mmtd  | максимальный временной интервал между сообщениями (секунд) | 
-|  cdt  | таймаут срабатывания(секунд) | 
-|  mast  | минимальная продолжительность тревожного состояния (секунд) | 
-|  mpst  | минимальная продолжительность предыдущего состояния (секунд) | 
-|  cp  | период контроля относительно текущего времени (секунд) | 
-|  fl  | флаги (см. ниже) | 
-|  tz  | часовой пояс | 
-|  la  | язык пользователя (двухбуквенный код) | 
-|  un  | массив ID объектов | 
-|  sch  | ограничение по времени | 
-|  f1  | время начала интервала 1 | 
-|  f2  | время начала интервала 2 | 
-|  t1  | время окончания интервала 1 | 
-|  t2  | время окончания интервала 2 | 
-|  m  | маска дней месяца | 
-|  y  | маска месяцев | 
-|  w  | маска дней недели | 
-|  trg  | контроль\\ //t// -- тип контроля (см. [[#Типы контроля]])\\ //p// -- параметры вида //​название параметра:​ значение//​ | 
-|  act  | действия\\ //t// -- тип действия (см. [[#Типы действий]])\\ //p// -- параметры вида //​название параметра:​ значение//​ | 
- 
- 
-//​Флаги уведомлений//:​ 
-^ Флаг ^ Описание ^ 
-| 0x0 | уведомление срабатывает на первое сообщение | 
-| 0x1 | уведомление срабатывает на каждое сообщение | 
-| 0x2 | уведомление выключено | 
- 
-===== Возвращаемый результат ===== 
-При создании и редактировании:​ 
-<​code=javascript>​ 
-[ 
- <​long>,​ /​* ID уведомления */ 
- { 
- "​id":<​long>,​ /​* ID уведомления */ 
- "​n":<​text>,​ /​* название */ 
- "​txt":<​text>,​ /​* текст уведомления */ 
- "​ta":<​uint>,​ /​* время активации (UNIX формат) */ 
- "​td":<​uint>,​ /​* время деактивации (UNIX формат) */ 
- "​ma":<​uint>​ /​* максимальное количество срабатываний (0 - не ограничено) */ 
- "​mmtd":<​uint>,​ /​* максимальный временной интервал между сообщениями (секунд) */ 
- "​cdt":<​uint>,​ /​* таймаут срабатывания(секунд) */ 
- "​mast":<​uint>,​ /​* минимальная продолжительность тревожного состояния (секунд) */ 
- "​mpst":<​uint>,​ /​* минимальная продолжительность предыдущего состояния (секунд) */ 
- "​cp":<​uint>,​ /​* период контроля относительно текущего времени (секунд) */ 
- "​fl":<​uint>​ /​* флаги уведомлений (см. выше) */ 
- "​tz":<​int>​ /​* часовой пояс */ 
- "​la":<​text>,​ /​* двухбуквенный код языка */ 
- "​ac":<​uint>,​ /​* количество срабатываний */ 
- "​sch":​{ 
- "​f1":<​uint>,​ /​* время начала интервала 1 */ 
- "​f2":<​uint>,​ /​* время начала интервала 2 */ 
- "​t1":<​uint>,​ /​* время окончания интервала 1 */ 
- "​t2":<​uint>,​ /​* время окончания интервала 2 */ 
- "​mdm":<​uint>,​ /​* маска дней месяца */ 
- "​ymm":<​uint>,​ /​* маска месяцев */ 
- "​wdm":<​uint>​ /​* маска дней недели */ 
- }, 
- "​un":​[<​long>​],​ /​* массив GUIDов объектов */ 
- "​act":​[{ /​* действия */ 
- "​t":<​text>,​ /​* тип действия */ 
- "​p":​{ /​* параметры вида - название параметра:​ значение */ 
- <​text>:<​text>,​ 
- ... 
- } 
- }], 
- "​trg":​{ /​* контроль */ 
- "​t":<​text>,​ /​* тип контроля */ 
- "​p":​{ /​* параметры вида - название параметра:​ значение */ 
- <​text>:<​text>,​ 
- ... 
- } 
- } 
- } 
-] 
-</​code>​ 
- 
-При удалении:​ 
-<code javascript>​ 
-[ 
- <​long>,​ /​* ID уведомления */ 
- null 
-] 
-</​code>​ 
- 
-===== Возможные ошибки ===== 
-^  Код ​ ^ Значение ^ 
-|  1  | недействительная сессия | 
-|  2  | неверное имя сервиса | 
-|  3  | неверный результат | 
-|  4  | неверный формат или значение параметров | 
-|  6  | - не существует уведомления с указанным ID\\ - ошибка удаления уведомления | 
-|  7  | - доступ запрещен\\ - не подключен сервис | 
- 
-===== Типы действий ===== 
- * [[#​Уведомить по e-mail]], 
- * [[#​Уведомить при помощи SMS]], 
- * [[#​Отобразить онлайн уведомление во всплывающем окне]], 
- * [[#​Зарегистрировать событие в истории объекта]],​ 
- * [[#​Выполнить команду]],​ 
- * [[#​Изменить права пользователей]],​ 
- * [[#​Установить значение счетчика]],​ 
- * [[#​Сохранить значение счетчика как параметр]],​ 
- * [[#​Зарегистрировать статус объекта]],​ 
- * [[#​Изменить вхождение в группы]],​ 
- * [[#​Отправить отчет по e-mail]], 
- * [[#​Назначить на маршрут]],​  
- * [[#​Снятие водителя]]. 
- 
-=== Уведомить по e-mail === 
-<code javascript>​ 
-{ 
- "​t":"​email",​ /​* тип действия */ 
- "​p":​{ 
- "​email_to":<​text>,​ /​* e-mail адрес */ 
- "​html":<​text>,​ /​* использовать html-теги:​ 0 - нет, 1 - да  */ 
- "​img_attach":<​text>,​ /​* прикрепить изображение из сработавшего уведомления (1 - да, 0 - нет) */ 
- "​subj":<​text>​ /​* текст сообщения */ 
- } 
-} 
-</​code>​ 
- 
-=== Уведомить при помощи SMS === 
-<code javascript>​ 
-{ 
- "​t":"​sms",​ /​* тип действия */ 
- "​p":​{ 
- "​phones":<​text>​ /​* список телефонных номеров (через точку с запятой) */ 
- } 
-} 
-</​code>​ 
- 
-=== Отобразить онлайн уведомление во всплывающем окне === 
-<code javascript>​ 
-{ 
- "​t":"​message",​ /​* тип действия */ 
- "​p":​{ 
- "​name":<​text>​ /​* название уведомления */ 
- } 
-} 
-</​code>​ 
- 
-=== Зарегистрировать событие в истории объекта === 
-<code javascript>​ 
-{ 
- "​t":"​event",​ /​* тип действия */ 
- "​p":​{ 
- "​flags":<​text>​ /​* зарегистрировать как: 0 - событие,​ 1 - нарушение */ 
- } 
-} 
-</​code>​ 
- 
-=== Выполнить команду === 
-<code javascript>​ 
-{ 
- "​t":"​exec_cmd",​ /​* тип действия */ 
- "​p":​{ 
- "​link":<​text>,​ /​* тип связи */ 
- "​name":<​text>,​ /​* название команды */ 
- "​param":<​text>​ /​* параметры */ 
- } 
-} 
-</​code>​ 
- 
-=== Изменить права пользователей === 
-<code javascript>​ 
-{ 
- "​t":"​user_access",​ /​* тип действия */ 
- "​p":​{ 
- "​acc_level":<​text>,​ /​* права доступа */  
- "​users":<​text>​ /​* список GUIDов пользователей (через запятую) */ 
- } 
-} 
-</​code>​ 
- 
-Права доступа рассмотрены в разделе [[../​user/​get_items_access]]. 
- 
-=== Установить значение счетчика === 
-<code javascript>​ 
-{ 
- "​t":"​counter",​ /​* тип действия */ 
- "​p":​{ 
- "​engine_hours":<​text>,​ /​* значение счетчика моточасов */ 
- "​flags":<​text>,​ /​* флаги (см. ниже) */ 
- "​mileage":<​text>,​ /​* значение счетчика пробега */ 
- "​traffic":<​text>​ /​* значение счетчика GPRS-трафика */ 
- } 
-} 
-</​code>​ 
- 
-Возможные флаги счетчиков:​ 
- * 1 - установить значение счетчика пробега 
- * 2 - установить значение счетчика моточасов 
- * 4 - установить значение счетчика GPRS-трафика 
- 
-=== Сохранить значение счетчика как параметр === 
-<code javascript>​ 
-{ 
- "​t":"​store_counter",​ /​* тип действия */ 
- "​p":​{ 
- "​engine_hours":<​text>,​ /​* название параметра для счетчика моточасов */ 
- "​flags":<​text>,​ /​* флаги (см. ниже) */ 
- "​mileage":<​text>​ /​* название параметра для счетчика пробега */ 
- } 
-} 
-</​code>​ 
- 
-Флаги: 
- * 1 - cохранить значение счетчика пробега как параметр 
- * 2 - cохранить значение счетчика моточасов как параметр 
- 
-=== Зарегистрировать статус объекта === 
-<code javascript>​ 
-{ 
- "​t":"​status",​ /​* тип действия */ 
- "​p":​{ 
- "​ui_text":<​text>​ /​* статус */ 
- } 
-} 
-</​code>​ 
- 
-=== Изменить вхождение в группы === 
-<code javascript>​ 
-{ 
- "​t":"​group_manipulation",​ /​* тип действия */ 
- "​p":​{ 
- "​add_to":<​text>,​ /​* добавить в указанные группы (список GUIDов групп через запятую) */ 
- "​remove_from":<​text>​ /​* исключить из указанных групп */ 
- } 
-} 
-</​code>​ 
- 
-=== Отправить отчет по e-mail === 
-<code javascript>​ 
-{ 
- "​t":"​email_report",​ /​* тип действия */ 
- "​p":​{ 
- "​user":<​text>,​ /​* GUID пользователя */ 
- "​report_object_guid":<​text>,​ /​* GUID элемента для отчета */ 
- "​report_object_id":<​text>,​ /​* ID подэлемента (0 - если отчет строится для элемента) */ 
- "​report_guid":<​text>,​ /​* GUID ресурса */ 
- "​report_id":<​text>,​ /​* ID шаблона */ 
- "​time_from":<​text>,​ /​* начало временного интервала */ 
- "​time_to":<​text>,​ /​* конец временного интервала */ 
- "​flags":<​text>,​ /​* флаги интервала */ 
- "​file_type":<​text>,​ /​* формат файла: html, pdf, xls, xlsx, xml, csv */ 
- "​email_to":<​text>,​ /​* e-mail адрес */ 
- "​pack":<​text>,​ /​* сжать файлы отчета (1 - да, 0 - нет) */ 
- "​params":<​text>,​ /​* конфигурация отчета (xml) */ 
-        "​lang":<​text>,​ /​* двухбуквенный код языка */ 
-        "​subj":<​text>​ /​* тема письма */ 
- } 
-} 
-</​code>​ 
-Флаги интервала рассмотрены в разделе [[../​report/​exec_report#​Параметры|Отчеты:​ Выполнение отчета]]. 
- 
-=== Назначить на маршрут === 
-<code javascript>​ 
-{ 
- "​t":"​route_control",​ /​* тип действия */ 
- "​p":​{ 
- "​name":<​text>,​ /​* название маршрута */ 
- "​descr":<​text>,​ /​* описание */ 
- "​flags":<​text>,​ /​* флаги маршрута */ 
- "​act_time":<​text>,​ /​* время активации */ 
- "​zone_id":<​text>​ /​* ID геозоны */ 
- } 
-} 
-</​code>​ 
- 
-Флаги маршрута рассмотрены в разделе [[update_route]]. 
- 
-=== Снятие водителя === 
-<code javascript>​ 
-{ 
- "​t":"​drivers_reset",​ /​* тип действия */ 
- "​p":​{} 
-} 
-</​code>​ 
- 
- 
- 
-===== Типы контроля ===== 
- * [[#​Контроль геозоны]],​ 
- * [[#​Контроль скорости]],​ 
- * [[#​Нажатие тревожной кнопки]],​ 
- * [[#​Активация/​дезактивация цифрового входа]],​ 
- * [[#​Контроль параметра в сообщении]],​ 
- * [[#​Контроль значения датчика]],​ 
- * [[#​Потеря связи или координат]],​ 
- * [[#​Простой Т/С]], 
- * [[#​Контроль SMS]], 
- * [[#​Взаиморасположение объектов]],​ 
- * [[#​Контроль маршрута]],​ 
- * [[#​Контроль водителя]],​ 
- * [[#​Техобслуживание]]. 
- 
-=== Контроль геозоны === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​geozone",​ /​* тип контроля */ 
- "​p":​{ 
- "​geozone_ids":<​text>,​ /​* список идентификаторов геозон (через запятую) */ 
- "​lower_bound":<​text>,​ /​* значение датчика от */ 
- "​max_speed":<​text>,​ /​* максимальная скорость,​ км/ч */ 
- "​merge":<​text>,​ /​* одинаковые датчики:​ 0 - считать отдельно,​ 1 - суммировать значения */ 
- "​min_speed":<​text>,​ /​* минимальная скорость,​ км/ч */ 
- "​reversed":<​text>,​ /​* срабатывать:​ 0 - в рамках установленных значений,​ 1 - за пределами установленных значений */ 
- "​sensor_name_mask":<​text>,​ /​* маска названия датчика */ 
- "​sensor_type":<​text>,​ /​* тип датчика */ 
- "​type":<​text>,​ /​* тип проверки:​ 0 - контролировать вход в геозону,​ 1 - контролировать выход из геозоны */ 
- "​upper_bound":<​text>​ /​* значение датчика до */ 
- } 
-} 
-</​code>​ 
- 
-=== Контроль скорости === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​speed",​ /​* тип контроля */ 
- "​p":​{ 
- "​lower_bound":<​text>,​ /​* значение датчика от */ 
- "​max_speed":<​text>,​ /​* максимальная скорость,​ км/ч */ 
- "​merge":<​text>,​ /​* одинаковые датчики:​ 0 - считать отдельно,​ 1 - суммировать значения */ 
- "​min_speed":<​text>,​ /​* минимальная скорость,​ км/ч */ 
- "​reversed":<​text>,​ /​* срабатывать:​ 0 - в рамках установленных значений,​ 1 - за пределами установленных значений */ 
- "​sensor_name_mask":<​text>,​ /​* маска названия датчика */ 
- "​sensor_type":<​text>,​ /​* тип датчика */ 
- "​upper_bound":<​text>​ /​* значение датчика до */ 
- } 
-} 
-</​code>​ 
- 
-=== Нажатие тревожной кнопки === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​alarm",​ /​* тип контроля */ 
- "​p":​{} 
-} 
-</​code>​ 
- 
-=== Активация/​дезактивация цифрового входа === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​digital_input",​ /​* тип контроля */ 
- "​p":​{ 
- "​input_index":<​text>,​ /​* цифровой вход (1-32) */ 
- "​type":<​text> ​ /* тип проверки:​ 0 - на активацию,​ 1 - на дезактивацию */ 
- } 
-} 
-</​code>​ 
- 
-=== Контроль параметра в сообщении === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​msg_param",​ /​* тип контроля */ 
- "​p":​{ 
- "​kind":<​text>,​ /​* тип контроля параметра */ 
- "​lower_bound":<​text>,​ /​* значение параметра от */ 
- "​param":<​text>,​ /​* название параметра */ 
- "​text_mask":<​text>,​ /​* текстовая маска */ 
- "​type":<​text>,​ /​* срабатывать:​ 0 - в рамках установленных значений,​ 1 - за пределами установленных значений */ 
- "​upper_bound":<​text>​ /​* значение параметра до */ 
- } 
-} 
-</​code>​ 
- 
-Типы контроля параметра:​ 
- * 0 - диапазон значений,​ 
- * 1 - текстовая маска, 
- * 2 - присутствие параметра,​ 
- * 3 - отсутствие параметра. 
- 
-=== Контроль значения датчика === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​sensor_value",​ /​* тип контроля */ 
- "​p":​{ 
- "​lower_bound":<​text>,​ /​* значение датчика от */ 
- "​merge":<​text>,​ /​* одинаковые датчики:​ 0 - считать отдельно,​ 1 - суммировать значения */ 
- "​sensor_name_mask":<​text>,​ /​* маска названия датчика */ 
- "​sensor_type":<​text>,​ /​* тип датчика */ 
- "​type":<​text>,​ /​* срабатывать:​ 0 - в рамках установленных значений,​ 1 - за пределами установленных значений */ 
- "​upper_bound":<​text>​ /​* значение датчика до */ 
- } 
-} 
-</​code>​ 
- 
-=== Потеря связи или координат === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​outage",​ /​* тип контроля */ 
- "​p":​{ 
- "​time":<​text>,​ /​* длительность потери (секунд) */ 
- "​type":<​text>​ /​* тип потери:​ 0 - координаты,​ 1  - связь */ 
- } 
-} 
-</​code>​ 
- 
-=== Простой Т/С === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​speed",​ /​* тип контроля */ 
- "​p":​{ 
- "​lower_bound":<​text>,​ /​* значение датчика от */ 
- "​max_speed":<​text>,​ /​* максимальная скорость,​ км/ч */ 
- "​merge":<​text>,​ /​* одинаковые датчики:​ 0 - считать отдельно,​ 1 - суммировать значения */ 
- "​min_idle_time":<​text>,​ /​* допустимое время простоя,​ мин */ 
- "​min_speed":<​text>,​ /​* минимальная скорость,​ км/ч */ 
- "​reversed":<​text>,​ /​* срабатывать:​ 0 - в рамках установленных значений,​ 1 - за пределами установленных значений */ 
- "​sensor_name_mask":<​text>,​ /​* маска названия датчика */ 
- "​sensor_type":<​text>,​ /​* тип датчика */ 
- "​upper_bound":<​text>​ /​* значение датчика до */ 
- } 
-} 
-</​code>​ 
- 
-=== Контроль SMS === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​sms",​ /​* тип контроля */ 
- "​p":​{ 
- "​mask":<​text>​ /​* маска для текста SMS-сообщения */ 
- } 
-} 
-</​code>​ 
- 
-=== Взаиморасположение объектов === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​interposition",​ /​* тип контроля */ 
- "​p":​{ 
- "​lower_bound":<​text>,​ /​* значение датчика от */ 
- "​max_speed":<​text>,​ /​* максимальная скорость,​ км/ч */ 
- "​merge":<​text>,​ /​* одинаковые датчики:​ 0 - считать отдельно,​ 1 - суммировать значения */ 
- "​min_speed":<​text>,​ /​* минимальная скорость,​ км/ч */ 
- "​radius":<​text>,​ /​* радиус,​ м */ 
- "​reversed":<​text>,​ /​* срабатывать:​ 0 - в рамках установленных значений,​ 1 - за пределами установленных значений */ 
- "​sensor_name_mask":<​text>,​ /​* маска названия датчика */ 
- "​sensor_type":<​text>,​ /​* тип датчика */ 
- "​type":<​text>,​ /​* тип проверки:​ 0 - контролировать приближение к объектам,​ 1 - контролировать удаление от объектов */ 
- "​unit_guids":<​text>,​ /​* GUIDы контролируемыx объектов (через запятую) */ 
- "​upper_bound":<​text>​ /​* значение датчика до */ 
- } 
-} 
-</​code>​ 
- 
- 
- 
-=== Контроль маршрута === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​route_control",​ /​* тип контроля */ 
- "​p":​{ 
- "​mask":<​text>,​ /​* маска имени маршрута */ 
- "​types":<​text>​ /​* типы контроля маршрута (через запятую) */ 
- } 
-} 
-</​code>​ 
- 
-Типы контроля маршрута:​ 
- * 1 - начало маршрута;​ 
- * 2 - завершение маршрута;​ 
- * 3 - прерывание маршрута;​ 
- * 11 - прибытие в контрольную точку; 
- * 12 - пропуск контрольной точки; 
- * 13 - отправление из контрольной точки; 
- * 14 - опоздание;​ 
- * 15 - опережение;​ 
- * 16 - возвращение в расписание;​ 
- * 21 - вход в геозону;​ 
- * 22 - выход из геозоны. 
- 
-=== Контроль водителя === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​driver",​ /​* тип контроля */ 
- "​p":​{ 
- "​driver_code_mask":<​text>,​ /​* маска кода водителя */ 
- "​flags":<​text>​ /​* тип контроля:​ 1 - назначение водителя, ​ 2 - снятие водителя */ 
- } 
-} 
-</​code>​ 
- 
- 
- 
-=== Техобслуживание === 
-<code javascript>​ 
-"​trg":​{ 
- "​t":"​service_intervals",​ /​* тип контроля */ 
- "​p":​{ 
- "​days":<​text>,​ /​* интервал в днях */ 
- "​engine_hours":<​text>,​ /​* интервал по моточасам,​ ч */ 
- "​flags":<​text>,​ /​* флаги контроля техобслуживания */ 
- "​mask":<​text>,​ /​* маска фильтра инревалов */ 
- "​mileage":<​text>,​ /​* интервал по пробегу,​ км */ 
- "​val":<​text>​ /​* уведомлять:​ 1 - о приближении срока техобслуживания,​ -1 - о просрочке */ 
- } 
-} 
-</​code>​ 
-Флаги контроля техобслуживания:​ 
- * 0 - не учитывать инетрвалы,​ 
- * 1 - интервал по пробегу,​ 
- * 2 - интервал по моточасам,​ 
- * 4 - интервал в днях. 
Follow us on Facebook Gurtam Wialon Twitter Gurtam Wialon info@gurtam.com   |   Copyright © 2002-2024 Gurtam