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
相关产品推荐
相关产品推荐

