如何响应机器人程序来下载文件

时间:2019-01-15 16:28:36

标签: node.js download botframework skype

你好:)

挑战Skype; Bot框架;接收可下载的文件

我有一个问题。我的项目是向机器人询问一些问题(当前使用Bot Framework Emulator,但稍后我将使用Skype),并且机器人会回答并附带图像/图表。 我可以通过界面显示答案和图像。但是,用户无法下载该图像。

我该怎么做? 借助Button,在AdaptiveCard消息中有一个选项可以下载附件的图像?

我尝试使用HeroCard,ThumbnailCard,AdaptiveCard和一个简单的附件,但是并不能解决我的问题。

预先感谢:)

2 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题。

使用卡

首先,卡片不允许您直接下载附件。他们充其量只能将您链接到您要用户下载的图像(或其他文件)。可以执行此操作的自适应卡的示例json

{
    "type": "AdaptiveCard",
    "body": [
        {
            "type": "Image",
            "selectAction": {
                "type": "Action.OpenUrl",
                "url": "https://dev.botframework.com/Client/Images/ChatBot-BotFramework.png"
            },
            "url": "https://dev.botframework.com/Client/Images/ChatBot-BotFramework.png"
        },
        {
            "type": "TextBlock",
            "text": "This card's action will open an image"
        }
    ],
    "actions": [
        {
            "type": "Action.OpenUrl",
            "title": "Open Image",
            "url": "https://dev.botframework.com/Client/Images/ChatBot-BotFramework.png"
        }
    ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.0"
}

看起来像这样:

Adaptive Card With Clickable Image

此卡显示图像,并包含一个供用户打开和下载图像的链接。因为我直接在图像上添加了Action.OpenUrl,所以用户可以单击图像以打开然后下载它-“打开图像”按钮只是为了显示另一种方法。

对于自适应卡DocumentationSchemauser-friendly Designer来说,这是一个不错的网站。请注意,设计器目前不允许您轻松添加Action。您必须在JSON部分中手动添加它们。

发送附件

但是,您可以直接发送包含下载文件功能的消息。

您可以使用以下内容定义附件:

const attachment = {
  name: 'PDF',
  contentType: 'application/pdf',
  contentUrl: 'https://media.readthedocs.org/pdf/microsoftbotframework/latest/microsoftbotframework.pdf',
}

然后通过以下方式将其发送给用户:

await step.context.sendActivity({
  text: 'Attachment',
  attachments: [attachment],
});

两个重要说明:

  1. 此方法非常适合发送文件。如果使用图像,它将显示不可点击的图像。这意味着自适应卡将更适合发送可下载的图像。

  2. 您的代码可能使用的不是step.context。这是作为“瀑布对话框”的一部分发送的。您的机器人可能需要其他版本的context.sendActivity

如果您找到了答案,请标记为“已回答”,我可以从支持记录追踪器中清除它。否则,请随时发表评论,我们会为您提供进一步的帮助。

答案 1 :(得分:0)

[建议删除-我认为您是要发表评论而不是回答。]