2017-07-25 87 views
0

目标:动态创建一个包含来自Sql Server查询(不想保存该文件)信息的CSV文件并将其发送给机器人中的用户对Slack的回应。用户点击链接将文件下载到他们的电脑。Bot使用Microsoft Bot Framework(C#)动态创建,可下载的CSV

我在MemoryStream中创建了文件信息,但在机器人响应中无法发送它。这是我的C#伪代码和代码由this启发:

public async Task useSelectedUPC(IDialogContext context, IAwaitable<object> item) 
    { 
     var upc = await item; 

     // use upc to query sql server and obtain information 
     // use that information to create a MemoryStream result in the format of a csv file 

     reply.Attachments = new List<Attachment>() 
       { 
        new Attachment() 
        { 
         ContentType = "text/csv", 
         Content = $"data:text/csv; base 64, {Convert.ToBase64String(result.ToArray())}", 
         Name = "sample.csv" 
        } 
       }; 
     reply.Text = "Results: "; 
     await context.PostAsync(reply); 
    } 

我也试过

Content = result, 

Content = result.ToArray(), 

Content = "hello", 

​​

我甚至试着改变ContentType和name为“text/plain”。

但我在Bot Framework通道仿真器中看到的所有内容都是[文件类型'text/csv']而且没有链接。在Slack中,除了附件的文字外,没有任何东西出现。

Microsoft Bot Framework Attachment Class对可接受的内容含糊不清。 什么附件内容是可以接受的,以及如何将MemoryStream结果转换为可接受的格式?

+0

你可以添加你的“结果”对象的详细信息?但我不确定您是否可以传递csv文件 –

+0

尝试在ContentUrl属性中发送$“data:text/csv; base 64,{Convert.ToBase64String(result.ToArray())}”,而不是在Content 。让我知道这是否可行 –

+0

在ContentUrl属性中发送$“data:text/csv; base 64,{Convert.ToBase64String(result.ToArray())}”将返回Bot Framework Channel Emulator中的链接!但是,当我尝试点击该链接时,弹出窗口会显示一个不可点击的确定按钮,显示“您需要一个新的应用程序才能打开此数据”。我的电脑能够定期打开csv文件。在Slack中,没有任何信息出现(没有“结果”,也没有链接)。我相信转换为base64字符串是有效的,因为在放入在线转换器时,它会以可由Google表格打开的有效文本进行响应。 – Janelle

回答

0

要使用Slack特定的消息功能,您需要配置一个包含附件的JSON对象,并将其放置在您的Activity对象的channelData属性中。

从文章Implement channel-specific functionality > Create a full-fidelity Slack message

要创建完全保真松弛消息时,活动对象的channelData属性设置为一个JSON对象,指定松弛消息,松弛的附件,和/或松弛的按钮。

此代码段显示了一个自定义Slack消息的channelData属性的示例。

"channelData": { 
    "text": "Now back in stock! :tada:", 
    "attachments": [ 
     { 
      "title": "The Further Adventures of Slackbot", 
      "author_name": "Stanford S. Strickland", 
      "author_icon": "https://api.slack.com/img/api/homepage_custom_integrations-2x.png", 
      "image_url": "http://i.imgur.com/OJkaVOI.jpg?1" 
     }, 
     { 
      "fields": [ 
       { 
        "title": "Volume", 
        "value": "1", 
        "short": true 
       }, 
       { 
        "title": "Issue", 
        "value": "3", 
        "short": true 
       } 
      ] 
     }, 
     { 
      "title": "Synopsis", 
      "text": "After @episod pushed exciting changes to a devious new branch back in Issue 1, Slackbot notifies @don about an unexpected deploy..." 
     }, 
     { 
      "fallback": "Would you recommend it to customers?", 
      "title": "Would you recommend it to customers?", 
      "callback_id": "comic_1234_xyz", 
      "color": "#3AA3E3", 
      "attachment_type": "default", 
      "actions": [ 
       { 
        "name": "recommend", 
        "text": "Recommend", 
        "type": "button", 
        "value": "recommend" 
       }, 
       { 
        "name": "no", 
        "text": "No", 
        "type": "button", 
        "value": "bad" 
       } 
      ] 
     } 
    ] 
} 

有关松弛附件JSON结构更多的细节,请参见: https://api.slack.com/docs/message-attachments

+0

感谢您的建议!但是,看起来像Slack不支持我试图通过发送CSV的数据URI(截至17年7月初)。 https://twitter.com/slackapi/status/580067350357143552?lang=en。所以,它看起来可能无法发送一个动态创建的文件从一个懒散的机器人当前:( – Janelle

相关问题