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

Bot Builder从4.6.0升级到4.9.0后,如何在消息扩展中打开URL?

解决Bot Builder 4.9.0中handleTeamsMessagingExtensionFetchTask返回URL的问题

我完全理解你升级到4.9.0版本后的困扰——这类API返回类型的细微调整确实容易被文档忽略,尤其是之前在4.6.0里运行正常的代码突然失效,很让人头疼。

首先,你遇到的核心问题是4.9.0版本对MessagingExtensionActionResponse的结构校验更严格了,虽然返回类型名称没变,但内部的类型约束细节有调整。你之前的代码里有个不必要的await(因为你直接返回的是一个对象,不是异步操作的结果),这可能导致类型不匹配,进而无法正确触发URL弹窗。

正确的返回写法

你可以调整代码为以下形式,确保结构完全符合4.9.0版本的类型要求:

return {
  task: {
    type: 'continue',
    value: {
      width: 450,
      height: 600,
      title: 'Abc',
      url: '你的目标URL',
      fallbackUrl: '你的备用URL'
    }
  } as MessagingExtensionTask
} as MessagingExtensionActionResponse;

关键调整点

  • 移除多余的await:如果你的返回对象不是通过异步函数获取的,不需要用await包裹,async函数会自动将返回值包装为Promise,完全符合方法要求的Promise<MessagingExtensionActionResponse>返回类型。
  • 明确类型断言:对task部分也加上类型断言as MessagingExtensionTask,可以让TypeScript更好地校验结构,避免隐性的类型错误。
  • 确认字段完整性:确保value里的所有字段(width、height、title、url、fallbackUrl)都正确设置,4.9.0版本对必填字段的校验更严格,缺失可能导致功能失效。

另外,你也可以直接通过类型定义来构建对象,进一步避免错误:

import { MessagingExtensionActionResponse, MessagingExtensionTask } from 'botbuilder';

const task: MessagingExtensionTask = {
  type: 'continue',
  value: {
    width: 450,
    height: 600,
    title: 'Abc',
    url: '你的目标URL',
    fallbackUrl: '你的备用URL'
  }
};

const response: MessagingExtensionActionResponse = { task };
return response;

这种方式更清晰,也能在编译阶段就发现结构问题,比直接断言更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:07:55