Можно ли настроить переадресацию вызовов через Lync SDK (2013 или другой)?
Я работаю на отдел IS в крупном учреждении. Серверы Lync, которые управляют нашими телефонами, обрабатываются другим отделом, и любое решение, которое требует сотрудничества с ними, нежизнеспособно. Это исключает любые решения, требующие дополнительных привилегий, работающих на серверах Lync, SEFAUtil и т. Д.
У моего личного клиента Lync 2013 есть какое-то отвратительное меню с графическим интерфейсом, где я могу переслать свой настольный телефон на другой номер. Я знаю, что это возможно в теории.
У меня есть код PowerShell, который (с кучей установленных SDK) войдет в систему с моими личными учетными данными. Блог, из которого я его взял, позволял сценарию отправлять произвольные сообщения (не очень полезные для меня). Это выглядит так:
if (-not (Get-Module -Name Microsoft.Lync.Model)) {
try {
Import-Module -Name (Join-Path -Path ${env:ProgramFiles} -ChildPath "Microsoft Office\Office15\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.dll")
-ErrorAction Stop
}
catch {
Write-Warning "Microsoft.Lync.Model not available, download and install the Lync 2013 SDK http://www.microsoft.com/en-us/download/details.aspx?id=36824" break
}
}
$client = [Microsoft.Lync.Model.LyncClient]::GetClient()
if ($client.State -ne [Microsoft.Lync.Model.ClientState]::SignedIn) {
$client.EndSignIn(
$client.BeginSignIn("x@x.com", "domain\johno", "youllNeverGuess", $null, $null))
}
if ($Client.State -eq "SignedIn") {
Write-Host "DEBUG: We managed to sign in!" }
}
Кажется, это работает, потому что если я введу неправильный пароль, то это будет barfs.
Из SDK можно ли установить переадресацию вызовов на определенный номер? Ужасная документация Microsoft демонстрирует, как переадресовать входящий вызов, который сценарий перехватил через обработчик событий, что означает, что он должен выполняться в цикле опроса... и что я не мог просто перебрать список учетных записей для пересылки. Из клиента графического интерфейса, если вы настроите свой телефон на переадресацию на номер, он будет зависать, даже если вы выключите компьютер, поэтому он отправляет на сервер что-то полупостоянное. Может ли Lync SDK выполнить то же самое?
Хотя Lync 2010 устарела, я был бы счастлив с решением, основанным на этом. Powershell предпочтительнее, но если у вас есть код на VB или C#, опять-таки это тоже будет хорошо. Мне не нужно, чтобы все было подано на серебряном блюде, только несколько подсказок для работы.
1 ответ
Вам необходимо опубликовать информацию о маршрутизации на сервере Lync. Это содержит ваши настройки одновременного звонка и пересылки, среди других.
Если вы в порядке создания решения.Net, попробуйте следующее:
Если вам нужно программировать на сервере Lync и вы не можете получить какие-либо привилегии, попробуйте использовать UCMA и создайте UserEndpoint
, Поскольку вы знаете адрес своего сервера Lync и у вас есть данные для входа, вы можете создавать и аутентифицировать UserEndpoint
без сотрудничества с другим отделом.
Пример (не мой): Создание приложений UCMA с экземпляром UserApplication.
Как только вы настроите конечную точку, вы в основном будете свободны. С возможностью публикации присутствия, вы можете публиковать настройки маршрутизации. Для Lync "присутствие" - это контейнер, который содержит все, например, доступность, маршрутизацию, контактные данные, пользовательские местоположения и т. Д.
На ваше UserEndpoint
, подписываться на LocalOwnerPresence.PresenceNotificationReceived
MSDN.
После того, как вы войдете в систему с помощью конечной точки, это событие будет запущено и предоставит вам текущие настройки. В аргументе события LocalPresentityNotificationEventArgs
Хватай AllCategories
коллекции, и искать PresenceCategoryWithMetaData
с именем "routing"
, Создайте новый экземпляр Routing
Контейнер с этими данными. Контейнер маршрутизации - это класс Microsoft.Rtc.Internal.Collaboration.Routing
в Microsoft.Rtc.Collaboration.dll
,
private void OnLocalPresenceNotificationReceived(
object sender,
LocalPresentityNotificationEventArgs e)
{
var container = (from c in e.AllCategories
where string.Equals(c.Name, "routing", StringComparison.OrdinalIgnoreCase)
orderby c.PublishTime descending
select c).FirstOrDefault();
if (container != null)
{
var routing = new Microsoft.Rtc.Internal.Collaboration.Routing(container);
// You can access the routing data here...
}
}
Если вы не получили ни одного контейнера маршрутизации, вы можете создать новый экземпляр. Будьте внимательны, хотя публикация нового экземпляра переопределит все ваши текущие настройки маршрутизации, а не позволит вам обновить текущие настройки.
в Routing
класс вы можете написать в следующее свойство:
routing.CallForwardToTargetsEnabled = true;
routing.CallForwardTo.Clear();
routing.CallForwardTo.Add("sip or tel number");
routing.UserOnlyWaitTime = TimeSpan.FromSeconds(...);
И, наконец, опубликуйте новые настройки маршрутизации:
endpoint.LocalOwnerPresence.PublishPresenceAsync(new PresenceCategory[] {
routing
});
Также возможно опубликовать информацию о присутствии, получив текущий экземпляр Lync с помощью GetClient()
метод в Lync SDK. Однако я не уверен, что это можно использовать для публикации настроек маршрутизации. Вы можете попробовать, хотя, я нашел много недокументированных вариантов, играя с Lync. Посмотрите на следующие два ресурса:
How to: Publish enhanced presence information
а также Self.BeginPublishContactInformation