You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Bot Framework v3.11.0在Skype频道无法上传文本文件求助

解决Skype频道中Bot Framework v3.11.0文本附件上传问题

我明白你遇到的困扰——在Bot Framework模拟器里正常运行的附件上传功能,到Skype频道就抛出404错误。这是因为Skype频道并不支持Bot Framework的UploadAttachmentAsync API,这个接口主要适配Teams等其他支持该功能的频道,Skype有自己独立的附件处理逻辑。

下面给你两种可行的解决方案,都能让用户在Skype客户端内直接查看或下载文本附件:

方案1:直接将文本内容嵌入附件

这种方法适合小体积的文本文件,不需要依赖外部存储,直接把文件内容作为附件的Content字段返回。修改后的代码如下:

public static async Task<Activity> GetTextAttachmentAsync(Activity message)
{
    var reply = message.CreateReply("Here is a text attachment");
    
    // 下载文本文件内容
    byte[] fileData = null;
    using (var wc = new System.Net.WebClient())
        fileData = wc.DownloadData("https://textfiles.com/100/adventur.txt");
    
    // 将字节数组转为字符串(根据文件实际编码调整,这里默认用UTF-8)
    string textContent = System.Text.Encoding.UTF8.GetString(fileData);
    
    // 直接构造附件,跳过Skype不支持的UploadAttachmentAsync流程
    reply.Attachments = new List<Attachment>
    {
        new Attachment
        {
            Name = "adventur.txt",
            ContentType = "text/plain", // 如果是HTML文件可改为"text/html"
            Content = textContent // 直接把文本内容作为附件核心内容
        }
    };
    
    return reply;
}

改动说明:

  • 移除了ConnectorClientUploadAttachmentAsync相关逻辑,避免调用Skype不兼容的API
  • 将下载的字节数组转为字符串,直接赋值给附件的Content字段
  • 调整了附件名称和ContentType,确保Skype能正确识别并展示内容

方案2:使用公开可访问的文件URL

如果你的文本文件体积较大,或者需要用户直接下载原始文件,可以把文件上传到公开存储服务(比如Azure Blob Storage),然后将公开URL作为附件的ContentUrl

public static async Task<Activity> GetTextAttachmentAsync(Activity message)
{
    var reply = message.CreateReply("Here is a text attachment");
    
    // 假设你已将文件上传至公开存储,获取到可直接访问的URL
    string publicFileUrl = "https://your-public-storage-service/adventur.txt";
    
    reply.Attachments = new List<Attachment>
    {
        new Attachment
        {
            Name = "adventur.txt",
            ContentType = "text/plain",
            ContentUrl = publicFileUrl
        }
    };
    
    return reply;
}

注意事项:

  • 确保文件URL是公开可访问的,Skype客户端需要能直接获取到文件内容
  • 如果使用Azure Blob Storage,需将Blob的访问级别设置为"公开读取"

这两种方法都能在Skype频道中正常工作,用户可以直接在客户端内查看附件内容,或者点击下载原始文件。

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

火山引擎 最新活动