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

如何从嵌入iframe的BotFramework聊天机器人URL中获取动态sess值

获取Web Chat嵌入时的sess动态值用于认证

嘿,我来帮你搞定这个问题!你想要获取iframe里的sess动态值来做用户认证,其实这个参数会通过Web Chat的**通道数据(Channel Data)**传递给你的Bot,不用依赖ConnectorClient来拿——那个类主要是用来发送消息或者管理会话的,不是干这个的。

下面是具体的实现步骤,针对Bot Framework v4(现在主流都是v4啦):

1. 从Activity的ChannelData中提取sess值

当用户打开嵌入的Web Chat时,不管是触发会话初始化(MembersAdded事件)还是发送第一条消息,Bot都会收到包含Web Chat参数的Activity。你可以从turnContext.Activity.ChannelData里拿到sess值:

示例1:在用户发送消息时获取

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // 检查ChannelData是否存在并包含Web Chat相关数据
    if (turnContext.Activity.ChannelData != null)
    {
        var channelData = JObject.FromObject(turnContext.Activity.ChannelData);
        if (channelData.ContainsKey("webchat"))
        {
            var webChatParams = channelData["webchat"] as JObject;
            // 提取sess动态值
            var sessValue = webChatParams["sess"]?.ToString();
            
            if (!string.IsNullOrEmpty(sessValue))
            {
                // 这里可以加入你的用户认证逻辑,比如验证sess的有效性
                await turnContext.SendActivityAsync(MessageFactory.Text($"已获取到会话标识:{sessValue}"), cancellationToken);
            }
        }
    }

    // 你的其他消息处理逻辑
    await base.OnMessageActivityAsync(turnContext, cancellationToken);
}

示例2:在会话初始化时就获取(无需用户发消息)

如果想在用户打开Web Chat的第一时间就拿到sess值做认证,可以在OnMembersAddedAsync方法里处理:

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var member in membersAdded)
    {
        // 排除Bot自己,只处理用户加入的情况
        if (member.Id != turnContext.Activity.Recipient.Id)
        {
            if (turnContext.Activity.ChannelData != null)
            {
                var channelData = JObject.FromObject(turnContext.Activity.ChannelData);
                if (channelData.ContainsKey("webchat"))
                {
                    var webChatParams = channelData["webchat"] as JObject;
                    var sessValue = webChatParams["sess"]?.ToString();
                    
                    if (!string.IsNullOrEmpty(sessValue))
                    {
                        // 执行认证逻辑,比如校验sess对应的用户身份
                        await turnContext.SendActivityAsync(MessageFactory.Text($"欢迎!已验证你的会话标识:{sessValue}"), cancellationToken);
                    }
                }
            }
        }
    }
}

2. 注意事项

  • 确保你的iframe嵌入代码里的sess=dynamic_value是正确动态生成的,比如从你的后端服务获取有效标识再拼到URL里。
  • 上面的代码需要引入Newtonsoft.Json(Bot Framework默认会引用这个包),所以要确保你的项目里有这个依赖。
  • 如果你还在使用Bot Framework v3,逻辑类似,但需要从Activity.ChannelData里提取,写法会略有不同,不过建议升级到v4哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:40:10