Search code examples
botframework

How to let user click to open the CSV file in browser C# BotFramework SDK3


As the title, I want to let user click to open a file in browser which is created by Bot. I'm using webChat.

The code is what I have tried. In botframework-emulator, if I click the link, the CSV file will open in the browser.

But in the webChat, it will request user to download, not open in the browser.

 var aaa = await GetCSVAttachmentAsync(replymes.ServiceUrl, replymes.Conversation.Id);
 foreach(var aa in aaa)
 replymes.Attachments.Add(aa);

 await context.PostAsync(replymes);




        private async Task<IList<Attachment>> GetCSVAttachmentAsync(string serviceUrl, string conversationId)
        {
            string str = "this is a text CSV";
            byte[] array = Encoding.GetEncoding("shift_jis").GetBytes(str);


            using (var connector = new ConnectorClient(new Uri(serviceUrl)))
            {
                var attachments = new Attachments(connector);
                var response = await attachments.Client.Conversations.UploadAttachmentAsync(
                    conversationId,
                    new AttachmentData
                    { 
                        Name = "userinfo.csv",
                        OriginalBase64 = array,
                        Type = "text/csv"

                    });


                message.Add(new Attachment
                {
                    Name = "userinfo.html",
                    ContentType = "text/html",
                    ContentUrl = response.Id
                });
                return message;

            }
        }

To solve this problem, I also tried storageV2. But it seems the URI can't be accessed directly.enter image description here


Solution

  • I still couldn't figure it out without creating a real file. But instead of using storage V2, I can solve the problem. The thought is as below.

    1. Let the bot create a file.
    2. Upload it to Storage V2 using static website
    3. Send the static website to user.