是否可以通过Lync SDK(2013或其他)设置呼叫转移?

时间:2014-05-28 20:04:43

标签: powershell lync lync-2013

我在一家大型机构的IS部门工作。处理我们电话的Lync服务器由另一个部门处理,任何需要合作的解决方案都不可行。这排除了需要额外权限的任何解决方案,从Lync服务器,SEFAUtil等运行。

我的个人Lync 2013客户端有一些可恶的GUI菜单,我可以将桌面电话转发到另一个号码。我知道理论上它是可能的。

我有PowerShell代码(安装了大量SDK)将使用我自己的个人凭据登录。我抓住它的博客允许脚本发送一些任意的IM消息(对我来说不是很有用)。它看起来像这样:

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中,是否可以将callfowarding设置为特定数字?微软的可怕文档演示了如何转发脚本通过事件处理程序捕获的传入调用,这意味着它必须在轮询循环中运行...而且我不能只遍历要转发的帐户列表。从GUI客户端,如果您将手机设置为转发到某个号码,即使您关闭机器电源,它也会坚持下去,因此它会向服务器发送一些半永久性的电话。 Lync SDK可以完成同样的工作吗?

虽然不推荐使用Lync 2010,但我会对基于此的解决方案感到满意。 Powershell是首选,但如果你有VB或C#的代码,那也是可以的。我不需要在银盘上提供整个东西,只需要一些线索就可以使用。

1 个答案:

答案 0 :(得分:4)

您需要将路由信息发布到Lync服务器。这包含您的同步响铃和转发设置等。

如果您对创建.Net解决方案感到满意,请尝试以下操作:

当您需要针对Lync服务器进行编程并且无法获得任何提升的权限时,请尝试使用UCMA并创建UserEndpoint。由于您知道Lync服务器地址并具有登录详细信息,因此您可以在不与其他部门合作的情况下创建和验证UserEndpoint

示例(不是我的):Creating UCMA Applications with a UserApplication instance

设置端点后,您基本上可以免费使用。通过发布状态功能,您可以发布路由设置。对于Lync,"存在"是一个容器,其中包含可用性,路由,联系人详细信息,自定义位置等所有内容。

UserEndpoint上,订阅LocalOwnerPresence.PresenceNotificationReceived MSDN

使用您的终端登录后,此事件将触发并为您提供当前设置。在事件参数LocalPresentityNotificationEventArgs中,抓取AllCategories集合,然后查找名称为PresenceCategoryWithMetaData的{​​{1}}。使用此数据创建"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(...);

也可以通过在Lync SDK中使用endpoint.LocalOwnerPresence.PublishPresenceAsync(new PresenceCategory[] { routing }); 方法获取当前Lync实例来发布状态。我不确定是否可以使用它来发布路由设置。你可以试试,我在玩Lync时发现了很多未记载的选项。请查看以下两个资源:

How to: Publish enhanced presence informationSelf.BeginPublishContactInformation