获取 Lync 2013 自定义命令 (Lync SDK) 的上下文联系人

Posted

技术标签:

【中文标题】获取 Lync 2013 自定义命令 (Lync SDK) 的上下文联系人【英文标题】:Getting context contacts for Lync 2013 custom command (Lync SDK) 【发布时间】:2013-08-27 09:48:07 【问题描述】:

我正在为 Lync 2013 开发一个基于自定义命令的小型解决方案。 简而言之:我向 Lync 添加了一个按钮。右键单击联系人并从对话窗口中可以看到该按钮。

我希望能够在单击按钮时获得相关的联系人\对话。 %contact-id% 与右键单击联系人效果很好。我的EXE启动了,一切都很好。 但是,在公开对话中使用它会完全阻止 EXE 启动。 如果我删除 %contact-id%,我的 EXE 会启动,但我没有相关联系人。

我做错了吗?我如何获得这些信息?

(我确实看到了一种方法,它建议有一个 Windows 服务来跟踪 Lync 打开的窗口,然后知道将 hWnd 映射到对话。 我真的不想去那里。这对我的需求来说太复杂而且太大了。 另外,我不确定它是否适用于 Lync 2013,因为所有对话都在同一个选项卡中)

我也尝试使用对话窗口扩展,但似乎有同样的问题。 我以为我可以将上下文数据发送给当前对话的其他联系人,但我没有找到获取当前对话的方法,因此我无法使用beginSendContextData

更新: 我设法使用 LyncClient.GetHostingConversation() 获得上下文对话

但是使用 CWE 会导致非常糟糕的用户体验。 有没有办法在没有 CWE 的情况下进行托管对话..?

【问题讨论】:

【参考方案1】:

如果自定义命令是从对话窗口中触发的,我们可以确认参数%contact-id% 没有被传输。在这种情况下,自定义命令不会被执行,它的 .exe 文件不会被启动。

这使您可以选择以编程方式检测当前对话。不幸的是,似乎没有明显的方法可以可靠地检测当前显示的对话。您可以尝试检查ConversationManager 中的所有对话并使用一些提示:

ConversationManager.Conversations.Last() 最后创建的对话,不一定是用户用来单击自定义操作的对话。

Conversation.State == ConversationState.Active 发送消息会将状态切换为“活动”,但可以激活多个对话。

Conversation.Properties[ConversationProperty.Inviter] 邀请者是登录到本地 lync 客户端的用户,即%user-id%

Conversation.Properties[ConversationProperty.LastActivityTimeStamp] 对话收到最后一条消息时的时间戳

http://msdn.microsoft.com/en-us/library/microsoft.lync.model.conversation.conversationproperty_di_3_uc_ocs14mreflyncclnt.aspx

但这些信息仍然只是提示,不足以可靠地检测显示给用户的当前对话。我们仍在寻找一种可靠的方法来检测它。

【讨论】:

以上是关于获取 Lync 2013 自定义命令 (Lync SDK) 的上下文联系人的主要内容,如果未能解决你的问题,请参考以下文章

使用 UI 抑制的 Lync 2013 自定义客户端的视频质量

联系电话号码 Lync SDK 2013

Lync 2013 SDK 的 Self.Contact.ContactInformationChanged 事件

SFB,Lync2013运维技巧关闭点对点视频

创建自定义音频视频呼叫 Lync 2010

自定义白板和 powerpoint 共享 Lync 的功能或在自定义应用程序中重复使用