首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用Bot连接器第3版发送自定义Slack消息

无法用Bot连接器第3版发送自定义Slack消息
EN

Stack Overflow用户
提问于 2016-08-12 16:03:39
回答 1查看 163关注 0票数 0

我有一个机器人,它用一条只包含附件的消息来回复。当它在Slack上工作时,它大量使用Slack附件格式,因此我不得不使用ChannelData属性。

在BotConnector的第1版中,代码如下所示

代码语言:javascript
复制
        var reply = message.CreateReplyMessage();
        reply.Attachments = new List<Attachment>();
        var attachments = new List<object>(); //Slack-formatted attachments
        //filling attachments...
        reply.ChannelData = new {attachments};

而且起作用了。现在,在第3版中,代码已更改为

代码语言:javascript
复制
        var reply = activity.CreateReply();
        reply.Attachments = new List<Attachment>();
        var attachments = new List<object>(); //Slack-formatted attachments
        //filling attachments...
        reply.ChannelData = new {attachments};

        var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
        await connector.Conversations.ReplyToActivityAsync(reply);

这基本上可以归结为使用不同的方法来创建回复,而另一个方法则是将回复发回。

现在,问题是,我没有把答案拿回给斯拉克。AppInsight中的诊断学告诉我,在连接器的某个地方发生了这样的事情:

异常类型: System.ArgumentNullException 失败方法: SlackChannel.SlackMapper+d__5.MoveNext 异常消息:值不能为空。参数名称:源 ChannelData:{} 消息:无效的ChannelData

请注意,此诊断中的ChannelData似乎是空的。因此,我从所有这些中得出的结论是,BotConnector处理ChannelData的方式发生了一些变化。我怎么知道我到底做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 16:12:14

实际上,问题在ConnectorClient客户端内部,它剥离了channelData。原因在于它的序列化设置使用了ReadOnlyJsonContractResolver,它跳过了所有只读属性-当然,匿名类中的所有属性都是只读的。

知道了这一点,解决方案非常简单:

reply.ChannelData = JObject.FromObject(new {attachments});

注意JObject的显式使用而不是匿名类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38922207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档