Outlook 365 room как узнать кто забронировал комнату

Обновлено: 04.07.2024

Несколько недель назад от наших заказчиков мы получили задачу на создание сервиса бронирования переговорных комнат. Компания заказчика довольна крупная и весьма продвинутая в плане ИТ. У заказчика много филиалов по всей России и в каждом по 5-6 переговорных комнат, сотрудники часто летают проводить совещания из одного филиала в другой, а найти свободную аудиторию «на месте» — это реальная проблема. Поэтому сотруднику было бы неплохо прямо со своего рабочего места в Москве «застолбить» переговорку, например, в Туле и со спокойной совестью лететь в командировку. Опытом создания подобного сервиса мы хотим поделится с хабросообществом.

Анализ

Мы знали, что в компании заказчика есть внутренний портал, сделанный на Microsoft SharePoint 2010, которым ежедневно пользуются около 1500 сотрудников. Плюс в компании настроен Exchange.

Как известно в Exchange уже есть фича бронирования ресурсов в компании. Все это дело реализовано с помощью room mailbox’ов. По сути, каждой переговорной комнате присвоен свой почтовый адрес, и сотрудник должен планировать встречу с данной комнатой. Другие пользователи с помощью почтового клиента могут подключаться к календарям и смотреть на какое число, и время назначена встреча. К тому же в Outlook 2010 есть функционал Room Finder.

Вроде все выглядит круто и удобно. Однако есть несколько недостатков: во-первых, сотруднику нужен Outlook. Во-вторых, описание комнаты очень скудно, нельзя добавить описание ресурсов (доска, система конференц-связи и т.д.) в наглядном виде.

Соответственно возникла мысль: как бы нам все наглядное представление вынести в SharePoint и при этом не потерять функционал Exchange? При этом хотелось писать поменьше кода. Но как показала практика – без этого не обошлось :)

В общем, поехали!

SharePoint

Для создания сервиса мы сделали три списка: Подразделения, Комнаты совещаний, Бронирование комнат совещаний.

Подразделения представляют собой филиалы в городах.

  • название;
  • подразделение;
  • вместимость;
  • наличие в комнате проектора, маркерной доски конференцсвязи и т.д.
  • почтовый адрес, используемый для интеграции с MS Exchange.
  • комната;
  • дата встречи;
  • время начала;
  • время конца;
  • автор брони.
  • Пользователи могут планировать свои встречи и совещания, бронировать комнаты или делать специализированный поиск по параметрам.
  • Администратор переговорных комнат подразделения может переносить \ отменять существующие брони в рамках своего подразделения.
  • Администратор создает и редактирует переговорные комнаты, а также справочник с их характеристиками – количество мест, проектор, доска и т.д. Имеет возможность переключаться между подразделениями и исполнять роль Администратора переговорных комнат.

Т.к. у заказчика дизайн уже был натянут на портал, нашим дизайнерам нужно было поработать совсем чуть-чуть. С чем они отлично справилась:

1. Главная страница пользователя:


2. По отдельной ссылке можно перейти на список комнат. В данном списке выводится основная информация. Подробная информация о комнате отображается по клику на название комнаты.


3. По ссылке «Поиск аудиторий» отображается календарь на две недели. В каждой ячейке отображено время, кем комната забронирована и на какое время.


4. Отдельным кликом на «плюсик» можно будет забронировать переговорную комнату.


Реализация

Чтобы сделать такую красоту нам потребовалось написать WCF-сервис, который возвращает json и при этом работает в контексте SharePoint’a. Данная проблема решается правильным web.config’ом и наличием SVC в папке ISAPI. О том, как правильно настроить web.config для отправки json’a, написано очень много. Например, тут:

Далее мы сделали несколько ASPX-страниц, добавили их в модуль и реализовали всю логику работы с WCF-сервисом через javascript с использованием knockout-фрэймворка.

Основные проблемы у нас возникли с Exchange. Практически весь нужный функционал реализован через вызовы методов EWS Managed API. Однако нам нужно было автоматически создавать mailbox’ы при создании элемента в списке комнат.

На список комнат мы написали event receiver и попытались вызвать powershell команду на удаленном сервере через использование Runspace и WSManConnectionInfo. Однако, во-первых, это не безопасно, а во-вторых, сделать это у нас так и не получилось из-за проблем отказа доступа при соединении.

В результате решили написать еще один WCF-сервис и развернуть его на сервере с Exchange. По сути, у этого сервиса есть только один метод:

Как мы писали выше, вся логика работы у нас реализована через WCF-сервис, поэтому логично было дополнить наш сервис методами для бронирования комнаты в Exchange. Для этого мы вызывали метод сервиса для создания нашей брони в Exchange. Всю необходимую информацию помещали в Microsoft.Exchange.Data.Appointment, а далее с помощью API создавалось собрание(meeting) в календаре Exchange.

Проблему «обратной» синхронизации (т.е. когда сотрудник в своем календаре через Outlook забронировал комнату) было решено решить через задание (timer job). Данный job собирал всю информацию с Exchange и создавал недостающие брони, а отмененные удалял.

Итого

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

По умолчанию, когда вы открываете новую форму собрания в Microsoft Outlook 2016, Microsoft Outlook 2013 или Microsoft Outlook 2010, русская версия, панель поиска комнат отображается на правой стороне экрана назначения и помощник по планированию экрана, как показано на следующих скриншотах. Кнопку управления поиском комнаты можно найти в группе Параметры на вкладке Meeting.

Снимок экрана, на который показан параметр Invite Attendees на вкладке Назначение.

Вы можете скрыть поиск комнаты, выбрав управление поиском комнаты в группе Параметры ленты. Однако поиск номеров остается скрытым только в том случае, если его скрыть на экране назначения. Если скрыть его на экране помощник по планированию, переключитесь на экран назначения, а затем помощник по планированию экран, поиск комнаты снова будет виден. Кнопка управления поиском комнаты недоступна при создании встречи. Чтобы сделать ее доступной, можно выбрать приглашенных участников на вкладке "Назначение".

Экран встречи в Outlook

Снимок экрана, на который показана функция Поиска комнат в представлении Назначение в Outlook 2016.

Экран помощник по планированию в Outlook

Снимок экрана, на который показана функция поиска комнат в помощник по планированию в Outlook 2016.

В Outlook для Microsoft 365 кнопку управления поиском комнаты можно найти рядом с полем Расположение на вкладке Meeting или на ленте при просмотре помощник по планированию экрана.

Вкладка Собрание Outlook в Outlook для Microsoft 365

Снимок экрана, на который показана функция поиска комнат в представлении Meeting в Microsoft 365.

Вкладка помощник по планированию в Outlook для Microsoft 365

Снимок экрана, на который показана функция поиска комнат в помощник по планированию в Microsoft 365.

Существует известная проблема, из-за которой доступные комнаты не отображаются в области поиска комнат при запуске собрания за пределами рабочего времени. Дополнительные сведения см. в сайте No available rooms for a meeting outside working hours.

Ручное управление поиском комнат

Если вы скрываете поиск комнаты на вкладке Назначение формы собрания, следующие данные будут записаны в Windows реестра.

  • Subkey: HKEY_CURRENT_USER\Software\Microsoft\Office\x.0\Outlook\Preferences
  • DWORD: RoomFinderShow
  • Значение: 0 (Если впоследствии отображается поиск комнаты, это значение изменено на 1)

На этом пути подкайки местообладатель x.0 представляет вашу версию Office (16.0 = Office 2016 и Microsoft 365, 15.0 = Office 2013, 14.0 = Office 2010).

Если вы скрываете поиск номеров помощник по планированию на экране формы собрания, эти данные реестра никогда не используются.

Администрирование поиска комнат через реестр

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

Существует два различных значения реестра, влияющих на поиск комнат. Какой из них используется, зависит от уровня управления, который вы хотите иметь над поиском комнаты, и от версии "Microsoft Exchange надстройки", которую вы установили.

Это значение — значение DWORD в следующем пути реестра RoomFinderShow (по Outlook версии):

Местообладатель x.0 представляет вашу версию Office (16.0 = Office 2016 и Microsoft 365, 15.0 = Office 2013, 14.0 = Office 2010).

Если RoomFinderShow = 0 в этих путях реестра, при запуске Outlook:

  • По умолчанию поиск комнаты не отображается на экране назначения.
  • Вы можете вручную включить поиск номеров на экране назначения.
  • По умолчанию, если вы откроете новую форму собрания после того, как вы ввести поиск комнаты в другой форме собрания, поиск комнаты не отображается на экране назначения новой формы собрания.
  • Если вы включим и отключим поиск комнаты вручную на экране назначения, в реестр ничего не будет записано.

Значение RoomFinderForceDisabled было введено в обновлении к надстройки Microsoft Exchange". Он используется Outlook только после установки обновления для версии Outlook.

После установки обновления используйте следующие данные реестра, чтобы полностью отключить поиск номеров. Это дает вам еще большее управление поиском комнат, чем RoomFinderShow значение.

  • Subkey: HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\x.0\Outlook\Preferences
  • DWORD: RoomFinderForceDisabled
  • Значения: 1 = скрыть поиск комнаты, 0 (или отсутствующий DWORD) = показать поиск номера

После установки необходимого обновления значение Outlook не отображается на экранах поиска комнат на помощник по планированию или в форме RoomFinderForceDisabled 1 собрания.

Еще один способ полностью отключить (скрыть) поиск номеров на помощник по планированию и на экране назначения — отключить надстройку "Microsoft Exchange". Для этого выполните следующие действия.

Мы не рекомендуем отключить надстройку Microsoft Exchange, так как она также отключает другие функции, такие как "Защита перед отправкой" и "Интеграция голосовой почты".

  1. На вкладке Файл выберите пункт Параметры.
  2. В диалоговом окне Outlook Параметры выберите надстройки.
  3. В разделе Надстройки диалоговое окно Outlook Параметры выберите Перейти.
  4. В диалоговом окне НАДстройки COM разберите поле для надстройки Microsoft Exchange и выберите ОК.

Загрузка надстройки Microsoft Exchange контролируется следующей записью реестра:

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


Есть два основных сценария использования этого приложения:

1. Поиск свободной комнаты
Ежедневно в компании проходит множество митингов, переговорки бронируют менеджеры, разработчики и сотрудники HR-отдела. Поиск комнаты для митинга может быть довольно долгим и рутинным занятием. Чтобы понять, какая из комнат свободна в данный момент, необходимо зайти в календарь Outlook (или открыть дверь, отвлекая внимание участников проходящего совещания), просмотреть полное расписание по комнатам, найти свободный слот времени и создать appointment. За это время кто-то из сотрудников может забронировать комнату, и тогда необходимо начинать поиск заново. Гораздо удобнее сделать бронирование нажатием одной кнопки при помощи приложения, заранее получив подсказки о статусе комнат.

2. Ad hoc бронирование
Довольно часто возникает ситуация, когда нужно собраться минут на 15, чтобы коротко обсудить текущие задачи по проекту. В этом случае нет смысла занимать комнату на целый час, да может и не быть свободных слотов на выбранное время. Но если остаётся хотя бы 10 минут до следующего митинга, приложение позволит забронировать комнату, и для короткого митинга этого может быть вполне достаточно. Также иногда возникает ситуация, когда комната была забронирована на долгий срок, например, 2 часа, но митинг завершился раньше. В этом случае по завершении митинга можно нажать на кнопку отмены и освободить комнату.

Выбор платформы для решения

В качестве операционной системы был изначально выбран Android, так как он поддерживает кастомизацию (в том числе включение-отключение по расписанию, автозапуск приложений), и в продаже имеется большое количество моделей устройств.

Было рассмотрено несколько вариантов. В качестве информационного табло нет необходимости выбирать топовую модель планшета: на каждую комнату требуется отдельный девайс, и с ростом цены одного планшета стоимость конечного решения значительно вырастает. Но в то же время, нельзя брать самые дешёвые устройства — у них слабая, «мутная» IPS матрица, низкое разрешение, устаревшая версия ОС, и такое решение выглядело бы весьма непрезентабельно. В итоге мы сделали выбор в пользу Alcatel OneTouch Pixi 3 (10) 3G — планшета с довольно средними характеристиками: 1280x800 TFT IPS, Android 5.1, ОЗУ 1 Гб, процессор MediaTek MT8321 1300 МГц, в котором 3G модуль идёт в придачу за довольно разумную цену — около 8 тысяч рублей (на текущий момент стоимость устройства ниже).

Для блокировки аппаратных клавиш и системных элементов экрана мы заказали корпус из чёрного оргстекла. Корпус выполняет роль защитного чехла и крепления устройства на стену и имеет отверстия для установки. На данный момент установлено 5 планшетов у входа в каждую из переговорных комнат. У нас переговорки названы в честь классических языков программирования: Cobol, Prolog, Fortran, Ada, Pascal, каждая имеет собственную иконку, которая отображаются на экране рядом с номером комнаты.


Приложение позволяет забронировать комнату (создать appointment) на заданный промежуток времени: 15, 30, 45 мин, а также 1, 1.5, 2 часа. Если пользователь решил выбрать интервал 2 часа, а комната свободна лишь часть этого времени, то будет предложено бронирование с учётом ограничений. Нижняя панель приложения отображает текущие статусы других переговорных комнат: красный — комната занята, зелёный — свободна, и серый, если возникли проблемы при получении статуса (например, произошёл сбой при запросе статуса).

Ключевой функциональностью приложения и вау-фактором является распознавание лиц с помощью Microsoft Face API. При каждом бронировании с помощью фронтальной камеры создаётся снимок пользователя, который используется для сопоставления с предварительно обработанным списком фотографий сотрудников из Exchange. Если пользователь был успешно распознан, в названии бронирования указывается его имя, т.е. не требуется вручную вводить автора митинга, что весьма экономит время. На распознавание влияет освещённость помещения, и главное — исходная фотография пользователя, загруженная в качестве аватара.

Разработка и планирование

На этапе планирования разработки возник вопрос, какое из существующих решений для доступа использовать для бронирования комнат и получения статусов — Office 365 Android SDK или EWS API. Как оказалось, функциональность адаптированной под Android версии EWS Java API (официальная версия EWS Java API) более универсальна и позволяет подключаться как к облачной версии, так и к локальному Exchange.

Особенности интеграции


Поддержка клиента была удалена начиная с Android SDK 23 (6.0), поэтому в данный момент для всех legacy библиотек, использующих apache client, требуется эта настройка. В качестве DNS клиента идеально подошёл минималистичный MiniDNS (minidns-core).

Вызовы к API удобнее всего оборачивать с использованием RxJava, т.к. они обрабатываются синхронно и блокируют UI поток. Например (RxJava 1):


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


Где EMAIL – email адрес пользователя, а SIZE – размер фотографии, например, HR96x96. Более подробную информацию можно найти на странице MSDN.

При настройке аккаунтов для комнат есть одна важная особенность. Должно быть два типа аккаунтов — один для получения информации о статусах всех комнат (с полными правами) и второй для бронирования. Если осуществлять бронирование с использованием админского аккаунта, appointment может создаться поверх уже существующих, об этом необходимо помнить, чтобы не было путаницы.

Возможно, вы обратили внимание на QR-код рядом с иконкой комнаты. Сделан он для получения feedback'а, ссылку можно открыть на мобильном устройстве и оставить отзыв о работе приложения, если при использовании возникли какие-либо проблемы.


Проблемы и их решение

Как оказалось, довольно сложно договориться с бизнес-центром о подключении электричества к установленным планшетам (на стенах и под потолком нет розеток), поэтому было решено сделать питание на основе компактных литиевых батарей на 18 Ah (power bank). Для экономии энергии планшеты настроены на выключение в 20:00 и включение ежедневно в 8:00 по будням, что позволяет реже менять батареи.

Наши сисадмины настроили отдельную Wi-Fi сеть для устройств и включили фильтрацию по IP-адресам (в ПО от Cisco отсутствует возможность фильтрации по URL) для безопасности. К сожалению, это не позволило использовать привычные инструменты, такие как Crashlytics от Fabric, для трекинга ошибок, т.к. IP-адреса периодически менялись, но удалось без проблем открыть доступ к Firebase (что позволяет использовать push-уведомления и хранить логи в базе данных) и Azure Cloud (Microsoft Face API).

На данный момент наше решение для бронирования комнат активно используется, планшеты синхронизируются ежедневно в течение полутора лет. После первоначальной отладки и тестирования приложения не было обнаружено проблем, кроме одного бага с обновлением данных на экране, который решился очисткой кэша приложения. Заказчики, посещающие наш офис, проявляют интерес к продукту и оценили его удобство. В дальнейшем планируется добавить дополнительное логирование в Firebase, а также возможность уведомлений по почте для информирования о статусе заряда (необходимость сменить Powerbank).

В MS Exchnage 2010 есть удобная функция для резервирования комнат для совещаний через MS Outlook, которая позволяет пользователям компании самостоятельно искать свободные комнаты для переговоров и бронировать их для будущих совещаний.

На рисунках ниже показан пример создания совещания в переговорной комнате № 431, а так же просмотр занятости всех переговорных комнат филиала.

Exchange - Meeting rooms


Создание совещания в MS Outlook - Основные свойства совещания

Exchange - Meeting rooms


Создание совещания в MS Outlook - Выбор свободной комнаты для совещания

Для того, чтобы у пользователей появилась возможность просматривать занятость переговорных комнат и резервировать их под свои совещания, в инфраструктуре MS Exchange нужно создать ресурсный почтовый ящик (room mailbox). Такой почтовый ящик является служебным, то есть у него нет определенного пользователя, к которому он привязан - ящик обслуживает только система: в Active Directory создается соответствующая заблокированная учетная запись, то есть вход в систему от имени ресурсной учетной записи произвести нельзя. Тем не менее к такому ресурсному почтовому ящику можно назначить модераторов, которые через подключение календарей к своему ящику смогут следить за посещениями переговорных комнат, а так же при необходимости одобрять или отменять запланированные совещания.

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

По умолчанию комнаты создаются с открытой политикой резервирования, то есть без модерации. В консоли MS Exchnage вновь созданный почтовый ящик комнаты выглядит следующим образом.

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Общие"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Информация о пользователе"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Учетная запись"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Информация о ресурсах"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Политика ресурсов"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Общие свойства ресурсов"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Запросы, подходящие под политики"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Запросы, не подходящие под политики"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Почтовые адреса"

После создания почтового ящика комнаты нужно назначить на него права редактирования секретарю офиса - модератору помещений. Это можно выполнить как в консоли MS Exchnage, так и в PowerShell.

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

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Общие свойства ресурсов"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Политика ресурсов"

Exchange - Meeting rooms


Свойства почтового ящика комнаты - вкладка "Информация о ресурсах"

Если необходимо, чтобы резервация комнат проходила только через секретаря, то необходимо изменить настройки запросов, подходящих под политики комнаты - установить флажок "Specify users who are allowed to submit in-policy meeting requests that will be automatically approved" (Пользователи, которым разрешено отправлять подходящие под политику запросы собраний, которые будут автоматически одобрены) в состояние "Selected users" ("Выбранные пользователи"), а список пользователей можно оставить пустым.

Для того, чтобы все пользователи организации могли просматривать занятость комнат и видеть, кто их зарезервировал, то необходимо назначить права на календарь почтового ящика комнаты. Это делается через Outlook пользователя с полными правами на почтовый ящик комнаты или через PowerShell.

Примечание. В примере календарь вызывается разными командами (ИМЯ:\Календарь и ИМЯ:\Calendar) только для того, чтобы показать, что внутри почтового ящика календарь может иметь разные названия, которые зависят от языковых настроек администратора, который подключал этот почтовый ящик сразу же после его создания (при первом запуске почтового ящика комнаты).

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

Читайте также: