You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:37