有几种不同的方法可以解决这个问题。
使用卡片
首先,卡片不允许您直接下载附件。充其量,他们可以将您链接到您希望用户下载的图像(或其他文件)。示例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"
}
看起来像这样:
此卡片显示一张图片并包含一个供用户打开和下载的链接。因为我直接在图片上加了Action.OpenUrl,所以用户可以点击图片打开然后下载——“打开图片”按钮只是为了展示另一种方法。
这里是自适应卡Documentation、Schema 和user-friendly Designer 的绝佳网站。请注意,此时 Designer 不允许您轻松添加 Actions。您必须手动将它们添加到 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],
});
两个重要说明:
此方法适用于发送文件。如果您使用图像,它将显示一个不可点击的图像。这意味着自适应卡片更适合发送可下载的图像。
您的代码可能使用 step.context 以外的其他内容。这是为了将其作为瀑布对话框的一部分发送。您的机器人可能需要其他版本的 context.sendActivity。
如果您发现这回答了您的问题,请将其标记为“已回答”,我可以将其从我的支持工单跟踪器中清除。否则,请随时发表评论,我可以进一步帮助您。