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

在Angular 5中获取Skype for Business用户状态与头像信息

嘿,我来给你分享两种经过验证的实现方案,分别针对Angular 5和C#,用来展示Skype for Business用户的在线状态与头像信息,希望能帮你快速落地需求!

Angular 5 实现方案

要在Angular 5里实现这个功能,核心是借助Skype for Business Web SDK来获取用户的状态和头像数据。下面是具体步骤:

1. 引入Web SDK脚本

首先在项目的index.html中引入Skype的Bootstrap脚本,这是初始化SDK的基础:

<script src="https://swx.cdn.skype.com/shared/v/1.2.18/SkypeBootstrap.min.js"></script>

2. 组件中初始化SDK并编写业务逻辑

在你的Angular组件(比如SkypeStatusComponent)中,先声明全局的Skype对象,然后在组件初始化时完成SDK的初始化,再编写获取用户状态和头像的方法:

import { Component, OnInit } from '@angular/core';

// 声明全局Skype对象,避免TS编译报错
declare var Skype: any;

@Component({
  selector: 'app-skype-status',
  templateUrl: './skype-status.component.html'
})
export class SkypeStatusComponent implements OnInit {
  userEmail = 'user@domain.com'; // 目标用户邮箱/SIP地址
  userPresence: string;
  userAvatarUrl: string;

  ngOnInit(): void {
    // 初始化Skype SDK
    Skype.initialize({ apiKey: 'SWX-BUILD-SDK' }, () => {
      this.loadUserInfo(this.userEmail);
    }, (error) => {
      console.error('Skype SDK初始化失败:', error);
    });
  }

  private loadUserInfo(userEmail: string): void {
    const app = Skype.Application.getInstance();
    // 查询目标用户
    app.personsAndGroupsManager.createPersonQuery()
      .search(userEmail)
      .then((persons) => {
        if (persons.length > 0) {
          const targetUser = persons[0];
          // 监听在线状态变化
          targetUser.presence.status.changed((newStatus) => {
            this.userPresence = newStatus;
          });
          // 获取初始状态
          this.userPresence = targetUser.presence.status();
          // 获取头像URL
          this.userAvatarUrl = targetUser.avatarUrl();
        } else {
          console.error('未找到目标用户');
        }
      })
      .catch((error) => {
        console.error('获取用户信息失败:', error);
      });
  }
}

3. 模板中展示状态和头像

在组件的HTML模板里,直接绑定数据即可:

<div class="skype-user-info">
  <img [src]="userAvatarUrl" alt="用户头像" class="avatar" />
  <div class="presence-status">
    当前状态: {{ userPresence }}
    <!-- 可以根据状态显示不同样式,比如在线用绿色,离开用黄色 -->
    <span [ngClass]="{'status-online': userPresence === 'Online', 'status-away': userPresence === 'Away'}"></span>
  </div>
</div>
C# 实现方案

如果是后端C#服务需要获取Skype for Business用户的状态和头像,推荐使用**UCWA(Unified Communications Web API)**来调用Skype服务器的接口。下面是具体实现:

1. 准备依赖与认证

首先安装Microsoft.Identity.Client包(用于获取OAuth令牌),然后配置Skype for Business服务器的认证信息:

using Microsoft.Identity.Client;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

public class SkypeService
{
    // 配置参数,根据你的Skype环境修改
    private const string ClientId = "your-client-id";
    private const string TenantId = "your-tenant-id";
    private const string SkypeServerUrl = "https://your-skype-server/ucwa/oauth/v1";
    private const string Scope = "https://your-skype-server/ucwa/All";

    private async Task<string> GetAccessToken()
    {
        var app = PublicClientApplicationBuilder
            .Create(ClientId)
            .WithTenantId(TenantId)
            .Build();

        var result = await app.AcquireTokenInteractive(new[] { Scope })
            .ExecuteAsync();
        return result.AccessToken;
    }
}

2. 获取用户在线状态

编写方法调用UCWA的presence接口:

public async Task<string> GetUserPresence(string userSip)
{
    var accessToken = await GetAccessToken();
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

    // 先创建UCWA应用实例
    var appResponse = await httpClient.PostAsync($"{SkypeServerUrl}/applications", null);
    var appData = await appResponse.Content.ReadAsAsync<dynamic>();
    var appUrl = appData._links.self.href;

    // 查询用户presence
    var presenceUrl = $"{appUrl}/people/{userSip}/presence";
    var presenceResponse = await httpClient.GetAsync(presenceUrl);
    var presenceData = await presenceResponse.Content.ReadAsAsync<dynamic>();
    return presenceData.availability; // 返回状态,比如Online、Away等
}

3. 获取用户头像

UCWA提供了直接获取头像的接口,也可以通过用户SIP地址构造头像URL(如果服务器支持的话):

public async Task<string> GetUserAvatarUrl(string userSip)
{
    var accessToken = await GetAccessToken();
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

    var appResponse = await httpClient.PostAsync($"{SkypeServerUrl}/applications", null);
    var appData = await appResponse.Content.ReadAsAsync<dynamic>();
    var appUrl = appData._links.self.href;

    var personUrl = $"{appUrl}/people/{userSip}";
    var personResponse = await httpClient.GetAsync(personUrl);
    var personData = await personResponse.Content.ReadAsAsync<dynamic>();
    return personData._links.avatar.href; // 返回头像的直接URL
}

注意事项

  • Angular方案需要确保你的域名在Skype for Business服务器的CORS白名单中,否则会出现跨域问题。
  • C#方案需要提前在Azure AD或本地AD中注册应用,获取对应的ClientId和权限。
  • 两种方案都需要用户有访问Skype for Business数据的权限,比如企业内部用户的AD权限。

内容的提问来源于stack exchange,提问作者user7784348

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:08