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

如何在MS Bot SDK的C#代码中获取机器人托管页面URL?

获取托管Web Chat的页面URL(MS Bot SDK C#)

我刚好碰到过类似的需求,其实Bot Framework默认确实不会把托管页面的URL自动传到Activity对象里,但我们可以通过前端传自定义数据+后端解析ChannelData的方式解决,具体步骤如下:

第一步:前端Web Chat注入时传递页面URL

在你注入Web Chat的前端脚本里,添加自定义的channelData字段,把当前页面的URL(window.location.href)传递给Bot。示例代码如下:

window.WebChat.renderWebChat({
    directLine: window.WebChat.createDirectLine({ token: '你的Direct Line令牌' }),
    userID: '自定义用户ID',
    // 新增channelData,携带页面URL
    channelData: {
        pageUrl: window.location.href
    }
}, document.getElementById('webchat'));

第二步:C#后端从Activity中解析URL

在Bot的消息处理逻辑里,通过Activity.ChannelData属性获取前端传递的自定义数据。因为ChannelData是动态类型,你可以用dynamic直接访问,或者用JObject解析(类型更安全)。示例代码:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    if (turnContext.Activity.ChannelData != null)
    {
        // 方式1:用dynamic直接访问
        dynamic channelData = turnContext.Activity.ChannelData;
        string pageUrl = channelData.pageUrl;

        // 方式2:用JObject解析(类型更安全)
        // var channelData = JObject.FromObject(turnContext.Activity.ChannelData);
        // string pageUrl = channelData["pageUrl"]?.ToString();

        if (!string.IsNullOrEmpty(pageUrl))
        {
            // 拿到URL后做你需要的处理
            await turnContext.SendActivityAsync(MessageFactory.Text($"托管页面的URL是:{pageUrl}"), cancellationToken);
        }
        else
        {
            await turnContext.SendActivityAsync(MessageFactory.Text("未获取到托管页面的URL"), cancellationToken);
        }
    }
    else
    {
        await turnContext.SendActivityAsync(MessageFactory.Text("未接收到自定义渠道数据"), cancellationToken);
    }
}

补充说明

为什么Activity里没有默认的页面URL属性?因为Bot Framework的Activity模型是通用的,要适配Teams、Slack、Web Chat等多种渠道,不同渠道的上下文信息差异很大,Web Chat本身不会主动把页面URL传递给Bot,所以需要我们手动通过channelData自定义传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:55:45