如何收听 Skype for Business 通话事件

How to listen to Skype for Business call events

我需要通知后端服务器有关 Skype for Business 呼叫事件。调用后端不是问题,但监听调用事件是。我考虑过查看和解析 skype 日志文件,但日志文件中似乎没有呼叫信息......无论如何这将是一个丑陋的解决方案。

是否有可能以某种方式监听 SfB 调用事件并触发自定义操作? 我知道有各种 SfB SDK,但其中 none 似乎提供了一种监听这些事件的方法...

我希望能够做这样的事情(伪代码,我不太关心使用什么语言,但更喜欢JavaScript):

skype.onCallIncoming(callInfo => {
    console.log(callInfo.user + ' is calling');
    // my custom action
});

skype.onCallAccepted(callInfo => {
    console.log('The call was accepted');
    // my custom action
});

skype.onCallEnded(callInfo => {
    console.log('The call was ended');
    // my custom action
});

SfB 不提供您可以在 任何 SDK 中使用的任何实时 "call events"。

对于实时 "calls",您可以做的最好的事情(不费吹灰之力)就是订阅用户状态并挂断 "on a call"(on-the-phone) activity 令牌忙状态(不保证此存在状态是正确的)。这样做的问题是您无法真正获得每个人的 "all" 呼叫事件,因为您只能订阅您知道的端点。使用大规模订阅也存在问题。这可以通过大多数 Skype SDK 完成,包括 UCWA.

另一种选择是使用 CDR 数据库,尽管这不适用于 "live" 呼叫并且需要为站点启用 CDR 数据库。启用后,您只需使用 SQL 再次查询数据库以获取历史通话数据。

如果您真的需要大规模呼叫监控,那么唯一的选择是创建一个 SIP proxy application 在 FE 机器上运行并将 "sip" 消息转换为呼叫事件。这是很多工作,看起来很简单,但很快就会变得非常困难。这将为您提供 "live" 呼叫事件,但需要很长时间才能正确完成,而且您必须对 SIP 有深入的了解。

如果您仅谈论本地 Skype 桌面客户端呼叫(仅 windows 客户端),您可以使用 client SDK 连接到本地客户端,您可以跟踪呼叫事件那样。