Мобильное приложение — Администрирование¶
Обзор¶
Администрирование мобильного приложения охватывает:
- Контейнеры — структура экранов (TabBar, Dashboard, MainMenu), блоки, доступность по группам.
- Шаблоны блоков (patterns) — параметры плиток, лент, стеков, кнопок (cross-link).
- Шаблоны задач — привязка к категориям, контексты Cell/MTF/NTF (cross-link + привязка).
- Навигация onTap — действия при нажатии (22+ action).
- Push-уведомления — настройка APNs/FCM (cross-link на notifications).
- Политики паролей МП — защита входа PIN/паролем.
- Статистика устройств — мониторинг установок и сессий.
1. Контейнеры¶
Контейнер — корневой объект экрана мобильного приложения. Контейнер содержит блоки (иерархия вложенная), блоки отрисовываются как плитки, кнопки, списки.
API¶
GET /app/v1.2/api/mobile/containers?v=1.2 — возвращает массив контейнеров с вложенными blocks.
Для запроса конкретного контейнера — передать его id в body запроса (например, "Tabbar").
Фиксированные ID контейнеров¶
Id контейнера — не уникальный идентификатор. Для некоторых контейнеров Id строго фиксированы и регистрозависимы (
TabBar≠tabBar).
| 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):
- Контейнер с наименьшим «Порядок», для которого указана группа пользователя И смарт-фильтр = true.
- Если ни одна группа не подошла — контейнер с наименьшим «Порядок» без указанных групп И смарт-фильтр = true.
- Если и такого нет — произвольный контейнер с этим 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¶
- Выбрать шаблон Синдикат.
- Указать Id =
SubcatXXX, где XXX = номер системной категории календаря.
Настройка кастомного source в TabBar¶
- Выбрать шаблон Синдикат.
- Указать Id =
CustomTaskSource. - В ключе
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 символов, включая цифры, строчные и прописные буквы, а также один из спец символов @ # $ % |
Привязка к группам¶
Политики привязываются к группам пользователей (кнопка «Группы» в строке политики). Для каждой группы — отдельная запись.
Если пользователь входит в несколько групп с разными политиками — применяется наиболее строгая политика.
Добавление политики¶
- Нажать «Создать».
- Выбрать тип политики.
- Для буквенно-цифрового — заполнить regex и сообщение.
- Кнопка «Группы» → добавить привязки групп.
7. Статистика устройств¶
Страница «Статистика использования мобильных приложений» — мониторинг установок, сессий и активности пользователей.
Типы данных¶
| Тип | Описание |
|---|---|
| Install | Установка МП и обновления |
| Session | Сессии пользователей |
| Work | Действия пользователей в МП (просмотр ленты, задач, комментариев, чатов и т.д.) |
Поля записи¶
- Платформа (iOS / Android)
- Версия приложения
- Версия ОС (прошивка)
- Дата последнего входа
Записи отображаются в обратном хронологическом порядке (последние — сверху). Сортировка изменяется кликом по заголовку колонки.
Все данные — только для чтения.
8. Геолокация¶
Геолокация собирает координаты пользователей с мобильных устройств и отображает их на карте в виде траекторий (провайдер — Microsoft Bing).
⚠️ Доступно только в брендированном мобильном приложении (white-label).
Путь: Администрирование → Мобильное приложение → Геоданные
Предварительные требования¶
- Настроить Bing API-ключ в Общих настройках → «Провайдер карт» (см.
system/admin.md). - Настроить группу отслеживания и параметры сбора (см. ниже).
- В профилях пользователей группы отслеживания не должен быть включён флаг «Не использовать геолокацию».
- На мобильных устройствах пользователей выдать разрешение на передачу геоданных.
- В БД должна существовать хранимая процедура
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 — бизнес-логика уведомлений