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

如何获取访问MS Bot Framework构建的S4B机器人的用户设备信息

刚好有过类似的开发经验,给你整理几个可行的方案,针对S4B(Skype for Business)渠道、C#版Bot Framework的场景:

获取S4B渠道Bot用户设备信息的可行方案

1. 核心思路:依赖S4B专属的ChannelData

首先要明确:你提到的示例SFBUserAgent (Microsoft-BotFramework/3.1+https://botframework.com/ua)是Bot Framework转发请求时的代理User-Agent,它不包含用户实际设备的类型或操作系统信息。所以必须通过S4B渠道特有的ChannelData字段来获取这些上下文信息。

2. 具体实现步骤(C#)

步骤1:定义对应ChannelData结构的实体类

S4B的ChannelData会携带客户端信息,我们可以先定义一个匹配的类来方便反序列化:

using Newtonsoft.Json;

public class SfbChannelData
{
    [JsonProperty("clientInfo")]
    public ClientInfo ClientInfo { get; set; }
}

public class ClientInfo
{
    [JsonProperty("clientType")]
    public string DeviceType { get; set; } // 取值示例:"Desktop"、"Mobile"
    [JsonProperty("os")]
    public string OperatingSystem { get; set; } // 取值示例:"Windows 11"、"iOS 17.0"
}

步骤2:在Bot逻辑中解析ChannelData

无论是Bot Framework v3还是v4版本,都可以从Activity对象中提取ChannelData并反序列化:

  • Bot Framework v4 示例:
using Newtonsoft.Json;

// 在处理TurnContext的方法中
if (turnContext.Activity.ChannelId == "skypeforbusiness")
{
    if (turnContext.Activity.ChannelData != null)
    {
        var sfbChannelData = JsonConvert.DeserializeObject<SfbChannelData>(turnContext.Activity.ChannelData.ToString());
        if (sfbChannelData?.ClientInfo != null)
        {
            string deviceType = sfbChannelData.ClientInfo.DeviceType;
            string osInfo = sfbChannelData.ClientInfo.OperatingSystem;
            
            // 这里可以根据设备信息执行自定义逻辑,比如发送适配不同设备的消息
        }
    }
}
  • Bot Framework v3 示例:
using Newtonsoft.Json;

// 在Dialog的处理方法中
if (context.Activity.ChannelId == "skypeforbusiness")
{
    if (context.Activity.ChannelData != null)
    {
        var sfbChannelData = JsonConvert.DeserializeObject<SfbChannelData>(context.Activity.ChannelData.ToString());
        if (sfbChannelData?.ClientInfo != null)
        {
            string deviceType = sfbChannelData.ClientInfo.DeviceType;
            string osInfo = sfbChannelData.ClientInfo.OperatingSystem;
            
            // 后续业务逻辑处理
        }
    }
}

3. 额外注意事项

  • 一定要先判断ChannelId为skypeforbusiness,避免在其他渠道(如Teams、微信)执行这段逻辑导致错误;
  • 如果遇到ClientInfo为空的情况,可能是用户使用的S4B客户端版本较旧,建议做兼容处理,比如默认标记为"Unknown";
  • 不同版本的S4B客户端返回的os字段格式可能略有差异,比如有的会带版本号,有的只显示系统名称,需要根据实际情况做解析适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:22:37