Перейти к содержанию

Мобильное приложение — Администрирование

Обзор

Администрирование мобильного приложения охватывает:

  1. Контейнеры — структура экранов (TabBar, Dashboard, MainMenu), блоки, доступность по группам.
  2. Шаблоны блоков (patterns) — параметры плиток, лент, стеков, кнопок (cross-link).
  3. Шаблоны задач — привязка к категориям, контексты Cell/MTF/NTF (cross-link + привязка).
  4. Навигация onTap — действия при нажатии (22+ action).
  5. Push-уведомления — настройка APNs/FCM (cross-link на notifications).
  6. Политики паролей МП — защита входа PIN/паролем.
  7. Статистика устройств — мониторинг установок и сессий.

1. Контейнеры

Контейнер — корневой объект экрана мобильного приложения. Контейнер содержит блоки (иерархия вложенная), блоки отрисовываются как плитки, кнопки, списки.

API

GET /app/v1.2/api/mobile/containers?v=1.2 — возвращает массив контейнеров с вложенными blocks.

Для запроса конкретного контейнера — передать его id в body запроса (например, "Tabbar").

Фиксированные ID контейнеров

Id контейнера — не уникальный идентификатор. Для некоторых контейнеров Id строго фиксированы и регистрозависимы (TabBartabBar).

Id Шаблон Назначение
TabBar toolbar Нижнее меню (таббар) — вкладки внизу экрана
Dashboard dashboard Главный рабочий стол
MainMenu menu Боковое меню (гамбургер)

Если для разных групп настроены разные контейнеры с одинаковым Id (например, несколько Dashboard) — отображается тот, у которого наименьший «Порядок» и совпадение по группам/смарт-фильтру.

Структура ответа

{
  "data": [
    {
      "blocks": [ ... ],
      "buttons": null,
      "isGroupFavourite": false,
      "parentNodeId": null,
      "id": "Tabbar",
      "template": {
        "badgeItemColor": "#496acc",
        "containerBackgroundColor": "",
        "itemColor": "#404040",
        "selectedItemColor": "#555555",
        "id": "toolbar"
      }
    }
  ],
  "total": 1,
  "aggregates": null
}

Блок внутри контейнера:

{
  "type": "Syndicate",
  "data": {
    "counter": 22,
    "type": "Feed",
    "title": "Лента"
  },
  "action": "Syndicate",
  "isGroupFavourite": false,
  "parentNodeId": null,
  "id": "Feed",
  "template": { ... }
}

Типы блоков (12 типов)

Палитра блоков в редакторе контейнера:

Тип блока Описание Возможные значения ID блока
Папка Вложенные блоки, иерархия. type = null. Stack (для шаблона dashboardStack — списка дашбордов). ID плиток не уникален.
Синдикат Набор данных (счётчик, список, заголовок). Платформа автоматически поставляет данные. См. таблицу «ID блоков-синдикатов» ниже
Настройки Переход к экрану настроек МП Settings
Задача Данные конкретной задачи (текст, номер) TaskNNN (NNN = номер задачи)
Контакт Данные пользователя (ФИО, ID, открытые ДП профиля) UserNNN (NNN = ID пользователя). Работает как элемент бокового меню.
Ссылка Ссылка внутри 1Формы или на внешний ресурс Произвольный
Форма новой задачи Открытие формы постановки задачи NewTaskNNN (NNN = ID категории)
Дашборд Открытие вложенного рабочего стола ID контейнера с шаблоном dashboard
Группа пользователей Все пользователи группы — плитки с контактами UserGroupNNN (NNN = ID группы)
Отчёт Web-версия отчёта Произвольный
Избранное Ссылки из блока «Избранное» пользователя Только в контейнерах с шаблоном menu
Избранное РМГ Рабочие места групп Только в контейнерах с шаблоном menu

Важно: для корректной работы нужно выбрать правильный элемент в палитре. Неверный тип → блок не отображает данные или не совершает действие.

ID блоков-синдикатов

Блоки типа «Синдикат» (платформа автоматически поставляет данные — счётчик, заголовки, ID сущностей):

ID блока Данные
Calls Звонки и история звонков
Chats Список чатов
Contacts Список контактов
CustomTaskSource Содержимое публикации
Feed Лента (вопросы, комментарии и т.д.)
DemoSpeech Голосовая постановка задачи (временно используемый ключ)
TasksFeed Лента задач (новые, просроченные, личные и т.д.)
MyQuestions Мои вопросы
QuestionsToMe Вопросы мне
OwnTasks Личные задачи
OverdueTasks Просроченные задачи
ToSign На подписи
Reports Отчёты
UserProfile Профиль текущего пользователя (работает корректно как блок рабочего стола)
TaskSourceNNN Задачи из источника данных, NNN = ID источника
SubcatNNN Задачи из категории, NNN = ID категории
SubcatAll Задачи из всех категорий
separator Заголовок — визуальный разделитель между элементами
MyQuestionsAndAnswers Исходящие вопросы и ответы на них
QuestionToMeAndAnswers Входящие вопросы и ответы на них

Доступность контейнеров и блоков

Доступность определяется группами пользователей и смарт-фильтром.

Настройка: кнопка «Группы» в строке контейнера → создать привязку «контейнер → группа». Для каждой группы — отдельная запись.

Логика выбора контейнера (при нескольких с одинаковым Id):

  1. Контейнер с наименьшим «Порядок», для которого указана группа пользователя И смарт-фильтр = true.
  2. Если ни одна группа не подошла — контейнер с наименьшим «Порядок» без указанных групп И смарт-фильтр = true.
  3. Если и такого нет — произвольный контейнер с этим Id.

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

Права администратора в редакторе

Администраторы (пользователи с полными правами) могут открывать любой контейнер в редакторе админки независимо от привязки к группам. Если администратор не входит в группу контейнера, для него пропускаются фильтры по группам и смарт-выражениям — в редактор отдаётся первая активная запись с заданным ClientId.

Доступность блоков (внутри контейнера): - Ключ groups — массив ID групп через запятую. При непустом значении МП проверяет пересечение групп пользователя и массива. Если пересечение пустое — блок не отображается. - Фильтрация по группам может быть на уровне стека (папки) целиком. Внутри папки — дополнительные фильтрации и скрытия. - Отображение не меняется при замещении — только группы реального пользователя.

Счётчики и скрытие

counter — число, рассчитываемое сервером в зависимости от конфигурации блока (кол-во задач, вопросов, подписей и т.д.). Ненулевое значение отображается как значок-счётчик на плитке.

Структура data.tasksCounters:

{
  "tasksCounters": {
    "allTasksCount": null,
    "newTasksCount": 0,
    "overdueTasksCount": 0,
    "allTasksUserOwns": 2,
    "allTasksUserPerforms": 0
  }
}

Если в шаблоне блока hideOnZeroCount = 1 и counter = 0 или null — блок не отображается.

Кнопки верхней панели (rightBarButtons)

Ключ rightBarButtons в шаблоне контейнера — JSON-строка с массивом объектов onTap. Настраивается в настройках главного контейнера.

Пример:

[
  {
    "action": "openCallHistory",
    "icon": "RecentTasks"
  },
  {
    "action": "openTaskSource",
    "dataSourceUrl": "/app/v1.2/api/publications/action/mob-notifications",
    "icon": "Notification",
    "tickerAlias": "badge"
  }
]

Основные action для rightBarButton:

Action Описание
openCalendar Открыть календарь встреч
openCallHistory История звонков ВКС (последние 100 звонков)
openVideoConferenceRoom Открыть ВКС-комнату

Ключ tickerAlias — название системного счётчика (или номер кастомного). Прикрепляет произвольный счётчик для отображения на иконке.

Ключ tickerColor — цвет значка счётчика (hex, например "E05040").

Пример настройки истории звонков:

{
  "action": "openCallHistory",
  "icon": "RecentTasks",
  "tickerAlias": "missedCalls",
  "tickerColor": "E05040"
}

TabBar (нижнее меню)

TabBar — контейнер с фиксированным Id = TabBar, шаблон toolbar.

Параметр Значение
Id контейнера TabBar
Шаблон toolbar
Макс. блоков 6
Шаблон блоков toolbaritem
Макс. элементов 5

В таббаре возможно настроить только один элемент с type: "dashboard".

Допустимые ID элементов TabBar

ID Экран при нажатии
Calls История звонков
Chats Список чатов
Contacts Контакты пользователя
Settings Настройки МП
Feed Лента комментариев
Dashboard Главный дашборд
TasksFeed Лента задач
ToSign Список подписей
Folder Папка (группировка элементов)
SubcatNNN Категория (NNN = ID системной категории)
TaskSourceNNN Источник данных задач
CustomTaskSource Кастомный TaskSource

Кнопка «Лента» (Feed) меняет заголовок в зависимости от выбранной категории/раздела (если выбраны задачи — заголовок «Задачи» и т.д.).

Настройка календаря в TabBar

  1. Выбрать шаблон Синдикат.
  2. Указать Id = SubcatXXX, где XXX = номер системной категории календаря.

Настройка кастомного source в TabBar

  1. Выбрать шаблон Синдикат.
  2. Указать Id = CustomTaskSource.
  3. В ключе dataSourceUrl указать ссылку на кастомный source.

Ключи шаблона toolbaritem (блок TabBar)

Ключ Описание
badgeItemColor Цвет фона счётчика (hex #123456, с опциональной альфой #123456FF, краткие #000 / #000F)
fallBackTitle Подпись под иконкой
groups ID групп через запятую (массив чисел)
icon Название иконки вкладки
isDefault 1 — вкладка открывается при старте приложения. Если у всех 0 — дефолтная Dashboard или первая по порядку
topTitle Текст заголовка экрана. Если пустой — берётся fallBackTitle
id Название шаблона (toolbaritem, tasksFeed)

addButton — меню создания задач

addButton — массив объектов onTap для создания задачи (openNewTask). Настраивается как в шаблоне cell категории, так и в элементе контейнера toolbar'а.

{
  "addButton": [
    {
      "icon": "GroupChat",
      "action": "openNewTask",
      "title": "Групповой чат",
      "id": 978
    },
    {
      "icon": "Chat",
      "action": "openNewTask",
      "title": "Чат",
      "id": 969
    },
    {
      "icon": "Calendar",
      "action": "openNewTask",
      "title": "Встреча",
      "id": 1507
    },
    {
      "icon": "Task",
      "action": "openNewTask",
      "title": "Личная задача",
      "id": 43350
    }
  ]
}

Важен только action: "openNewTask" и id — номер категории, куда будет ставиться задача.

Операции с контейнерами

Операция Как
Создать Кнопка «Создать». Id должен начинаться с латинской буквы. Выбрать шаблон.
Редактировать Клик по строке → изменить название, шаблон, группы, активность, смарт-фильтр. Сохранить.
Копировать Кнопка «Создать копию» → полный дубль контейнера.
Удалить Кнопка «Удалить» на форме или в контекстном меню строки.
Редактор Кнопка «Редактор» → дерево блоков + макет. Блоки перетаскиваются мышкой.

Для блоков «Избранное» и «Избранное РМГ» — можно добавлять только в контейнеры с шаблоном menu.


2. Шаблоны блоков (patterns)

Полный справочник 12 шаблонов блоков с 60+ ключами, справочник иконок (80+), локализация — см. mobile-templates.md § Часть 2.

Критично: обработка шаблона — в коде приложения. Новые ключи при обновлении платформы не добавляются автоматически — администратор должен вручную добавить ключ в JSON шаблона.

Подтипы шаблонов, выделявшиеся отдельно, отражены в Части 2 mobile-templates.md:

Подтип Содержание Где в mobile-templates.md
Карусель Горизонтальная прокрутка (slideShow = 1 в dashboardItem) Секция dashboardItem, ключ slideShow
Стек Вертикальный / горизонтальный стек (dashboardStack, ключ style) Секция dashboardStack, подразделы vertical/horizontal

3. Шаблоны задач

Полный справочник шаблонов задач (Cell/MTF/NTF контексты, статические/динамические, локализация, JSON-редактор) — см. mobile-templates.md § Часть 1.

Привязка шаблонов к категориям

Для одной категории можно настроить несколько шаблонов задач — статических и/или динамических.

Быстрая генерация шаблонов

Кнопки на форме привязки:

Кнопка Что делает
«Генерация шаблона по умолчанию для карточки задачи» Создаёт стандартный шаблон для MTF-контекста текущей категории
«Генерация шаблона по умолчанию для карточки новой задачи» Создаёт стандартный шаблон для NTF-контекста

При необходимости — указать дополнительные языки. Название шаблона автоматически = название категории.

После создания шаблон доступен через кнопку «Шаблон из списка».

Параметры привязки

Параметр Значения Описание
Тип клиента mobile Только в мобильном приложении
\ web Только в веб-интерфейсе (в настоящее время не используется)
\ all Везде (фактически = mobile)
Контекст NTF Карточка новой задачи (при создании)
\ MTF Карточка задачи (при просмотре)
\ Cell Краткое представление (в списке задач)
Активность вкл/выкл Временно отключить шаблон без удаления
Смарт-фильтр условия Условия для использования шаблона. Если ни одно условие не выполнено — используется стандартный шаблон приложения

Динамические шаблоны

Для динамического шаблона кнопка редактора открывает окно настроек (секции → блоки → элементы, порядок кнопками со стрелками). Кнопка «JSON» — просмотр и редактирование в формате JSON.


4. Навигация onTap

Через onTap-события настраивается навигация в мобильном приложении: переход в карточку задачи, логика перехода по плиткам, меню создания (addButton, rightBarButton).

Ключи onTap

Ключ Значение Описание
id Число (234) ID объекта (категории, пользователя, задачи, таблицы BI и т.д.)
action См. таблицу ниже Действие при нажатии
context "название шаблона контекста" Открыть определённый контекст объекта из его шаблона
epId Число (2345) ID ДП, из которого берётся значение для обработки. Если id не задан явно — значение берётся из указанного ДП.
dataSourceUrl "/app/v1.2/api/publications/action/mob-rest-basket" Ссылка на кастомный TaskSource (публикацию, отдающую ленту задач)
type См. типы лент Тип ленты задач или комментариев
items Массив объектов Список пунктов модального меню

Правило epId

Если указан action, но не указан id: - openTaskSource → id берётся из ДП с epId - openTask → номер задачи из ДП с epId - openLink → ссылка из ДП с epId

Значения action (22+)

Action Описание
openTask Открыть карточку задачи (по умолчанию)
openUsedBlock Открыть список задач блока «Используется» из категории
forbidOpen Запрет перехода при нажатии на ячейку задачи
openSignatures Открыть список подписей
openCommentsFeed Открыть ленту комментариев
openNewTask Открыть форму создания новой задачи
openTaskSource Открыть TaskSource. Используется с dataSourceUrl
openSubcategory Открыть категорию. Используется с id
openTaskFeed Открыть ленту задач указанного типа
openUserProfile Открыть профиль пользователя
showAlert Показать уведомление
openLink Открыть ссылку
openCallHistory Открыть историю звонков ВКС
openVideoConferenceRoom Открыть ВКС-комнату
openCalendar Открыть календарь встреч
openMenu Открыть модальное меню со списком пунктов (используется с items)
openMail Открыть почтовый клиент. Аккаунты добавляются в веб-версии 1Формы
openCategoryTree Открыть дерево категорий
scanCode Сканер: QR + EAN13 (все коды)
scanEAN13Code Сканер: только EAN13
scanQRCode Сканер: только QR
openGlobalSearch Глобальный поиск по задачам/чатам/сотрудникам
openTaskHistory История задач текущего пользователя
openDisk Дисковое хранилище текущего пользователя

Типы лент (type)

Значение Описание
All Все задачи
New Новые
Created Созданные
Discussions Обсуждения
Owner Заказчик
Performer Исполнитель
Favorites Избранные
Overdue Просроченные
LastCommented Последние с комментариями
PinnedToChat Все закреплённые переписки
PrivateChat Личные чаты
GroupChat Групповые чаты

Пример interactions (longTap)

{
  "longTap": {
    "action": "openMenu",
    "items": [
      {"title": "История", "action": "openTaskSource", "id": 67, "icon": "RecentTasks"},
      {"title": "Все категории", "action": "openCategoryTree", "icon": "AllCategories"}
    ]
  }
}

5. Push-уведомления

Push-уведомления для мобильных приложений настраиваются в домене notifications.

См. ../notifications/admin.md — конфигурация APNs/FCM, сертификаты iOS, отправка с бэкенда.

Бизнес-логика — ../notifications/business.md.


6. Политики паролей мобильного приложения

Доступ в мобильное приложение можно защитить дополнительным паролем (помимо пароля учётной записи). Пароль запрашивается при каждом входе в МП.

Типы политик

Политика Описание
Пароль не обязателен Дополнительный пароль не запрашивается
4 цифры 4-значный PIN-код
6 цифр 6-значный PIN-код
Буквенно-цифровой пароль Произвольный пароль по регулярному выражению

При выборе «Буквенно-цифровой пароль» — заполнить поля:

Поле Описание Пример
Регулярное выражение Паттерн валидации ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
Сообщение Текст ошибки для пользователя Пароль должен содержать от 6 до 20 символов, включая цифры, строчные и прописные буквы, а также один из спец символов @ # $ %

Привязка к группам

Политики привязываются к группам пользователей (кнопка «Группы» в строке политики). Для каждой группы — отдельная запись.

Если пользователь входит в несколько групп с разными политиками — применяется наиболее строгая политика.

Добавление политики

  1. Нажать «Создать».
  2. Выбрать тип политики.
  3. Для буквенно-цифрового — заполнить regex и сообщение.
  4. Кнопка «Группы» → добавить привязки групп.

7. Статистика устройств

Страница «Статистика использования мобильных приложений» — мониторинг установок, сессий и активности пользователей.

Типы данных

Тип Описание
Install Установка МП и обновления
Session Сессии пользователей
Work Действия пользователей в МП (просмотр ленты, задач, комментариев, чатов и т.д.)

Поля записи

  • Платформа (iOS / Android)
  • Версия приложения
  • Версия ОС (прошивка)
  • Дата последнего входа

Записи отображаются в обратном хронологическом порядке (последние — сверху). Сортировка изменяется кликом по заголовку колонки.

Все данные — только для чтения.


8. Геолокация

Геолокация собирает координаты пользователей с мобильных устройств и отображает их на карте в виде траекторий (провайдер — Microsoft Bing).

⚠️ Доступно только в брендированном мобильном приложении (white-label).

Путь: Администрирование → Мобильное приложение → Геоданные

Предварительные требования

  1. Настроить Bing API-ключ в Общих настройках → «Провайдер карт» (см. system/admin.md).
  2. Настроить группу отслеживания и параметры сбора (см. ниже).
  3. В профилях пользователей группы отслеживания не должен быть включён флаг «Не использовать геолокацию».
  4. На мобильных устройствах пользователей выдать разрешение на передачу геоданных.
  5. В БД должна существовать хранимая процедура tc_LocationReport.

Параметры сбора геоданных

Параметр Тип Описание
Группа для отслеживания Группа пользователей Группа, для которой автоматически включается сбор координат при входе через МП. Если не задана — автоматический сбор не запускается.
Группа-администратор Группа пользователей Группа, которой разрешён просмотр истории местоположения всех пользователей.
Интервал слежения (начало / конец) Время суток Диапазон, в котором ведётся сбор (только в рабочие дни). Логика: начало < конца → сбор внутри промежутка (09:00–19:00); начало > конца → сбор «снаружи» (19:00–09:00); начало = концу → круглосуточно. Незаполненные поля — сбор не ведётся (предпочтительнее отключать флажками ниже).
Хранить геоданные, дней Число Срок хранения собранных точек в системе.
Собирать при активных действиях Флажок Отправка координат при активных действиях в задаче: изменение ДП, переход по маршруту, отправка сообщения, IP-звонок.
Собирать периодически Флажок Отправка по таймеру с интервалом из поля «Частота отправки».
Показывать настройки в МП Флажок Пользователь видит параметры сбора в настройках мобильного приложения.
Частота логирования, мин Число Интервал (в минутах), с которым координаты фиксируются в журнале устройства.
Частота отправки на сервер, мин Число Интервал (в минутах), с которым координаты отправляются на сервер.
Смарт-выражение Смарт-выражение Возвращает строку с параметрами для всплывающего окна на карте (по клику на точку траектории).

⚠️ При изменении состава группы отслеживания или любых других настроек сбора всем участникам группы-администратора отправляются «тихие» push-уведомления (без звукового сигнала).

Отчёт геолокации

SPA-ссылка: /spaex.aspx/geo-location/history. Данные формируются хранимой процедурой tc_LocationReport (параметры: @userId, @filter в XML — DateFrom, DateTo, group, user).


CustomSettings — глобальные ключи мобильного клиента

Ключ Тип Назначение
MobileAppSettings.mspaByDefault bool Если true — в МП в боковом меню «Настройки» скрывается кнопка «Перейти в Desktop версию». Если false — кнопка отображается
MobileAppSettings.openInBrowserDomains array Список доменов (без https://), для которых ссылки из МП открываются во внешнем браузере устройства, а не во встроенном WebView. Пример: ["2ip.ru","ya.ru"]

Связанные

  • mobile/business.md — бизнес-логика мобильного приложения
  • mobile/backend.md — бэкенд (API контейнеров и шаблонов)
  • mobile/frontend.md — фронтенд (рендеринг шаблонов)
  • mobile/mobile-templates.md — полный справочник шаблонов задач и блоков
  • notifications/admin.md — Push-уведомления
  • notifications/business.md — бизнес-логика уведомлений