企业即时通讯与协作平台(如曾经的Microsoft Lync Server及其继任者Skype for Business Server)是现代企业沟通的核心,标准功能有时无法满足特定业务流程、集成需求或定制化用户体验的要求,这时,Lync/Skype for Business 二次开发就展现出巨大价值,本文将深入探讨如何基于Lync/Skype for Business平台进行二次开发,提供专业、实用的开发路径和解决方案,助您构建强大的定制化企业通信应用。

理解平台与核心开发接口
Lync/Skync for Business Server 提供了一套强大的API集合,是二次开发的基石,主要接口包括:
-
Lync Client SDK (现已演进为Skype for Business SDK):
- 定位: 主要面向客户端集成,允许开发者在自己的应用程序(WinForms, WPF)中嵌入Lync/SfB功能(如联系人列表、IM窗口、音频/视频通话控件),或响应用户状态变化、对话事件等。
- 关键能力: 启动IM、呼叫、会议;获取和订阅联系人状态/位置;处理对话邀请;自定义联系人卡片;访问对话历史记录(需权限)。
- 适用场景: 在业务应用(如CRM、ERP)中直接发起沟通;构建定制化的统一通信客户端;创建状态驱动的协作工作流。
-
Unified Communications Managed API (UCMA – 核心服务器端开发接口):
- 定位: 服务器端编程模型,用于构建运行在应用服务器上的自动化、高可靠性的通信应用,独立于最终用户客户端。
- 关键能力: 创建和管理终结点(Endpoint);处理入站呼叫/IM/会议邀请;发起出站呼叫/IM/会议;合成和识别语音(IVR基础);会议管理(创建、邀请、控制);与后端系统深度集成(数据库、Web服务)。
- 适用场景: 构建自动应答/呼叫中心(ACD/IVR)系统;会议助理/调度机器人;状态订阅服务;呼叫记录/分析系统;与业务系统(如工单系统)深度集成的通信工作流。
-
Unified Communications Web API (UCWA):
- 定位: 基于RESTful的Web API,旨在为Web应用和移动应用提供访问Lync/SfB核心功能的能力,无需在客户端安装Lync/SfB软件。
- 关键能力: 用户认证(OAuth);管理联系人/组;启动IM、音频/视频通话;加入在线会议;获取用户状态/位置;处理会议邀请。
- 适用场景: 开发基于浏览器的轻量级通信客户端;在移动应用(iOS/Android)中集成通信功能;构建跨平台协作门户。
开发环境搭建与准备
-
必备软件:
- Visual Studio: 推荐较新版本(如VS 2019/2026),支持.NET Framework开发(UCMA主要基于.NET Framework 4.x)。
- Lync/Skype for Business Server SDK: 根据您目标开发的平台版本(Lync Server 2010/2013 或 SfB Server 2015/2019)下载并安装对应的SDK,SDK包含库文件、文档和示例代码。
- UCMA Runtime: 开发UCMA应用必须安装对应版本的UCMA运行时环境在开发机和目标部署服务器上。
- 目标平台访问权限: 需要一个有效的Lync/SfB Server环境用于开发和测试,并拥有相应的管理员权限来配置信任的应用(Trusted Application)。
-
关键配置 – 信任的应用 (Trusted Application):
- 核心概念: 服务器端应用(尤其是UCMA应用)必须被Lync/SfB Server信任才能运行,这是安全模型的关键。
- 配置步骤 (使用
New-CsTrustedApplicationPowerShell cmdlet):- 为应用定义唯一的Application ID。
- 指定应用运行的Trusted Application Pool (一个或多个应用服务器)。
- 定义应用监听的端口。
- 配置应用所需的权限(如是否允许代表用户发起呼叫)。
- 证书: 应用服务器和Lync/SfB前端服务器之间通常需要配置相互TLS (MTLS) 认证,使用受信任的证书。
核心开发任务与最佳实践 (以UCMA为例)
UCMA因其强大的服务器端能力,是构建复杂企业通信集成的首选,以下是一些核心任务和要点:

-
创建和配置
ApplicationEndpoint:-
这是UCMA应用的“身份”,它代表应用本身在通信系统中的存在。
-
关键步骤:
// 1. 创建协作平台设置 (通常从配置文件读取) ProvisionedApplicationPlatformSettings settings = new ProvisionedApplicationPlatformSettings( applicationUserAgent, // 应用标识 applicationId, // Trusted Application配置的ID grUUId // Trusted Application Pool的GRUU ); // 2. 启动协作平台 CollaborationPlatform collabPlatform = new CollaborationPlatform(settings); collabPlatform.Startup(); // 3. 创建应用终结点设置 ApplicationEndpointSettings endpointSettings = new ApplicationEndpointSettings(sipUri, credentials); // sipUri: 应用终结点的SIP地址 (e.g., myapp@contoso.com) // credentials: 终结点的认证凭据 (常使用默认凭据或特定证书) // 4. 创建并建立应用终结点 ApplicationEndpoint appEndpoint = new ApplicationEndpoint(collabPlatform, endpointSettings); appEndpoint.BeginEstablish(ar => { appEndpoint.EndEstablish(ar); }, null);
-
-
处理入站通信 (呼叫、IM):
-
应用终结点注册事件处理程序来响应入站请求。
-
示例 (处理入站音频呼叫):
appEndpoint.RegisterForIncomingCall<AudioVideoCall>(OnIncomingAudioVideoCall); private void OnIncomingAudioVideoCall(object sender, CallReceivedEventArgs<AudioVideoCall> e) { AudioVideoCall incomingCall = e.Call; // 1. 可选:检查来电者信息 (e.RemoteEndpoint.Uri) // 2. 接受呼叫 incomingCall.BeginAccept(ar => { try { incomingCall.EndAccept(ar); // 呼叫已建立 // 3. 播放欢迎词 (使用SpeechSynthesisConnector) // 4. 设置IVR菜单 (处理DTMF输入) } catch (RealTimeException ex) { / 处理异常 / } }, null); }
-
-
发起出站通信:
- 应用终结点可以主动发起呼叫或发送IM。
- 示例 (发起出站IM):
InstantMessagingCall imCall = new InstantMessagingCall(appEndpoint); imCall.BeginEstablish("sip:recipient@contoso.com", ar => { try { imCall.EndEstablish(ar); // IM会话已建立 imCall.BeginSendMessage("Hello from the UCMA app!", ar2 => { imCall.EndSendMessage(ar2); }, null); } catch (RealTimeException ex) { / 处理异常 / } }, null);
-
语音处理 (IVR):
- UCMA提供强大的语音合成(TTS)和识别(SR)能力。
- 关键类:
SpeechSynthesisConnector(播放语音),SpeechRecognitionConnector(识别语音/DTMF),Player(播放音频文件)。 - 流程: 将语音连接器绑定到呼叫的
AudioVideoFlow上,使用Player播放提示音或SpeechSynthesisConnector合成语音,使用SpeechRecognitionConnector监听用户输入并触发相应动作。
-
会议管理:
- 应用可以创建会议、邀请参与者、控制会议状态(静音、锁定、录音)。
- 关键类:
ConferenceSession(关联到AudioVideoCall或ConferenceInvitation)。
实战案例:构建一个简单的会议调度助理

场景: 用户通过发送特定格式的IM给一个应用终结点(如 scheduler@contoso.com),自动创建Skype for Business在线会议并将会议链接返回给用户。
UCMA实现要点:
- 应用终结点: 配置
scheduler@contoso.com为应用终结点SIP地址。 - 处理入站IM: 在
OnIncomingInstantMessagingCall事件处理程序中:- 解析用户IM消息内容(
"Schedule Meeting at 2026-10-27T14:00 for 60 mins")。 - 验证时间格式和权限。
- 解析用户IM消息内容(
- 创建会议:
ConferenceScheduleInformation conferenceInfo = new ConferenceScheduleInformation(); conferenceInfo.Subject = "Automated Scheduled Meeting"; conferenceInfo.ExpiryTime = DateTime.UtcNow.AddMonths(1); // 链接有效期 conferenceInfo.MeetingOwner = "organizer@contoso.com"; // 会议所有者(应用或指定用户) conferenceInfo.AccessLevel = ConferenceAccessLevel.Everyone; // 访问级别 // 设置开始/结束时间 conferenceInfo.SchedulingTemplate = new OnlineMeetingTemplateSchedulingTemplate( new List<OnlineMeetingTime>() { new OnlineMeetingTime(startTime, endTime) }); // 使用应用终结点关联的ConferenceServices创建会议 appEndpoint.ConferenceServices.BeginScheduleConference(conferenceInfo, ScheduleCallback, null); - 获取会议链接: 在
ScheduleCallback中,从异步操作结果获取ConferenceScheduleInformation,其中包含OnlineMeetingUri(会议ID) 和JoinUrl(加入链接)。 - 回复用户: 使用
InstantMessagingCall.BeginSendMessage将会议加入链接发送回发起请求的用户。
安全、性能与部署考量
- 安全:
- 严格遵守信任应用模型配置。
- 使用强密码/证书保护应用凭据。
- 验证所有输入数据,防止注入攻击。
- 应用代码需遵循安全编码规范。
- 控制应用权限(仅授予必要权限)。
- 性能:
- UCMA应用设计为长时间运行服务,注意资源管理(连接、内存)。
- 使用异步编程模型避免阻塞。
- 考虑负载均衡(部署到多个应用服务器,配置多个应用实例)。
- 监控应用性能指标(CPU, 内存, 活动会话数)。
- 部署:
- 应用需部署在已安装UCMA运行时的Windows Server上(通常与应用服务器角色分开)。
- 确保服务器加入域,网络连通性(到前端服务器、SQL Server)。
- 配置防火墙规则允许应用服务器与前端服务器通信(特定端口)。
- 使用安装程序或脚本自动化部署和配置(包括信任应用配置)。
- 实现日志记录和错误监控(如集成ELK Stack或Application Insights)。
未来演进:迁移至Microsoft Teams
虽然Lync/SfB Server仍在许多企业服役,但Microsoft的战略重心已全面转向Microsoft Teams,Teams提供了更现代化的开发平台:
- Microsoft Graph API: 访问Teams核心资源(用户、团队、频道、聊天、会议、通话)的主要RESTful接口。
- Microsoft Teams SDK: 用于构建Teams标签页(Tabs)、消息扩展(Messaging Extensions)、机器人(Bots)、连接器(Connectors)等应用组件。
- Azure Communication Services (ACS): 提供与Teams无关但兼容的底层通信能力(语音、视频、聊天、短信、PSTN),适合构建全新通信应用或深度定制Teams体验。
对于现有Lync/SfB二次开发:
- 评估: 分析现有自定义应用的功能和依赖。
- 映射: 确定Teams平台(Graph API, Teams SDK, ACS)中对应的功能实现方式。
- 重构/重建: 将应用逐步迁移到Teams生态,Teams Bot常是替代UCMA自动化任务(如会议调度、通知机器人)的良好选择。
Lync/Skype for Business二次开发,特别是利用UCMA的强大能力,为企业解锁了深度定制通信流程、集成业务系统、提升协作效率的巨大潜力,理解核心API、掌握信任应用配置、遵循安全与性能最佳实践,是成功开发的关键,随着技术演进,积极拥抱Microsoft Teams及其开发生态是保持通信解决方案现代化和可持续性的必然方向,通过精心的设计和实现,二次开发能显著提升企业通信的智能化水平和业务价值。
您在企业通信集成方面面临哪些具体挑战?是希望将通信能力嵌入现有业务系统,还是需要构建自动化的工作流(如IVR、会议调度)?或者您正在规划从Lync/SfB到Teams的迁移路径并需要处理定制化功能的迁移?欢迎在评论区分享您的需求和遇到的问题,一起探讨最合适的解决方案!
原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/10884.html