如何在团队频道中向用户发送文件?

时间:2020-09-08 16:57:34

标签: botframework microsoft-teams

我正在尝试在“团队”频道中发送文件(日历ics文件)。我正在使用下面的代码在网络聊天频道中运行良好:

const reminder = fs.readFileSync(`temp/reminder.ics`);
const base64reminder = Buffer.from(reminder).toString('base64');

await dc.context.sendActivity({'text':'Click here to set up a reminder on your calendar', 'attachments': [{
    name: 'Leader X Activities',
    contentType: 'text/plain',
    contentUrl: `data:text/calendar;base64,${ base64reminder }`}]
});

我同时使用了text / plain和text / calendar,那里的类型没什么不同。但是团队抛出了未知附件类型错误。这是我在App Insights中捕获的内容。

{"error":"Unknown attachment type","callStack":"Error: Unknown attachment type\n at new RestError (D:\\home\\site\\wwwroot\\node_modules\\@azure\\ms-rest-js\\dist\\msRest.node.js:1399:28)\n at D:\\home\\site\\wwwroot\\node_modules\\@azure\\ms-rest-js\\dist\\msRest.node.js:2495:37\n at <anonymous>\n at process._tickDomainCallback (internal/process/next_tick.js:228:7)","botName":"itInnovationBot"}  

我已经尝试查看文档here,但是我完全同意同意的规定,然后再发送文件,这毫无意义。它也使用与我不同的语法,可能是因为它扩展了TeamsActivityHandler。我在扩展ComponentDialog的瀑布对话框中进行此操作,因此甚至不确定是否可以利用该类。

似乎我需要征求某种形式的同意才能发送文件,但是我找不到有关如何执行此操作的任何文档。为了将这个ics文件附加到团队中,我该怎么做?

我对直接通过Graph API执行此操作有些兴趣,但是我相信我们对此有一些内部公司障碍,这就是为什么我尝试使用ics文件附件进行初始实现的原因。此外,那只能解决ics文件,我知道我们将来需要让该bot发送其他文件类型。

编辑:我尝试了其他一些可能取得一些进展的事情,但是仍然无法正常工作。以下内容摆脱了未知的附件错误,但已替换为空内容错误:

await dc.context.sendActivity({'text':'Click here to set up a reminder on your calendar', 'attachments': [{
    name: 'Leader X Activities',
    contentType: 'application/vnd.microsoft.teams.card.file.info',
    contentUrl: `data:text/calendar;base64,${ base64reminder }`}]
});

添加内容对象我只会收到“ ServiceError / Unknown”错误,这对于进一步进行故障排除不是很有帮助。我在内容对象中尝试了各种不同的信息,但结果都相同。

await dc.context.sendActivity({'text':'Click here to set up a reminder on your calendar', 'attachments': [{
    name: 'Leader X Activities',
    contentType: 'application/vnd.microsoft.teams.card.file.info',
    contentUrl: `data:text/calendar;base64,${ base64reminder }`,
    content: {
        uniqueId: '12345whatever'
        contentType: 'text/plain'
    }}]
});

编辑2:进一步的更新是,我尝试设置一个同意卡,并假设我随后可以查找“调用”活动,但是同意按钮似乎不起作用。实际上产生任何活动。这是代码:

await dc.context.sendActivity({'attachments': [{
    content: {
        description: 'Here is the file I want to send you',
        fileSizeInBytes: fileSizeInBytes,
        accetpContext: fileContext,
        declineContext: fileContext
    },
    contentType: 'application/vnd.microsoft.teams.card.file.consent',
    name: 'reminder.ics'}]
})

编辑3:,我没有从桌面应用收到任何消息或活动指示,但是当我尝试从移动应用中单击同意按钮时,它却给我一个“ BOTNAME并没有支持文件”错误消息,即使我在Teams应用清单中也将其设置为支持文件。看来我没有参加任何活动,因为该按钮的按下被阻止了。不知道这是否是因为我没有使用TeamsActivityHandler(如果需要的话,那么我将需要知道如何将其合并到使用ComponentDialog的瀑布对话框中)。

1 个答案:

答案 0 :(得分:0)

我尝试使用 sample 以 1:1 的方式发送 ics 文件。

上传和发送ics文件

enter image description here

从一个驱动器下载文件 enter image description here

这是我使用过的代码片段 enter image description here