Справочный центр eXpress
Собрали ответы на все самые популярные вопросы, чтобы вам было легко и удобно пользоваться eXpress. Также вам может помочь наша База знаний. Если вы не найдете ответ на свой вопрос, свяжитесь с нашей службой поддержки.
- Справочный центр
- Что такое eXpress
- Установка и системные требования
- Регистрация и авторизация
- Мой профиль в eXpress
- Чаты, каналы и обсуждения
- Контакты
- Теги
- Файлы
- Звонки и конференции
- Уведомления
- Чат-боты и Smart Apps
- Инженерное меню и логи
- Очистка кэша и полное удаление
- Администратору сервера
- Документация
- Политика конфиденциальности
- Условия лицензирования
Чаты, каналы и обсуждения
- Обзор чатов в eXpress
- Администраторы чатов и каналов
- История чатов и сквозное шифрование
- Открытые и закрытые чаты и каналы
- Роутинг — как идёт трафик в чате
- Как создать персональный чат, групповой чат или канал?
- Как добавить участников в групповой чат или канал?
- Как найти нужный корпоративный чат?
- Ограничения по числу участников в групповом чате или канале
- Как открыть историю для новых участников?
- Форматирование текста сообщений
- Как создать опрос в чате?
- Обсуждения в чатах и каналах
- Редактирование, удаление и пересылка сообщений
- Как отправить сообщение или файл самому себе?
- Возвращение в чаты после их удаления или выхода с сервера
- Как добавить стикеры в eXpress?
- Ошибки чатов, каналов и обсуждений
Обзор чатов в eXpress
- персональные — чат с одним пользователем;
- групповые — для общения, писать могут все, участники видят друг друга;
- каналы — для новостей, пишут и видят участников только администраторы;
- комнаты — групповые чаты, которые хранят переписку и материалы конференций;
- сохранённые сообщения — предназначен для отправки сообщений самому себе. Включается или восстанавливается после удаления в настройках приложения. Любое сообщение можно отправить в этот чат через контекстное меню.
- обсуждения — это возможность любому участнику прокомментировать то или иное сообщение в групповом чате или канале.
- персональные с контактами из телефонной книги;
- персональные с корпоративными контактами;
- групповые с контактами из телефонной книги;
- групповые с корпоративными контактами;
- смешанные чаты с участниками с серверов разных организаций;
- персональные чаты с чат-ботами.
- Посмотрите на значок рядом с названием чата:
- зеленый глобус — чат внешних пользователей;
- синий глобус — чат пользователей корпоративных серверов из разных организаций;
- сине-зелёный глобус — смешанный чат с корпоративными и внешними пользователями;
- синий чемоданчик — чат с пользователями с текущего или с трастового корпоративного сервера;
- синий мегафон — канал с корпоративными пользователями;
- сине-зелёный мегафон — канал с корпоративными и внешними пользователями;
- синий бот — персональный чат с корпоративным чат-ботом.
- Откройте Роутинг в свойствах чата.
- Откройте и просмотрите список участников чата: участники сгруппированы по принадлежности к серверам.
Отличия группового чата и канала
- В групповом чате могут писать все участники, в канале — только администраторы. Канал удобен для публикации новостей, групповой чат — для общения всех участников.
- В групповом чате любой участник может просматривать состав чата и видеть системные сообщения, в канале — только администратор. Обычные подписчики канала (не администраторы) не могут видеть других участников канала.
- Для обычных участников отправитель сообщения в канале — сам канал, для администраторов — конкретный пользователь.
- Если в чате/канале включены обсуждения:
- в каналах нет автоматической подписки на обсуждения, пользователь сам присоединяется к интересующему его обсуждению;
- в чатах есть автоматическая подписка на обсуждения, она зависит от важности чата для пользователя (см. обзор функции обсуждений в видео).
Хранение чатов
Все чаты хранятся на сервере в зашифрованном виде. Благодаря этому данные не потеряются, даже если Вы завершите сессию или переустановите приложение — просто авторизуйтесь в приложении снова, и чаты загрузятся с сервера на Ваше устройство. На устройстве чаты также будут храниться в зашифрованном хранилище.- при смене номера телефона (потому что поменяется уникальный идентификатор аккаунта — HUID);
- при выходе с корпоративного сервера (исчезнут только корпоративные чаты).
- после сброса личного пароля от ключей шифрования во время авторизации (пропадёт только история во всех чатах, сами чаты останутся).
Администраторы чатов и каналов
Лишить участника прав администратора может создатель или другой администратор чата в контекстном меню участника (веб/десктоп) или по долгому нажатию на него в списке участников (Android).
Информация для системного администратора или поддержки
Можно управлять правами администратора чата в панели администратора: в разделе Чаты ищем нужный чат > открываем Пользователи > переключаемtrue
и false
в столбце Администратор.
История чатов и сквозное шифрование
- Сквозное шифрование выключено — в них можно добавить больше 128 участников и история с момента отключения открыта. Переписка шифруется общим серверным ключом, а не ключами каждого отдельного участника чата. Потому и появится возможность добавить в чат больше пользователей (шифрование ресурсоёмко) и увидеть старую историю. Это менее безопасно, потому что в теории, если кто-либо получит доступ к серверу, он сможет похитить общий ключ с сервера, загрузить зашифрованную переписку к себе и расшифровать её похищенным ключом. Чаты с отключённым сквозным шифрованием на аватаре имеют значок с приоткрытым замочком.
- Сквозное шифрование включено — строго до 128 участников, история закрыта. Никакое третье лицо не сможет расшифровать переписку, поскольку не существует общего универсального ключа, и переписка расшифровывается только у тех, кто присутствует в чате, их личными уникальными ключами. Единственный минус сквозного шифрования — новые участники чата не смогут увидеть старую переписку, потому что старые сообщения не шифровались их ключами, так как их не было в чате на момент написания сообщения. Перешифровать старые сообщения для нового пользователя нельзя: сделать это может только клиент-отправитель (в этом и состоит суть сквозного шифрования), сервер — не может, однако, и сделать так, чтобы клиентское приложение перешифровывало, невозможно.
Информация для системного администратора или поддержки
Выключить сквозное шифрование в каналах можно только из приложения, в панели администратора данный функционал отсутствует. Канал в панели администратора можно только преобразовать в открытый.Информация для системного администратора или поддержки
В панели администратора по признакуsharedHistory:true
можно определить, открыта ли история чата. Он появляется при выключении сквозного шифрования в панели администратора (только для чатов). Признак можно увидеть в панели администратора у чата в разделе Чат JSON.
Открытые и закрытые чаты и каналы
- Открытые чаты и каналы. К ним относятся корпоративные чаты и каналы, к которым может присоединиться любой желающий из зарегистрированных на сервере пользователей через Каталог. Создать изначально открытый чат или канал, или преобразовать закрытый чат или канал в открытый можно только в панели администратора на конкретном сервере.
Информация для системного администратора или поддержки
В панели администратора корпоративного сервера:- Чтобы создать открытый чат или канал, откройте раздел Открытые чаты и нажмите кнопку Создать. Первого участника открытого чата нельзя добавить в панели администратора. Первый участник должен сам присоединиться с клиентского приложения через каталог.
- Чтобы преобразовать закрытый чат или канал в открытый, найдите чат в разделе Чаты и нажмите кнопку Преобразовать в открытый чат. При преобразовании закрытого чата или канала в открытый в нём автоматически выключается сквозное шифрование. При необходимости сквозное шифрование можно будет включить позже, но при этом не стоит забывать об ограничениях, накладываемых им.
Чаты загружаются на серверы каждого участника. Поэтому, чтобы сделать чат открытым на нескольких серверах, нужно для начала убедиться, что в чате есть хотя бы один пользователь с нужного сервера. Если его нет, необходимо добавить в чат хотя бы одного такого пользователя (в панели администратора или из приложения).- Закрытые чаты и каналы. Такими корпоративные чаты и каналы являются при создании по умолчанию. Изначально чаты и каналы создаются для ограниченного круга лиц. Новых пользователей в закрытый чат или канал добавляет администратор данного чата вручную или по пригласительной ссылке. Администратор корпоративного сервера может сделать открытый чат или канал закрытым в панели администратора.
Информация для системного администратора или поддержки
Чтобы закрыть открытый чат, откройте раздел Открытые чаты и нажмите кнопку-корзину напротив желаемого открытого чата или в разделе Чаты найдите чат и на его странице нажмите кнопку Удалить из открытых чатов.Роутинг — как идёт трафик в чате
Роутинг или схема маршрутизации — это наглядное схематическое представление маршрутов обмена сообщениями между пользователями в чате любого типа.
Схема формируется относительно участника чата, просматривающего её. Линиями на схеме указаны пути от сервера данного пользователя до серверов других участников чата. Трастовые (доверенные) корпоративные серверы соединены линией друг с другом.
Таким образом, роутинг чата позволяет увидеть, через какие серверы маршрутизируется трафик в конкретном чате.
Если чат находится в рамках одного сервера или между трастовыми серверами, трафик будет идти, минуя региональный транспортный сервер (RTS). Если чат создан между нетрастовыми серверами или среди участников есть хотя бы один пользователь с внешнего сервера, трафик будет идти через региональный транспортный сервер.Как создать персональный чат, групповой чат или канал?
Для создания персонального чата выполните действия, описанные в таблице ниже.
Версия приложения Как написать контакту Android Откройте карточку контакта из раздела Контакты > нажмите кнопку сообщения; найдите его в поиске по чатам; нажмите «карандаш» внизу справа на списке чатов > найдите пользователя > откройте его карточку > нажмите кнопку сообщения
iOS Откройте карточку контакта из раздела Контакты > нажмите кнопку сообщения;
нажмите «карандаш» в правом верхнем углу > найдите пользователя > откройте его карточку > нажмите кнопку сообщения
Веб/десктоп Откройте карточку контакта из раздела Контакты > нажмите кнопку сообщения;
найдите его в поиске по чатам;
нажмите «плюсик» в правом верхнем углу > Персональный чат > выберите контакт
Для создания группового чата или канала выполните действия, описанные в таблице ниже.
Версия приложения Как создать групповой чат или канал Android Нажмите «карандаш» внизу справа на списке чатов > выберите Групповой чат или Канал > добавьте пользователей через поиск или создайте ссылку-приглашение > укажите название чата > чат создан iOS Нажмите «карандаш» в правом верхнем углу > далее аналогично Веб/десктоп Нажмите «плюсик» в правом верхнем углу > далее аналогично Как добавить участников в групповой чат или канал?
Существуют следующие способы добавления участников:- Администратор чата или канала может добавить участников вручную. Для этого ему нужно открыть карточку чата, нажать Добавить участников и воспользоваться поиском.
- Администратор чата или канала может создать ссылку-приглашение, которую можно распространить. Для этого ему нужно открыть карточку чата, нажать Добавить участников – Ссылка и далее создать ссылку с определёнными параметрами.
- Групповой чат или канал можно сделать открытым (см. выше), чтобы пользователи корпоративного сервера могли его найти среди других открытых чатов через Каталог. Для этого нужно обратиться к системному администратору корпоративного сервера. Если Вы не знаете, с кем нужно связаться, обратитесь в поддержку своей организации или в поддержку eXpress.
- Также администратор корпоративного сервера может вручную или списком добавить пользователей через панель администратора. Чтобы связаться с ним, обратитесь в поддержку своей организации или в поддержку eXpress.
Добавление списком — информация для системного администратора или поддержки
Существует способ через панель администратора быстро добавить в чат/канал, например, всех пользователей корпоративного сервера:
1. Выгрузите всех зарегистрированных корпоративных пользователей: Пользователи > Cкачать как csv > отметьте только cts_user > сохраните файл.
2. Далее в панели администратора откройте чат > Пользователи > Импорт пользователей > загрузите ранее сохранённый файл.Как найти нужный корпоративный чат?
Чтобы просмотреть открытые корпоративные чаты и каналы, выберите Каталог на главном экране приложения. В каталоге отображаются открытые чаты, каналы и боты корпоративного сервера, на котором Вы зарегистрированы. Если искомый чат или канал закрыт, в каталоге Вы его не увидите. В закрытые корпоративные чаты и каналы можно попасть только по приглашению их создателя или администратора, либо Вы можете попросить администратора корпоративного сервера добавить Вас в закрытый чат через панель администратора (для этого обратитесь в поддержку своей организации или в поддержку eXpress).
Ограничения по числу участников в групповом чате или канале
По умолчанию чаты и каналы создаются с включённым сквозным шифрованием, из-за которого появляется ограничение в 128 участников. Ограничение может снять администратор чата, выключив Сквозное шифрование в свойствах чата, либо администратор корпоративного сервера в панели администратора (к нему нужно обращаться через Вашу поддержку или через поддержку eXpress).
Вернуть сквозное шифрование возможно только в том случае, если количество участников не превышает 128 пользователей.
В чатах с выключенным сквозным шифрованием есть техническое ограничение в 8000 пользователей. Этот показатель будет увеличен в будущем.
Как открыть историю для новых участников?
Администратору чата или канала нужно отключить Сквозное шифрование в свойствах.
Учтите, что:
- новые участники увидят в истории только те сообщения, которые поступили с момента отключения сквозного шифрования;
- если сквозное шифрование выключили, но на момент отправки сообщений в чат не были добавлены пользователи конкретного сервера — предыдущую историю первый участник с этого сервера не увидит. Следующие участники будут видеть историю с момента добавления первого пользователя с их сервера.
Если администратору чата или канала нужно, чтобы новые участники видели всю историю, необходимо:
- добавить хотя бы по одному пользователю со всех нужных серверов;
- выключить сквозное шифрование сразу, ещё на этапе создания чата.
Форматирование текста сообщений
Форматировать текст сообщений в eXpress можно с использованием специальных символов Markdown:
СтильОбозначениеПолужирный текст**полужирный текст**
Курсивный текст*курсивный текст*
Полужирный курсив***полужирный курсив***
Маркированный список* 1-й элемент * 2-й элемент * 3-й элемент
Зачёркнутый текст~~зачёркнутый~~
Блок кода без указания языка``` код ```
Блок кода с указанием языка1```язык код ```
Код в строке`код в строке`
Ссылки[текст ссылки](www.example.com)
Теги#тег
Упоминания@участник чата
@@не участник чата
1 Языки, для которых доступно выделение синтаксиса: sh, zsh, bash, basic, clojure, cmake.in, cmake, coffeescript, coffee, cson, iced, patch, cpp, cs, css, diff, jinja, django, docker, dockerfile, delphi, elixir, elm, erlang, go, haskell, ini, java, js, jsx, javascript, json, kotlin, less, lisp, llvm, lua, makefile, matlab, nginx, ocaml, perl, php, ps, powershell, prolog, python, r, rb, gemspec, podspec, thor, irb, ruby, rs, rust, scala, scss, shell, sql, swift, tex, twig, ts, typescript, vbs, vbscript, xml, yml, yaml.Как создать опрос в чате?
Для создания опроса в чате используется корпоративный бот Vote Bot. Его можно найти в каталоге.Vote Bot может отсутствовать на корпоративном сервере, тогда его нужно установить. Если в чате участвует несколько серверов, бот должен быть опубликован на всех серверах, пользователи которых прошли опрос, иначе бот не получит информацию об этих пользователях и выдаст ошибку при попытке скачать результаты опроса. Чтобы заказать установку бота, обратитесь в поддержку своей организации.
Как создать опрос с помощью Vote Bot:- Пишем этому боту в персональном чате, создаём опрос.
- Добавляем бота в нужный чат. В канале бота обязательно нужно сделать администратором.
- Создаём опрос в боте, следуя его инструкциям.
Обсуждения в чатах и каналах
Обсуждения — это возможность любому участнику прокомментировать то или иное сообщение в групповом чате или канале, не «засоряя» сообщениями основной чат или канал, даже если у него нет прав администратора. В обсуждении участники могут отправлять свои сообщения, к примеру, обсуждая какую-либо новость. Обсуждение неотделимо от своего исходного сообщения, в то же время по сути является отдельным групповым чатом.
Версии клиентов и сервера с поддержкой обсуждений:- Веб/десктоп 2.5
- iOS 2.20
- Android 2.20
- Backend 2.6
Внимание! Если в чате или в канале есть хотя бы один участник, на сервере которого версия бэкенда ниже 2.6, при попытке включить функцию обсуждений появится «Ошибка включения обсуждений» или «Функция обсуждений не поддерживается».Как начать обсуждение?
Перед тем, как начать обсуждение, сначала необходимо убедиться, что обсуждения включены в групповом чате или канале, иначе эта функция будет недоступна. Включить обсуждения в групповом чате или канале может создатель или администратор: ему нужно открыть карточку чата, выбрать пункт Настройки и включить тумблер Обсуждения.
Чтобы начать обсуждение любого сообщения в чате или в канале, выберите пункт Начать обсуждение (Комментировать) в его контекстном меню (долгое нажатие на сообщении на мобильных). Оставьте свой комментарий, и у сообщения в чате или канале появится счётчик комментариев.
Нельзя начинать обсуждения для системных сообщений, сообщений бота, сообщений, состоящих из смайлика (эмодзи) и стикера, и сообщений, отправленных в режиме конфиденциальности.
После добавления Вашего комментария Вы автоматически присоединитесь к обсуждению, и оно появится у Вас в списке чатов и в разделе Обсуждения.
Если обсуждение находится в канале, присоединяться к обсуждению надо самостоятельно: открыть карточку обсуждения и выбрать пункт Подписаться на обсуждение, и обсуждение из канала появится у Вас в списке чатов и в разделе Обсуждения.Где найти и как подписаться на обсуждения
Вы становитесь участником обсуждения (подписываетесь на него) автоматически в следующих случаях:- Вы — участник исходного группового чата (не канала), в котором включены уведомления;
- Вас упомянули в стартовом сообщении или в обсуждении через два символа
@@
; - Вы сами написали в обсуждении;
- Вы сами присоединились в карточке обсуждения. В каналах стать участником обсуждения можно только вручную.
На обсуждение не может подписаться пользователь, не являющийся участником родительского чата.
Вы прекратите быть участником обсуждения (отпишетесь) в следующих случаях:- Вы удалили исходный чат/канал или само обсуждение в списке чатов;
- Вас исключили из чата или канала;
- Вы покинули обсуждение через карточку обсуждения.
Все обсуждения, в которых Вы участвуете и подписаны, находятся в разделе Обсуждения и в списке чатов (есть настройка по отображению обсуждений в общем списке чатов).
Обсуждения, в которых Вы не участвуете, можно опознать по счётчику комментариев под сообщением.
Чтобы подписаться на обсуждение, к нему нужно присоединиться: отыщите в чате или канале сообщение, в котором идёт обсуждение, откройте карточку обсуждения и нажмите Подписаться на обсуждение.Как выглядят и работают обсуждения
Обсуждение по сути представляет собой чат, связанный с исходным обсуждаемым сообщением. В обсуждении нельзя звонить, просматривать роутинг и закреплять сообщения. В самом обсуждении первым идёт исходное сообщение с именем его автора, далее находится горизонтальная полоса, обозначающая начало обсуждения, после которой от старых к новым идут комментарии других пользователей.
В контекстном меню исходного сообщения можно перейти в чат или канал, в котором оно находится.
Обсуждение не может быть начато без исходного сообщения. Создать обсуждение внутри обсуждения тоже нельзя.
Поиск текста внутри исходного чата не ищет сообщения внутри его обсуждений.
Через контекстное меню сообщений, пересланных из обсуждения, можно будет перейти в исходное обсуждение.
При удалении исходного сообщения, с которого было начато обсуждение, обсуждение не удаляется. Переход в обсуждение возможен через местозаполнитель удалённого сообщенияДанное сообщение удалено
. Если удалить этот местозаполнитель, соответствующее обсуждение также будет удалено у пользователя. При удалении чата или канала происходит автоматическая отписка от всех обсуждений в нём, эти обсуждения пропадают у пользователя. Если пользователь снова вернётся в чат или канал, присоединяться обратно во все обсуждения он должен самостоятельно.
Любое сообщение из любого чата или обсуждения можно переслать в обсуждение, если Вы подписаны на него.
По умолчанию уведомления для обсуждений в каналах выключены, а для обсуждений в групповых чатах — наследуют настройки уведомлений группового чата.Свойства обсуждения
ЗаголовокОбсуждение в…
наверху, если открыть обсуждение, открывает карточку (свойства) обсуждения.
В карточке обсуждения есть следующее:- Общие файлы — раздел для просмотра всех вложений, отправленных в комментариях обсуждения;
- Поиск по обсуждению — тестовый поиск внутри обсуждения;
- Загрузить все сообщения — принудительная загрузка всех комментариев обсуждения на устройство;
- Очистить историю обсуждения — очистка комментариев обсуждения;
- Присоединиться к обсуждению/Покинуть обсуждение — подписка или отписка на обсуждение; ниже находится список участников обсуждения (если обсуждение начато в групповом чате, а не в канале).
В контекстном меню обсуждения (щелчок правой кнопкой мыши в веб- и десктоп-версиях или смахивание или долгое нажатие на мобильных) в списке чатов или в разделе Обсуждения можно пометить обсуждение непрочитанным, переключить уведомления о новых сообщениях, закрепить обсуждение, покинуть обсуждение или очистить историю сообщений обсуждения.Редактирование, удаление и пересылка сообщений
Чтобы изменить/удалить (у себя или у всех участников) или переслать сообщение:
- в веб- или десктоп-версии eXpress щелкните сообщение правой кнопкой мыши, чтобы открыть контекстное меню с соответствующими командами;
- в мобильных версиях eXpress нажмите и удерживайте палец на сообщении, чтобы открыть контекстное меню.
В десктоп- или веб-версии по желанию сверните список чатов, нажав на стрелку в левом нижнем углу (над номером версии) или разверните окно приложения на весь экран или просто чуть пошире – в окне чата станут видны флажки выбора сообщений. Отметьте с их помощью сообщения, которые хотите переслать.
Внимание! Чтобы переслать сообщение с вложенным файлом в мобильной версии, вложение сначала необходимо скачать. Чтобы это делалось автоматически, включите автозагрузку медиа в настройках мобильного приложения.
Администратор чата или канала, как и все другие участники, может редактировать и удалять только свои сообщения.
Удалять сообщения на сервере нельзя. В чатах с включённым режимом конфиденциальности сообщения безвозвратно удаляются по истечении заданного времени как на устройствах пользователей, так и на сервере. Режим конфиденциальности может включить и настроить администратор, открыв карточку (свойства) чата или канала.
Внимание! Отредактировать и удалить своё сообщение для всех можно течение 24-х часов с момента отправки.Как отправить сообщение или файл самому себе?
Для этого воспользуйтесь чатом Сохранённые сообщения. Также любое сообщение в него можно отправить через контекстное меню: в веб- или десктоп-версии eXpress щелкните правой кнопкой мыши на сообщении, а в мобильных версиях нажмите и удерживайте палец на сообщении.
Возвращение в чаты после их удаления или выхода с сервера
Удалённый персональный чат можно просто заново создать из списка контактов.
Если Вы удалили у себя групповой чат или канал, вернуть Вас в него сможет его администратор (если Вы и были администратором, новый администратор назначается сервером автоматически). Также администратор может направить Вам пригласительную ссылку для присоединения в чат. Администратор корпоративного сервера может добавить Вас вручную через панель администратора — свяжитесь с ним через поддержку организации или через поддержку eXpress.
Если Вы выйдете из корпоративного сервера, и администратор подтвердит Вам логаут, Вы потеряете доступ:- ко всем корпоративным чатам вне зависимости от того, в какой момент Вы были в них добавлены (Вы исключитесь из состава участников в связи с выходом с корпоративного сервера);
- к переписке в персональных чатах, которая велась, пока Вы были на корпоративном сервере.
У Вас сохранится доступ только к некорпоративной части переписки в персональных чатах (если такая переписка была).
Если позднее Вы вернётесь на тот же корпоративный сервер, персональная корпоративная переписка вернётся, а в групповые чаты и каналы Вам придётся добавляться заново с помощью администраторов чатов/каналов или с помощью администратора корпоративного сервера (см. выше).Как добавить стикеры в eXpress?
Вот как можно добавить стикеры:
- Через стикер, отправленный кем-либо в чат: щелкните (в веб-/десктоп-версии) или нажмите (в мобильной версии) любой стикер, чтобы добавить этот набор стикеров себе.
- Через специального бота для переноса стикеров из Telegram (анимированные стикеры не поддерживаются). Если этот бот отсутствует в каталоге Вашего корпоративного сервера, обратитесь в поддержку своей организации и попросите его установить.
- Можно создать собственный набор стикеров. Это делается на корпоративном сервере в панели администратора в разделе Стикеры. Для этого обратитесь к администратору своего корпоративного сервера. Чтобы связаться с ним, обратитесь в поддержку своей организации
Ошибки чатов, каналов и обсуждений
При попытке включить обсуждения в чате «Функция обсуждений не поддерживается»
В чате есть участник, на корпоративном сервере которого версия бэкенда ниже 2.6. Нужно исключить этого пользователя из чата или обновить ему корпоративный сервер (через поддержку Вашей или его организации или через поддержку eXpress).Ошибки «Невозможно расшифровать» или «Подпись не подтверждена» на сообщениях
Чаще всего эти ошибки вызываются временными сетевыми проблемами и устраняются повторной авторизацией в приложении на проблемном устройстве.
Если ошибка возникла у одного из участников группового чата, для начала проверьте, как другие участники чата видят это проблемное сообщение:- Если у других участников сообщение с ошибкой, просим отправителя завершить сессию в настройках и авторизоваться заново на том устройстве, с которого он это сообщение отправил;
- Если остальные участники видят сообщение корректно, и только у одного из них сообщение с ошибкой, просим этого участника завершить сессию в настройках и авторизоваться заново.
- Если участники чата видят ошибку в Вашем сообщении в групповом чате, Вам нужно завершить сессию в настройках и авторизоваться заново;
- Если ошибка есть только у одного из получателей в чате, завершить сессию в настройках и авторизоваться заново нужно этому получателю.
Информация для системного администратора или поддержки
Если пользователь с любого устройства отправляет сообщение, и на всех устройствах появляется ошибка шифрования, скорее всего, перепутаны версии ключей cts пользователя. Такое могло произойти, если пользователь CTS входил на сервер через устаревшую версию приложения, имея несколько ключей cts. Исправление делается обращением в поддержку eXpress:- 1. Смотрим ключи cts пользователя на корпоративном сервере в панели администратора: раздел Пользователи > ищем профиль > Ключи. Искать их можно в браузере по нажатию клавиш Ctrl (Cmd) + F и ключевому слову
cts
. Сохраняем ключи cts вместе со всей сопроводительной информацией о них в текстовый файл. - 2. Передаём файл с ключами в поддержку eXpress. Она сверит CTS-ключи на CTS с ключами на RTS и в случае расхождений вышлет рекомендации, какие версии нужно будет поменять местами. CTS-ключами с правильными версиями считаются ключи на RTS.
Далее приведён пример исправления версий ключей cts на корпоративном сервере через консоль.
- 3. Через консоль подключаемся к базе kdc_prod. Пароль для postgres записан в файле settings, он потребуется при входе в контейнер.
docker exec -ti cts_postgres_1 psql -U postgres \c kdc_prod
- 4. Далее в базе kdc_prod нужно выполнить последовательно команды:
UPDATE public_keys SET version = 0 WHERE id = '1-я_версия_ключа_cts_с_RTS';
UPDATE public_keys SET version = 2, inserted_at = current_timestamp, updated_at = current_timestamp WHERE id = '2-я_версия_ключа_cts_с_RTS';
UPDATE public_keys SET version = 1 WHERE id = '1-я_версия_ключа_cts_с_RTS';
- 5. Заходим в консоль messaging:
dpl --dc exec messaging ./bin/messaging remote_console
или:
docker exec -it {messaging_container} ./bin/messaging remote_console
- 6. Копируем код, приведённый ниже, и нажимаем Enter:
defmodule Messaging.Troubleshooting do defmodule Chats do alias Messaging.Chats.{ChatsContext, GroupChat, GroupChatCache} alias Messaging.Chats.Routing.ChatMemberRoutingInfoFetcher alias Messaging.Chats.GroupChat.Queries.GetChatsByHuidInMembersQuery alias Messaging.Events.SystemEventsContext alias Messaging.Event require Logger def repair(chat_id) do with :ok <- refetch_routing_info_for_chat(chat_id) do produce_chat_updated(chat_id) end end def repair_user(user_huid) do with {:ok, _} <- ChatMemberRoutingInfoFetcher.get_and_save!([user_huid]), {:ok, chats} <- GetChatsByHuidInMembersQuery.execute(user_huid) do Enum.each(chats, fn(chat) -> produce_chat_updated(chat) clear_cache(chat.id) end) end end def produce_chat_updated(%GroupChat{} = chat) do with {:ok, chat_updated} <- SystemEventsContext.chat_updated(chat) do Event.emit(chat_updated, chat: chat) {:ok, [id: chat.id]} else error -> Logger.error("Troubleshooting.Chats produce chat updated error: #{chat.id} #{error}") {:error, [id: chat.id, reason: error]} end end def produce_chat_updated(chat_id) do with {:ok, chat} <- ChatsContext.get_chat(chat_id, preload: true) do produce_chat_updated(chat) end end def activate_chat(chat_id) do with {:ok, chat} <- ChatsContext.get_chat(chat_id), {:ok, updated_chat} <- ChatsContext.activate_chat(chat) do clear_cache(chat_id) produce_chat_updated(updated_chat) end end def refetch_routing_info_for_chat(chat_id) do {:ok, chat} = ChatsContext.get_chat(chat_id) with {:ok, _} <- ChatMemberRoutingInfoFetcher.get_and_save!(chat.members) do GroupChatCache.clear(chat_id) end end def refetch_routing_info(user_huid) do with {:ok, _} <- ChatMemberRoutingInfoFetcher.get_and_save!([user_huid]), {:ok, chats} <- GetChatsByHuidInMembersQuery.execute(user_huid) do Enum.each(chats, &(GroupChatCache.clear(&1.id))) end end def clear_cache(chat_id) do GroupChatCache.clear(chat_id) end def validate_chat(chat_id) do {:ok, local_chat} = ChatsContext.get_chat(chat_id, preload: true) {:ok, local_chat_from_cache} = ChatsContext.get_chat_from_cache(chat_id) check1 = validate_chat_member_routing_info( {:local, local_chat.chat_member_routing_infos}, {:local_cache, local_chat_from_cache.chat_member_routing_infos} ) check2 = validate_keys( {:local, ChatsContext.keys(local_chat)}, {:local_cache, local_chat_from_cache.keys} ) [check1, check2] end defp validate_chat_member_routing_info({tag1, cmr_info1}, {tag2, cmr_info2}) do i1 = cmr_info1 |> Enum.map(&map_routing_info/1) |> Enum.sort_by(&(&1.user_huid)) i2 = cmr_info2 |> Enum.map(&map_routing_info/1) |> Enum.sort_by(&(&1.user_huid)) validate_diff(:routing_info, {tag1, i1}, {tag2, i2}) end defp map_routing_info(routing_info) do routing_info |> Map.from_struct() |> Map.take([ :active, :cts_id, :cts_key_id, :ets_id, :rts_id, :rts_key_id, :user_huid, :user_kind ]) end defp validate_keys({tag1, keys1}, {tag2, keys2}) do validate_diff(:keys, {tag1, keys1}, {tag2, keys2}) end defp validate_diff(set_name, {tag1, set1}, {tag2, set2}) do missing1 = case set1 -- set2 do [] -> [] diff -> [{tag2, diff}] end missing2 = case set2 -- set1 do [] -> [] diff -> [{tag1, diff}] end case missing1 ++ missing2 do [] -> {set_name, :ok} missing -> {set_name, {:missing, missing}} end end end end
- 7. В конце тоже в консоли messaging нужно выполнить команду:
Messaging.Troubleshooting.Chats.repair_user("HUID_пользователя_с_проблемой")
Зависла синхронизация, сообщения не отправляются или не видны в одном чате
Могут отображаться сообщения об ошибках: «Дождитесь окончания синхронизации чата» или «Вы не можете отправлять сообщения в чат, поскольку больше не являетесь его участником».
Попробуйте сделать следующее:- Если чат групповой, попробуйте передобавить в чат любого пользователя или сделайте любого участника чата администратором. Это событие вызовет обновление чата, и проблема с зависанием чата может быть решена.
- Если чат персональный, создайте групповой чат с теми же двумя участниками и проверьте, видите ли вы сообщения друг друга. Если сообщения видно, создайте персональный чат заново с двух сторон: нужно удалить чат у каждого участника и написать заново из контактов.
- Сообщения могут не отображаться с трастовых серверов при наличии проблем с трастами — тогда проблема проявляется во всех чатах между пользователями конкретных серверов. Обратитесь к администратору корпоративного сервера через поддержку своей организации или в поддержку eXpress.
Информация для системного администратора или поддержки
Сначала проверяем, не стал ли этот проблемный чат ошибочно неактивен на сервере. Неактивные чаты в списке чатов в панели администратора не отображаются.
- 1. Если чат в панели администратора найти не удалось, значит, нужно убедиться, что чат существует на сервере, командой:
import Ecto.Query, only: [from: 2] query = from Messaging.Chats.GroupChat.ChatServer, where: [group_chat_id: ^"ID_ЧАТА"] Messaging.Repo.all(query)
- 2. Если чат существует, а в панели администратора его нет, значит, он неактивный. Тогда администратору корпоративного сервера нужно открыть консоль сервиса messaging:
cd /opt/express dpl --dc exec messaging ./bin/messaging remote_console
если deployka отдельно, то:
docker exec -ti cts_messaging_1 bin/messaging remote_console
Затем сделать чат активным командами:Messaging.Chats.RoutingContext.sync("ID_ЧАТА") Messaging.Chats.ChatsContext.activate("ID_ЧАТА") {:ok, chat} = Messaging.Chats.ChatsContext.get_chat("ID_ЧАТА", preload: true) chat |> Messaging.Chats.GroupChat.Changeset.ChatServersChangeset.apply() |> Messaging.Repo.update!(force: true) Messaging.Chats.GroupChatCache.clear("ID_ЧАТА")
- Если бэкенд версии от 2.5 до 2.11:
Messaging.Chats.ChatsContext.activate("ID_чата")
- Если бэкенд версии ниже 2.5, выполняется две команды:
{:ok, chat} = Messaging.Chats.ChatsContext.get_chat("ID_чата") Messaging.Chats.GroupChat.Commands.ActivateChatCommand.execute(chat)
Если бэкенд версии 2.11 и ниже, то неактивный чат будет виден в панели администратора, и в его свойствах у поля Активен будет отображаться False.
В консоли сервиса messaging администратору нужно выполнить команду для активации чата:- HUID проблемного пользователя — ищем пользователя в разделе Пользователи в панели администратора корпоративного сервера или передаём поддержке eXpress номер телефона пользователя, она сообщит HUID. Через HUID можно будет найти пользователя на серверах и в чатах.
- ID чата — ищем чат в разделе Чаты в панели администратора. С его помощью можно будет найти чат на том или ином сервере.
- Список CTS-ключей пользователя с их версиями — кнопка Ключи в профиле пользователя в панели администратора. Для удобства можно воспользоваться поиском по странице (сочетание клавиш (Cmd) Ctrl + F, ключевое слово
cts
). Имея на руках ключи пользователя, можно будет сверить их с ключами в чатах. Как правило, если последняя версия ключа не совпадает с текущим ключом пользователя в чате, у пользователя будут проблемы с чатом. - Чат JSON — ищем чат в разделе Чаты в панели администратора, нажимаем Чат JSON. Если в чате участвуют разные серверы, нужно собрать JSON со всех серверов-участников — при необходимости через поддержку eXpress. Чат JSON — это сводная информация об участниках чата и об их ключах. Здесь у пользователя должен быть ключ последней версии.
- Можно собрать информацию о проблемном сообщении — ищем чат в разделе Чаты панели администратора, нажимаем События таблица, там по времени ищем нужное сообщение. Здесь тоже будет информация о CTS-ключе пользователя в поле
sender_key_id
. - Собираем стейт или логи клиентского приложения, чтобы просмотреть, какой CTS-ключ пользователя прописался в клиентском приложении.
sender_key_id
) должны совпадать. Если где-то ключи не совпадают, это вызовет проблемы с отображением сообщений.
Далее проверяем эти признаки:- В панели администратора ищем проблемный чат, в списке пользователей у пользователя видим неверное значение в столбце Conn Type (например,
rts
вместоcts
); - В роутинге чата у других участников отображается неверная принадлежность этого пользователя к серверу (трафик от него отображается через RTS, а не через CTS). То есть пользователь корпоративного сервера (синий) в роутинге участников проблемного чата может ошибочно отображаться как зарегистрированный на региональном транспортном сервере (зелёный).
- Открываем Chat JSON чата. Параллельно открываем ключи пользователя, ищем ключ cts самой последней версии и сверяем с ключом пользователя в Chat JSON. В чате будет неверный ключ cts пользователя, скорее всего, предыдущей версии.
- 1. Открываем консоль сервиса messaging:
cd /opt/express dpl --dc exec messaging ./bin/messaging remote_console
если deployka отдельно, то:
docker exec -ti cts_messaging_1 bin/messaging remote_console
- 2. Обновляем роутинг у проблемного пользователя и затем очищаем кэш его проблемного чата следующей командой:
Messaging.Chats.Routing.ChatMemberRoutingInfoFetcher.get_and_save!(["HUID ПОЛЬЗОВАТЕЛЯ"]) Messaging.Chats.GroupChatCache.clear("ID ЧАТА")
Зависла синхронизация, сообщения не отправляются или не видны во всех чатах
Могут отображаться сообщения об ошибках: «Дождитесь окончания синхронизации чата» или «Вы не можете отправлять сообщения в чат, поскольку больше не являетесь его участником».
Также в этом случае пользователь корпоративного сервера (синий) в роутинге участников всех его чатов может ошибочно отображаться как зарегистрированный на региональном транспортном сервере (зелёный).
Здесь необходимо исправлять кэш чатов на корпоративном сервере пользователя. Это делается через поддержку Вашей организации или через поддержку eXpress.Информация для системного администратора или поддержки
Дополнительные признаки этой проблемы:- В панели администратора ищем любой чат с пользователем, в списке пользователей у пользователя видим неверное значение в столбце Conn Type (например,
rts
вместоcts
); - В роутинге чата у других участников отображается неверная принадлежность этого пользователя к серверу (трафик от него отображается через RTS, а не через CTS). То есть пользователь корпоративного сервера (синий) в роутинге участников проблемного чата может ошибочно отображаться как зарегистрированный на региональном транспортном сервере (зелёный).
- Открываем Chat JSON чата. Параллельно открываем ключи пользователя, ищем ключ cts самой последней версии и сверяем с ключом пользователя в Chat JSON. В чате будет неверный ключ cts пользователя, скорее всего, предыдущей версии.
- Сообщения от проблемного пользователя не видны другим участникам как в групповом, так и в персональном чатах.
- 1. Открываем консоль сервиса messaging:
cd /opt/express dpl --dc exec messaging ./bin/messaging remote_console
если deployka отдельно, то:
docker exec -ti cts_messaging_1 bin/messaging remote_console
- 2. Копируем код, приведённый ниже, нажимаем клавишу Enter:
defmodule Messaging.Troubleshooting do defmodule Chats do alias Messaging.Chats.{ChatsContext, GroupChat, GroupChatCache} alias Messaging.Chats.Routing.ChatMemberRoutingInfoFetcher alias Messaging.Chats.GroupChat.Queries.GetChatsByHuidInMembersQuery alias Messaging.Events.SystemEventsContext alias Messaging.Event require Logger def repair(chat_id) do with :ok <- refetch_routing_info_for_chat(chat_id) do produce_chat_updated(chat_id) end end def repair_user(user_huid) do with {:ok, _} <- ChatMemberRoutingInfoFetcher.get_and_save!([user_huid]), {:ok, chats} <- GetChatsByHuidInMembersQuery.execute(user_huid) do Enum.each(chats, fn(chat) -> produce_chat_updated(chat) clear_cache(chat.id) end) end end def produce_chat_updated(%GroupChat{} = chat) do with {:ok, chat_updated} <- SystemEventsContext.chat_updated(chat) do Event.emit(chat_updated, chat: chat) {:ok, [id: chat.id]} else error -> Logger.error("Troubleshooting.Chats produce chat updated error: #{chat.id} #{error}") {:error, [id: chat.id, reason: error]} end end def produce_chat_updated(chat_id) do with {:ok, chat} <- ChatsContext.get_chat(chat_id, preload: true) do produce_chat_updated(chat) end end def activate_chat(chat_id) do with {:ok, chat} <- ChatsContext.get_chat(chat_id), {:ok, updated_chat} <- ChatsContext.activate_chat(chat) do clear_cache(chat_id) produce_chat_updated(updated_chat) end end def refetch_routing_info_for_chat(chat_id) do {:ok, chat} = ChatsContext.get_chat(chat_id) with {:ok, _} <- ChatMemberRoutingInfoFetcher.get_and_save!(chat.members) do GroupChatCache.clear(chat_id) end end def refetch_routing_info(user_huid) do with {:ok, _} <- ChatMemberRoutingInfoFetcher.get_and_save!([user_huid]), {:ok, chats} <- GetChatsByHuidInMembersQuery.execute(user_huid) do Enum.each(chats, &(GroupChatCache.clear(&1.id))) end end def clear_cache(chat_id) do GroupChatCache.clear(chat_id) end def validate_chat(chat_id) do {:ok, local_chat} = ChatsContext.get_chat(chat_id, preload: true) {:ok, local_chat_from_cache} = ChatsContext.get_chat_from_cache(chat_id) check1 = validate_chat_member_routing_info( {:local, local_chat.chat_member_routing_infos}, {:local_cache, local_chat_from_cache.chat_member_routing_infos} ) check2 = validate_keys( {:local, ChatsContext.keys(local_chat)}, {:local_cache, local_chat_from_cache.keys} ) [check1, check2] end defp validate_chat_member_routing_info({tag1, cmr_info1}, {tag2, cmr_info2}) do i1 = cmr_info1 |> Enum.map(&map_routing_info/1) |> Enum.sort_by(&(&1.user_huid)) i2 = cmr_info2 |> Enum.map(&map_routing_info/1) |> Enum.sort_by(&(&1.user_huid)) validate_diff(:routing_info, {tag1, i1}, {tag2, i2}) end defp map_routing_info(routing_info) do routing_info |> Map.from_struct() |> Map.take([ :active, :cts_id, :cts_key_id, :ets_id, :rts_id, :rts_key_id, :user_huid, :user_kind ]) end defp validate_keys({tag1, keys1}, {tag2, keys2}) do validate_diff(:keys, {tag1, keys1}, {tag2, keys2}) end defp validate_diff(set_name, {tag1, set1}, {tag2, set2}) do missing1 = case set1 -- set2 do [] -> [] diff -> [{tag2, diff}] end missing2 = case set2 -- set1 do [] -> [] diff -> [{tag1, diff}] end case missing1 ++ missing2 do [] -> {set_name, :ok} missing -> {set_name, {:missing, missing}} end end end end
- 3. Затем там же в консоли messaging выполняем команду:
Messaging.Troubleshooting.Chats.repair_user("HUID ПОЛЬЗОВАТЕЛЯ")
В чате, созданном ботом, отправляемые сообщения зависают с ошибкой
Дело может быть в том, что рассинхронизировались ключи на сервере и в приложениях-клиентах (ключ DLPS). Обратитесь в поддержку своей организации или в поддержку eXpress, чтобы исправить синхронизацию ключа DLPS.Информация для системного администратора или поддержки
Перезапуск контейнера messaging сбросит кэш, и ключи обновятся.- 1. В панели администратора корпоративного сервера, на котором находится бот, берём логи контейнера messaging.
- 2. Воспроизводим проблему в клиентском приложении. Если видим в логах контейнера ошибку
keys_error
, поможет перезапуск контейнера messaging в консоли командой:
cd /opt/express dpl --dc restart messaging
Пользователь выходил с корпоративного сервера и в открытом чате отображается как внешний участник
Удалите этого участника из чата вручную.На значке приложения на iOS неправильный счётчик непрочитанных сообщений
Необходимо обратиться в поддержку своей организации или в поддержку eXpress для сброса счётчика.Информация для системного администратора или поддержки
- 1. Берём HUID проблемного пользователя — ищем пользователя в разделе Пользователи в панели администратора корпоративного сервера или передаём поддержке eXpress номер телефона пользователя, она сообщит HUID пользователя с RTS.
- 2. Передаем HUID в поддержку eXpress для сброса счётчика у этого пользователя на RTS или для того, чтобы получить рекомендации, как сбросить этот счётчик на ETS.
Сообщения отображаются недоставленными, хотя получателю на iOS они приходят
У отправителя сообщения отображаются как недоставленные (с одной галочкой), хотя на самом деле получатель с iOS прочитал их.
Получателю необходимо на устройстве iOS открыть Настройки > Уведомления > найти приложение и включить хотя бы один из вариантов отображения уведомлений: Заблокированный экран, Центр уведомлений, Баннеры. В противном случае сообщения, отправленные ему, будут отображаться у отправителя недоставленными.В сообщениях неправильное время, статус «онлайн» отображается неверно
На устройстве нужно выключить ручную установку часового пояса и поставить автоматическую синхронизацию времени с сотовой сетью или с NTP-сервером.Пустой список чатов на iOS после перезапуска приложения
Если после обновления приложения на iOS у Вас несколько раз в день после запуска отображается пустой список чатов, затем чаты медленно, но подгружаются, скорее всего, возникла проблема с хранилищем данных приложения на устройстве. Переустановите приложение, чтобы исправить хранилище.Информация для системного администратора или поддержки
Можно попросить пользователя собрать логи в мобильном приложении, предварительно их очистив. В логах находим ошибку вида:
Type: REALM ERROR Message: can't instantiate migrated encrypted Realm, will create in-memory Realm instead Payload: exception: Migration is required due to the following errors:- Property 'Attachment.deepLinkData' has been added.- Property 'Chat.positionEventInsertedAt' has been added.- Property 'Message.buttonsAutoAdjust' has been added.- Property 'Message.sendStateRaw' has been added.- Property 'Message.needResend' has been removed.
Проблема заключается в базе данных приложения (Realm), с этим поможет переустановка приложения.Не открывается чат с включённым режимом конфиденциальности на Android
В версии приложения для Android для того, чтобы пользоваться режимом конфиденциальности в чате, приложению должен быть предоставлен доступ к хранилищу (к файлам). Это необходимо для того, чтобы нельзя было обойти систему контроля скриншотов.
Поэтому при первом открытии чата в режиме конфиденциальности выберите Разрешить, не нажимайте Больше не спрашивать и Отклонить.
Сообщение успешно отправлено.

Личные и групповые чаты
- Отправка контактов, геопозиции, голосовых сообщений, файлов (изображения, видео, документы)
- Треды
- Группировка чатов с помощью тегов
корпоративная версия
- Редактирование изображений перед отправкой (добавление текста, рукописных линий, изменение размера изображений, поворот изображений)
- Отправка эмодзи, стикеров, загрузка собственного набора стикеров
- Реакции
- Возможность активировать только мобильный доступ к чату
корпоративная версия
- Возможность начать чат в режиме конфиденциальности (запрет на копирование, скриншот на мобильных устройствах и пересылку)
корпоративная версия
- Упоминание участника чата, а также любого пользователя через @ (функция mention – мэншн)
- Упоминание нескольких пользователей сразу через тег #
десктоп-версия
- Упоминание всех пользователей в чате через @all
Каналы
- Настройка уровня конфиденциальности каналов (открытый/закрытый)
- Закрепление каналов в верхней части списка
- Возможность перейти в корпоративный/гибридный открытый канал через упоминание (##)
Взаимодействие с сообщениями
- Индикатор ввода сообщения
- Форматирование текста – выделение жирным, курсивом, использование абзацев и т.д.
Реализовано через Markdown
- Просмотр информации о сообщении (доставлено, прочитано, отредактировано, удалено)
- Изменение/удаление отправленного сообщения и отображение факта корректировки/удаления на стороне получателя
- Сохранение сообщений, создание напоминаний о сообщениях, закрепление сообщения в верхней части чата
Корпоративная версия
- Возможность активировать только мобильный доступ к чату
корпоративная версия
Контакты
- Данные пользователя, доступные для просмотра: имя, фамилия, корпоративная информация (телефон, email, компания, должность, отдел, руководитель), список общих чатов, корпоративный сервер, связь с пользователем (роутинг), индикация (онлайн, время, когда последний раз был в сети)
Корпоративная версия
- Поиск контактов по должности, компании, домену, имени или присвоенному тегу
Аудио-, видеоконференции. Доступны только для корпоративных пользователей
- Прямые звонки (Peer-to-Peer (P2P))
- Аудио- видеозвонки на 120+ участников
- Звонки/ВКС между корпоративными и внешними участниками
- Возможность открыть звонок в другом окне/поверх основного окна
- Демонстрация экрана
- Запись звонка
Q4FY23
- Поднятие руки
Q4FY23
- Планирование конференций в календаре
- Автоматическая отправка ссылки на ВКС с добавлением напоминания в календарь участников
- Назначение пароля для доступа к конференции
- Возможность отправить приглашение на ВКС по почте
мобильная версия
Интеграции
- с SIP-телефонией
- с «тяжелыми» системами ВКС: Vinteo, Communigate, IVA, MIND