如何在Web应用中展示Skype for Business用户在线状态?
展示Skype for Business用户在线状态的可行方案
我之前帮团队实现过类似的Web应用状态展示需求,刚好可以分享几个亲测可行的方案,涵盖官方SDK集成和轻量替代方案:
一、UCWA Web SDK 实现(官方推荐)
虽然域名白名单是前提,但企业级应用提交申请的流程其实并不复杂:
- 首先通过微软商用支持渠道或者合作伙伴门户提交域名白名单申请,说明你的应用场景,一般1-2周就能审批通过
- 审批通过后,就可以正常集成SDK,以下是核心代码示例:
// 初始化SDK配置 const skypeConfig = { apiKey: '你的企业API密钥', domain: '已白名单的域名', user: { uri: 'sip:target-user@your-domain.com' } }; // 初始化并登录获取状态 Skype.initialize({ apiKey: skypeConfig.apiKey }, (api) => { const app = api.application(); app.signInManager.signIn(skypeConfig) .then(() => { // 查询目标用户的状态 return app.personsAndGroupsManager.createPersonQuery() .getByUri(skypeConfig.user.uri); }) .then((person) => { // 监听状态变化 person.status.changed((newStatus) => { console.log('用户状态更新:', newStatus); // 根据状态更新页面图标(比如在线用绿色,忙碌用红色) updatePresenceIcon(newStatus); }); }) .catch((error) => { console.error('SDK集成出错:', error); }); });
二、轻量替代:Presence Web Control 或 内部API调用
如果不想走复杂的SDK审批流程,内网环境下可以试试这两个方法:
1. Presence Web Control
微软提供的轻量嵌入控件,直接在页面中插入脚本即可展示状态甚至发起聊天,域名限制相对宽松(内网域名一般默认允许):
<!-- 展示带状态的用户卡片 --> <div id="skype-presence"></div> <script> (function() { var s = document.createElement('script'); s.src = 'https://teams.microsoft.com/l/chat/0/0?users=sip:user@your-domain.com&embed=true'; s.async = true; document.getElementById('skype-presence').appendChild(s); })(); </script>
2. 内部Lync Discover API
如果是企业内网,你的Web应用可以直接调用Skype for Business的内部状态API,不需要SDK:
// 调用内网状态API fetch('https://lyncdiscover.your-domain.com/presence/v1/users/sip:user@your-domain.com') .then(response => response.json()) .then(data => { // 状态值一般为 Available/Busy/Away/Offline 等 const userStatus = data.availability; updatePresenceIcon(userStatus); }) .catch(err => console.error('获取状态失败:', err));
注意:这个API仅对内网开放,需要确保Web应用和Skype服务在同一域,且用户已登录客户端。
三、内网环境专属:PowerShell定时同步状态
如果你的Web应用不需要实时状态(比如5分钟刷新一次即可),可以用PowerShell定期导出用户状态到内部数据库,Web应用直接读取数据库数据:
- PowerShell脚本示例(需安装Skype for Business模块):
# 获取指定用户状态 $userPresence = Get-CsUserPresence -Identity "user@your-domain.com" # 将状态写入SQL数据库(示例) Invoke-SqlCmd -ServerInstance "your-db-server" -Database "presence-db" ` -Query "INSERT INTO UserPresence (UserUri, Availability) VALUES ('$($userPresence.UserUri)', '$($userPresence.Availability)')"
- Web应用只需定时从数据库查询状态,完全避免了API调用的权限问题。
关键注意事项
- 所有方案都依赖用户已登录并运行Skype for Business客户端
- 内网环境下确保Lync Discover服务正常运行
- 状态图标可以根据微软官方定义的状态值(Available、Busy、Away、DoNotDisturb、Offline等)自定义样式
内容的提问来源于stack exchange,提问作者QazPhilby
相关产品推荐
相关产品推荐

