是否可以在 Microsoft Lync 中收到即时消息时触发脚本?

是否可以在 Microsoft Lync 中收到即时消息时触发脚本?

我刚刚升级到 Lync 2013,正在考虑使用它来代替 Pidgin+SIPE。Pidgin 的众多优秀功能之一是 Growl 集成……我会怀念它的。

Lync 没有 Growl 插件,而且也没有正在开发中,但我真的不需要它……我已经发现了如何从 shell 脚本发出 Growl 通知,我所需要的只是连接到 Lync 以启动 bat 文件(或者可能是 Powershell)。有什么方法可以实现或促成这一点吗?

Microsoft Lync SDK 文档让它看起来像可能是可能的,但对我来说这听起来很乱。有人能帮我入门吗,或者至少排除一下脚本的可能性?

答案1

从这一点来看,我的操作方案是编写一些代码来调用外部可执行文件并传递参数(例如 powershell.exe),并将其与 IM Received 事件绑定,如果存在这样的事件,我现在正在下载 sdk,以便使用我发现的内容进行更新。但这样一来,您就不会局限于收到 IM 时发生的事情。

答案2

如果安装了 Lync SDK(特别是名为 Microsoft.Lync.Model.Dll 的 dll),Powershell 脚本可以挂接到 Lync 事件中。

您可以使用如下语句来导入它:

import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.Dll"

然后你会得到这样的客户端对象:

$client = [Microsoft.Lync.Model.LyncClient]::GetClient()

最后,你需要连接到你想要采取行动的事件:

$i = 0
# For each conversation
foreach ($con in $client.ConversationManager.Conversations) {
  # For each participant in the conversation
  $con.Participants | Where { !$_.IsSelf } | foreach {
    Register-ObjectEvent -InputObject $_.Modalities[1] -EventName "InstantMessageReceived" -SourceIdentifier "person $i" -action { newInstantMessage }
    $i++
   }
}

每个对话对象(打开 IM 窗口/选项卡)至少有两个参与者(有时更多),上述代码检查每个对话及其中的每个参与者,但忽略“您”这个参与者(IsSelf)。然后,每次有人向您发送消息时,此代码都会触发 newInstantMessage 函数。

最重要的是,您需要在 powershell 脚本末尾添加一些内容来阻止其退出,while(1) {} 就足够了。最后,您可能还想挂接 ConversationAdded 事件并在其中注册新的 InstantMessageReceived 事件。否则它仅适用于现有对话。

对于那些不感兴趣的人,我打算在不久的将来公开我的脚本。请查看 Growl For Windows 网站。

相关内容