Bot Builder 4开发MS Teams机器人上传附件返回404错误问题
问题原因
从你返回的404错误日志可以直接看到,上传附件的POST请求体是空对象{},说明你传入的附件参数没有被SDK正确序列化发送,结合代码细节,共有5个直接导致错误的问题:
- 异步方法未加
await:connector.conversations.uploadAttachment是异步Promise方法,你调用时没有加await,方法还没执行完成就走到后续逻辑,也无法捕获接口真实返回的参数错误提示。 - 变量拼写错误:接收上传返回值的变量写为
responce(正确拼写为response),后续拼接附件地址时读取response.id本身就会触发未定义变量错误。 - 上传参数字段名错误:Bot Framework附件上传接口要求的附件参数字段为
contentBase64(存base64格式文件内容)、contentType(存文件MIME类型),你代码里写的是originalBase64和type,SDK无法识别这些非标准字段,序列化时直接丢弃,最终发出空请求体。 - 文件内容格式错误:
fs.readFileSync默认返回Buffer类型对象,没有手动转成base64字符串就直接传入参数,SDK序列化Buffer失败也会导致参数丢失。 - 会话ID重复转义:你请求URL里的会话ID已经被URL编码(包含
%3A类转义字符),SDK发请求时会对路径参数再次转义,导致接口路由匹配失败返回404。
修复方案
将代码替换为以下修正后的版本即可:
const fs = require('fs'); const path = require('path'); export async function getUploadedAttachment(turnContext) { // 读取本地文件并转换为base64字符串 const imageBuffer = fs.readFileSync(path.join(__dirname, '../resources/image.png')); const imageBase64 = imageBuffer.toString('base64'); // 创建连接器客户端 const connectorFactory = turnContext.turnState.get(turnContext.adapter.ConnectorFactoryKey); const connector = await connectorFactory.create(turnContext.activity.serviceUrl); // 对会话ID先做一次解码,避免SDK重复转义导致路由错误 const conversationId = decodeURIComponent(turnContext.activity.conversation.id); // 等待附件上传完成,使用正确的参数字段名 const response = await connector.conversations.uploadAttachment(conversationId, { name: 'image.png', contentBase64: imageBase64, contentType: 'image/png' }); // 拼接可直接在消息里引用的附件地址 const baseUri = connector.baseUri; const attachmentUri = `${baseUri}${baseUri.endsWith('/') ? '' : '/'}v3/attachments/${encodeURI(response.id)}/views/original`; return { name: 'image.png', contentType: 'image/png', contentUrl: attachmentUri }; }
注意事项
- 确保机器人已经被添加到目标频道/聊天中,且拥有发送消息、上传文件的对应权限,用户必须先和机器人完成过一次交互,机器人才能主动向该会话发送消息。
- Teams对上传文件有大小限制:频道会话单文件不超过4MB,个人聊天单文件不超过15MB,超出限制会返回4xx错误。
- 如果使用Bot Builder 4.20及以上版本,可以直接调用
turnContext.adapter.createConnectorClient(turnContext.activity.serviceUrl)获取连接器实例,不需要手动从turnState读取ConnectorFactory,避免Key不匹配导致拿不到客户端实例。
内容的提问来源于stack exchange,提问作者Андрей Есин
相关产品推荐
相关产品推荐

