Как интегрировать MS Teams и экономить 3,3 млн рублей в год на лицензиях Microsoft

Мы делаем проект корпоративного портала на базе Creatio для нашего клиента. Про него мы ранее писали в другой статье. В этот раз расскажем, как мы интегрировали мессенджер MS Teams в корпоративный портал и что из этого вышло.

Бизнес задача — интегрировать мессенджер в портал

Схема работы портала. Корп. мессенджер — это и есть наш MS Teams
Схема работы портала. Корп. мессенджер — это и есть наш MS Teams

Основная задача — интегрировать мессенджер в одно окно с остальными сервисами, то есть сделать мессенджер частью корпоративного портала.

Зачем это нужно? В чем ценность мессенджера внутри портала?

Во-первых — это возможность связывать сущности. Можно создавать задачи из сообщений и привязывать сделки к конкретным перепискам.

Во-вторых – это единая экосистема для конкретного бизнеса, так как больше не нужно использовать 15 программ одновременно.

Как работает мессенджер

В любом мессенджере есть чаты и пользователи. Вот как происходят процессы в нашем случае:

  1. MS Teams клиент запускается
  2. MS Teams «достает» все чаты для текущего пользователя
  3. Пользователь заходит в нужный ему чат
  4. MS Teams загружает с серверов Майкрософта последние N сообщений и отображает их
  5. Далее мессенджер периодически проверяет — «не появилось ли новых сообщений?». Если появились — отображает в текущем чате
  6. Когда пользователь переходит в другой чат, пункты 4 и 5 повторяются, но уже для нового чата
  7. Когда пользователь выходит из чата — сохраняем новые сообщения и отображаем их непрочитанными

Как мы интегрировали мессенджер в портал

Логика работы внутри корпоративного портала
Логика работы внутри корпоративного портала

Чтобы внутри портала было отдельное приложение с мессенджером — его нужно каким-то образом туда «вставить»

Изначально хотели «интегрировать» кнопку мессенджера в боковую панель и отображать MS Teams через iframe. Но это не получилось из-за того, что Microsoft блокирует запросы между доменами в iframe. Поэтому мы решили собирать свой интерфейс внутри системы.

По смыслу это очень похоже на QIP. Только он объединял в себе разные мессенджеры, а нам нужно было объединить различные сервисы компании. Плюс не стоит забывать, что по мере развития каждый мессенджер начал перетягивать аудиторию на себя, и рождались истории про агрегаторов мессенджеров типа QIP.

Как происходит авторизация

Авторизация и в мессенджере и в портале происходит последовательно, через Microsoft Active Directory (по технологии SSO).

Самое сложное — получение сообщений

Для того, чтобы получать сообщения аккаунт пользователя должен на них «подписаться». Эта команда создается при первом сообщении внутри любой новой переписки.

Но «подписаться на все чаты сразу» на дешевом тарифе Е3 нельзя. Чтобы обойти эту сложность и не покупать дорогой тариф нужно делать скрипт. Он автоматически подпишет пользователя на его чаты, пока пользователь онлайн.

Как реализовали способ получения сообщений

Мы сделали скрипт, который подписывает каждого пользователя на отдельный чат и мониторит новые сообщения. У каждого пользователя по 200-250 таких чатов.

150 пользователей * 250 чатов = 37 500 запросов в час. И все это ради того, чтобы просто работали сообщения. Слишком сложно.

Поэтому скрипт работает только тогда, когда пользователь онлайн. А когда он не в сети — мы просто сохраняем непрочитанные сообщения на сервере и ждем, когда пользователь залогинится, и заново запускаем скрипт.

Сообщения — самое важное, что есть в мессенджере. Если они долго грузятся, не приходят или не сохраняются, то мы просто не получаем информацию вовремя. Некоторые мессенджеры даже берут деньги за хранение истории переписки.

Как интегрировать MS Teams и экономить 3,3 млн рублей в год на лицензиях Microsoft

Экономия на тарифах

Наш клиент, как и многие другие, использует базовые лицензии MS Office, которые стоят по 300 рублей в месяц. Для того, чтобы интегрировать MS Teams бесшовно — нужны расширенные тарифы Microsoft 365 E5. Это по 2 000 рублей за месяц → 3,8 млн в год при 150 пользователях (очень дорого).

Майкрософт, внося свои изменения, вынуждает нас собирать такие решения. Это риск, возникший посреди проекта, который никто не мог предугадать

Как интегрировать MS Teams и экономить 3,3 млн рублей в год на лицензиях Microsoft

Проблемы с API Майкрософт

Пока мы собирали наш скрипт столкнулись с еще одной проблемой — это API Майкрософта. Microsoft Graph — это единая системы для работы со всеми сервисами Microsoft по API. Но работает она откровенно плохо.

Некоторые методы передачи данных до сих пор находятся в бета-версии. Особенно методы по работе MS Teams. Примерно 20-30% от всех методов — в бета тестировании.

Например, есть «отправка сообщения в личный чат», а «отправка в групповой чат» — это уже бета.

Не хватает метода сделать сообщение «прочитанным». Например, достаем по API все сообщения в выбранном чате. А они не помечаются как прочитанные. Поэтому если зайти в Teams-клиент — они так и останутся непрочитанными.

Все эти недостатки напрямую влияют на бизнес-процессы. Из-за сложностей с уведомлениями сотрудники не получают информацию вовремя и делают работу не так хорошо, как могли бы.

Недавно мы оценивали подобную работу для Zoom. Надо сказать, что у Зума на данный момент тоже нет метода, чтобы доставать количество непрочитанных сообщений.

Резюме и развитие

По сути мы собрали мессенджер с нуля и внедрили весь базовый функционал. Наш клиент уже им пользуется и планирует расширять систему на новых итерациях: добавлять видеозвонки, синхронизацию сделок с сообщениями и единое файловое хранилище.

Если вы по каким то причинам тоже приверженец Майкрософт — теперь вы знаете, что можно сделать, чтобы сэкономить на тарифах.

Интегратор — LAND PRO. Автор статьи — Фёдор Анисимов.

1616
30 комментариев

Выглядит как попытка натянуть сову на глобус. Во первых внутри тимс можно наваять связи с сущностями из внешней корпоративной системы и шарить внутри чатов бесшовно и красиво. Бизнес кейс «только вкладка браузера с единым порталом» вместо «вкладка браузера + приложение МС тимс» не звучит крепким обоснованием ваших мук интеграции и будущих мук клиента сидящего на самопильном UI с бета эндпоинтами. ИМХО. Припихивание слона в игольное ушко всегда дорого, сложно, больно и по как правило на практике никто не оценит. Откроют 100500 вкладок браузера и будут говорить что тимс отдельно работает стабильнее, верните тимс. Но как инженеры - вы молодцы.

7
Ответить

Так мы тимс не убирали, по сути это просто альтернативный клиент, которым можно пользоваться внутри браузера в одном окне. Ну и плюс он может взаимодействовать с bpm движком самой системы, то есть в итоге мне кажется что он будет более функционален, чем сущности в тимс🤷🏽‍♂️

А так есть доля истины, но наша задача теперь выкрутить из этого более масштабное решение)

2
Ответить

неплохая экономия👍🏼

3
Ответить

Ну да, правда там запросов жесть... почти highload сделали из 100 пользователей)

3
Ответить

Комментарий недоступен

3
Ответить

Ну не могу не согласиться с предыдущим оратором, очень своеобразный продукт. Но люди юзают, и некоторым даже нравится... тем более что бесплатно)

Как я люблю говорить, многие люди в рф, очень будут есть г***о - главное что бы не дорого, а лучше бесплатно😂 Такова суть)

2
Ответить

Отличная статья. Спасибо, будем думать для своего проекта

2
Ответить