Подключение Microsoft Exchange через сервисный аккаунт
Подключение через сервисный аккаунт — новая схема интеграции UnSpot с Microsoft Exchange: вы один раз подключаете сервисную учётную запись с правом имперсонализации, и это подключение обслуживает все ресурсные календари переговорных. Делегировать права на каждый календарь и повторно авторизовывать пользователей не нужно. Классическая схема с делегированием прав по-прежнему работает — см. статьи «Права на ресурсный календарь Exchange» и «Подключение календаря Exchange к переговорной».
Как это работает
UnSpot подключается к серверу Exchange по протоколу EWS (Exchange Web Services) под сервисной учётной записью и работает с календарями переговорных через имперсонализацию: каждое обращение к календарю выполняется от имени ресурсного ящика нужной комнаты. Поэтому права не нужно делегировать на каждый календарь отдельно — достаточно один раз выдать сервисной учётной записи роль ApplicationImpersonation.
- Авторизация на сервере — доменная (NTLM) по умолчанию; тумблер «Использовать базовую авторизацию (Basic Auth)» переключает подключение на Basic-аутентификацию, если ваш сервер принимает только её.
- «Не проверять SSL-сертификат» отключает проверку сертификата сервера — включайте только для самоподписанных сертификатов; соединение при этом остаётся по HTTPS.
- При сохранении подключения UnSpot проверяет, что сервисная учётная запись может авторизоваться на сервере и что механизм имперсонализации работает. Доступ к календарю конкретной переговорной проверяется позже — при подключении этого календаря UnSpot пытается создать в нём тестовое событие и сразу удаляет его.
- Дальше синхронизация двусторонняя: брони из UnSpot создаются, обновляются и удаляются в календаре комнаты, а события, созданные в календаре напрямую (например, из Outlook), появляются в UnSpot — изменения приходят по push-подписке EWS, которую UnSpot оформляет при подключении календаря.
- Подключений может быть несколько — например, для разных серверов Exchange. Пары «сервер + логин» и «сервер + email» должны быть уникальны: два подключения с одинаковым сервером и учётной записью создать нельзя.
Требования
- Сервисная учётная запись Exchange, которой разрешена имперсонализация (роль ApplicationImpersonation) для ресурсных календарей переговорных. При сохранении подключения UnSpot проверяет, что авторизация под этой учётной записью проходит успешно.
- Поддерживаемые версии: Exchange 2010, 2010 SP1, 2010 SP2, 2013, 2013 SP1, 2016.
- Права в UnSpot: подключение настраивает Владелец. Администратор интеграций видит вкладку «Синхронизации», но управлять подключениями календарей не может.
Создание сервисного аккаунта в Exchange
Сервисная учётная запись создаётся стандартными средствами Exchange: в панели ECP откройте «Получатели» → «Почтовые ящики», нажмите «+ Почтовый ящик пользователя» и создайте пользователя (например, app_impersonation).
Затем выдайте учётной записи право имперсонализации: на сервере Exchange запустите Exchange Management Shell и выполните команду, подставив имя созданной учётной записи:
New-ManagementRoleAssignment `
-Name "UnSpotAppImpersonation" `
-Role "ApplicationImpersonation" `
-User "app_impersonation"PowerShellПрименение роли может занять некоторое время: если при сохранении подключения в UnSpot возникает ошибка проверки прав, подождите несколько минут и повторите попытку.
При необходимости можно ограничить имперсонализацию только ресурсными календарями переговорных — создайте область (Scope) и назначьте роль с этой областью:
# удалить прежнее назначение (если роль уже выдавалась без ограничения)
Remove-ManagementRoleAssignment `
-Identity "UnSpotAppImpersonation" `
-Confirm:$false
# область, ограниченная ресурсными ящиками переговорных
New-ManagementScope `
-Name "UnSpotResourceMailboxes" `
-RecipientRestrictionFilter {RecipientTypeDetails -eq "RoomMailbox"}
# назначение роли с областью
New-ManagementRoleAssignment `
-Name "UnSpotAppImpersonation" `
-Role ApplicationImpersonation `
-User "app_impersonation" `
-CustomRecipientWriteScope "UnSpotResourceMailboxes"PowerShellСоздание подключения
Перейдите в «Администрирование» → «Интеграции» → «Синхронизации», в разделе «Синхронизация календарей» найдите карточку Microsoft Exchange и нажмите «Подключить». Заполните форму — все поля обязательны, длина каждого до 255 символов:

| Поле | Что указать |
|---|---|
| Host | Адрес сервера Exchange без схемы (без https://). |
| Логин | Username сервисной учётной записи. |
| Пароль | Пароль сервисной учётной записи. После сохранения пароль скрывается и не отображается при редактировании. |
| Email сервисной учётной записи. | |
| Название подключения | Произвольное имя — отображается на карточке подключения. |
| Версия Exchange | Выбор из списка: 2010, 2010 SP1, 2010 SP2, 2013, 2013 SP1, 2016. |
| Не проверять SSL-сертификат | Тумблер, по умолчанию выключен — сертификат проверяется. Включайте только для серверов с самоподписанными сертификатами. |
| Использовать базовую авторизацию (Basic Auth) | Тумблер, по умолчанию выключен. Включите, если сервер использует базовую аутентификацию. |


После нажатия «Сохранить» UnSpot пробует авторизоваться под сервисной учётной записью. При успехе подключение появляется в списке карточек. Если авторизация не удалась, окно формы не закрывается, а в отдельном окне показывается описание ошибки и оригинальный ответ Exchange.
Управление подключениями
- Подключений может быть несколько — каждое отображается отдельной карточкой, рядом всегда есть карточка с кнопкой «Подключить» для добавления следующего.
- «Изменить» — редактирование любого поля подключения; пароль в форме замаскирован. При сохранении изменений выполняется повторная проверка авторизации. Если ничего не менялось, кнопка просто закрывает окно.
- «Отключить» — удаление подключения после окна подтверждения. Вместе с подключением отключаются календари переговорных, которые через него работали.
- Если подключение перестало работать (например, сменился пароль учётной записи), карточка помечается как невалидная — обновите данные через «Изменить».
Подключение календаря к переговорной
Календарь переговорной подключается указанием email её ресурсного календаря — авторизация пользователей не требуется:
- Откройте карточку переговорной и перейдите к подключению календаря.
- Выберите подключение Microsoft Exchange (сервисный аккаунт).
- В открывшемся окне введите email ресурсного календаря переговорной (например, room@company.com) и подтвердите.
При подключении UnSpot пытается создать в календаре тестовую встречу и сразу удаляет её. Если подключить не удалось, UnSpot покажет описание ошибки и ответ Exchange. У переговорной с подключённым календарём на странице пространств отображается иконка Exchange. Отключается календарь так же, как для остальных провайдеров, — из карточки переговорной.
Обратите внимание: Exchange не отдаёт готовый список ресурсных календарей, поэтому email календаря нужно ввести вручную. Если вы не знаете email ресурсного календаря переговорной, уточните его у администратора Exchange. Как создать ресурсный календарь — см. статью «Создание ресурсного календаря».
Ограничение: входящую синхронизацию нужно перезапускать вручную
Чтобы получать встречи, созданные на стороне провайдера, UnSpot подписывается на изменения в календаре. Для календарей, подключённых через сервисный аккаунт, продление подписки сейчас не выполняется: пока сервер Exchange отвечает на служебные запросы, поток событий держится, но после любого разрыва он не восстанавливается сам.
Как это выглядит: бронирования, созданные в UnSpot, продолжают появляться в календаре, а встречи, созданные в Outlook, перестают приезжать в UnSpot.
Что делать, пока не вышло исправление:
- чтобы разово подтянуть пропущенные встречи — откройте окно календаря переговорной и нажмите «Запустить синхронизацию». Кнопка доступна роли Владелец и не чаще одного раза в час: рядом показывается подпись «Будет доступна в» со временем следующей попытки;
- чтобы восстановить постоянный поток событий — переподключите календарь к переговорной.
Ограничение передано команде разработки. После исправления этот раздел из статьи уберём.
Ошибки при подключении
| Сообщение | Что означает и что делать |
|---|---|
| Введите корректный host. Поле должно содержать только домен | В поле Host допускаются только домен или IP-адрес, без схемы https:// и путей. |
| Подключение с таким сервером и именем пользователя уже существует | Пара «сервер + логин» должна быть уникальна. Отредактируйте существующее подключение вместо создания нового. |
| Подключение с таким сервером и email уже существует | Пара «сервер + email» должна быть уникальна — как и пара «сервер + логин». |
| Некорректные учётные данные. | Сервер отклонил логин или пароль. Проверьте данные сервисной учётной записи и способ авторизации — возможно, нужно включить или выключить «Использовать базовую авторизацию (Basic Auth)». |
| Недостаточно прав для сервисного аккаунта или приложения. | У сервисной учётной записи нет роли ApplicationImpersonation, либо назначение роли ещё не применилось — подождите несколько минут и повторите. |
| Ошибка подключения. | Общая ошибка при обращении к серверу. В окне ошибки UnSpot показывает оригинальный ответ Exchange — проверьте адрес сервера, версию Exchange и доступность EWS. |
| Этот календарь уже подключён. | Ресурсный календарь с таким email уже привязан к другой переговорной. |
| У комнаты уже есть подключенный календарь. | У переговорной может быть только один календарь — сначала отключите текущий. |
| Календарь не найден. | Почтовый ящик с указанным email не найден на сервере — проверьте email ресурсного календаря переговорной. |