从DirectLine频道的活动中提取附件

时间:2018-07-06 11:22:47

标签: c# botframework direct-line-botframework

我有一个机器人,它使用内置渠道以及DirectLine自定义渠道。

在DirectLine通道中,我得到了响应活动,并且试图从Attachments中提取信息,以便可以将其转换为自定义通道格式。

在解析活动时,我检查附件,发现附件位于"ContentType" = "application/vnd.microsoft.card.hero"上,然后尝试将附件Content投射为HeroCard。这在DirectLine通道中不起作用。在内置通道的单元测试中,我能够执行此操作,并正确验证我的所有数据。

这不是预期的行为吗?如何在DirectLine频道中获取附件的内容?

var type = attachment.ContentType;
if (type == "application/vnd.microsoft.card.hero")
{
    var temp = attachment.Content;
    var heroCard = temp as HeroCard; // This yields a 'null'
    ...
}

注意:如果我替换行“ var heroCard = temp as HeroCard;”与

var temp = JsonConvert.SerializeObject(attachment.Content);
var heroCard = JsonConvert.DeserializeObject<HeroCard>(temp);

然后我有一张可以分析的英雄卡。但这似乎效率很低。

1 个答案:

答案 0 :(得分:1)

DirectLine频道意味着您必须手动进行大部分对话, 而其他内置通道则内置了连接器,因此转换是在后台自动完成的。

您可以通过不先进行序列化来更好地优化当前代码,即:

var heroCard = JsonConvert.DeserializeObject<HeroCard>(attachment.Content.ToString());

但是除此之外,我知道您没有其他方法可以优化转换为强类型。