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

Adaptive Card用户特定视图刷新未触发InvokeActivity问题

Adaptive Card InvokeActivity未触发排查及URL修改方案

可能的触发失败原因

  • 用户ID不匹配:你配置的refresh.userIds是固定值999111999111999111,如果当前接收卡片的用户ID和这个不一致,自动刷新不会触发。即便是手动点击Refresh按钮,也要确保Bot能正确识别用户ID,否则可能无法匹配触发逻辑。
  • 版本兼容性问题:你用的是Adaptive Card 1.4版本,需确认Bot Framework SDK版本和客户端(比如Teams)是否支持refresh和Action.Execute特性。部分旧版本客户端或SDK可能不兼容,导致Invoke请求无法发送到Bot。
  • 方法重写逻辑问题:检查你的Bot类是否正确继承ActivityHandler,且OnInvokeActivityAsync方法没有被其他逻辑拦截。比如在OnTurnAsync中如果提前返回响应,会导致流程无法走到Invoke处理方法。
  • 自动刷新触发条件未满足:refresh配置中没有设置interval参数,默认只有卡片首次加载给指定用户时才会自动触发Invoke;如果是手动触发,需要确认是否点击了卡片上的Refresh按钮,且按钮的Action.Execute配置正确。
  • Bot端点配置错误:确认Bot的服务端点能正常接收Invoke请求,比如Azure Bot Service中通道配置是否正确,有没有开启对应权限允许Invoke请求传递。

解决步骤及URL修改实现

  1. 修正用户ID配置:将refresh.userIds替换为当前测试用户的真实ID,或者去掉userIds让所有用户都能触发刷新(如果不需要用户特定视图的话)。
  2. 验证版本兼容性:升级Bot Framework SDK到最新稳定版,同时确认客户端(如Teams)是最新版本,确保支持Adaptive Card 1.4的refresh特性。
  3. 检查方法重写逻辑:确保OnInvokeActivityAsync方法正确重写,示例如下:
protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
{
    var invokeActivity = turnContext.Activity;
    if (invokeActivity.Name == "adaptiveCard/action")
    {
        var actionData = JsonConvert.DeserializeObject<AdaptiveCardActionData>(invokeActivity.Value.ToString());
        // 判断是否是refresh操作
        if (actionData.Verb == "refresh")
        {
            // 生成更新后的Adaptive Card
            var updatedCard = GetUpdatedAdaptiveCard();
            var attachment = new Attachment
            {
                ContentType = AdaptiveCard.ContentType,
                Content = updatedCard
            };
            // 返回更新后的卡片
            return new InvokeResponse
            {
                Status = 200,
                Body = new AdaptiveCardInvokeResponse
                {
                    Type = "application/vnd.microsoft.card.adaptive",
                    Value = updatedCard
                }
            };
        }
    }
    // 调用基类处理其他Invoke请求
    return await base.OnInvokeActivityAsync(turnContext, cancellationToken);
}
  1. 实现URL修改逻辑:在GetUpdatedAdaptiveCard方法中,修改ActionSet里的Action.OpenUrl的title和url值:
private AdaptiveCard GetUpdatedAdaptiveCard()
{
    // 可以从原卡片模板加载,或者重新构建
    var cardJson = @"
    {
        ""$schema"": ""http://adaptivecards.io/schemas/adaptive-card.json"",
        ""type"": ""AdaptiveCard"",
        ""version"": ""1.4"",
        ""refresh"": {
            ""action"": {
                ""type"": ""Action.Execute"",
                ""title"": ""Refresh"",
                ""verb"": ""refresh"",
                ""data"": {
                    ""CreatedBy"": ""test""
                }
            },
            ""userIds"": [""真实用户ID""]
        },
        ""body"": [
            // 保留原有body内容
        ],
        ""actions"": [
            {
                ""type"": ""Action.OpenUrl"",
                ""title"": ""更新后的按钮标题"",
                ""url"": ""更新后的URL""
            }
        ]
    }";
    return JsonConvert.DeserializeObject<AdaptiveCard>(cardJson);
}
  1. 测试手动触发:点击卡片上的Refresh按钮,查看Bot是否接收到Invoke请求,同时检查网络请求是否正常发送到Bot端点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:02:05