【问题标题】:Can't send custom Slack Message with version 3 of Bot Connector无法使用 Bot Connector 版本 3 发送自定义 Slack 消息
【发布时间】:2016-08-31 08:19:35
【问题描述】:

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

在 BotConnector 版本 1 中,代码是这样的

        var reply = message.CreateReplyMessage();
        reply.Attachments = new List<Attachment>();
        var attachments = new List<object>(); //Slack-formatted attachments
        //filling attachments...
        reply.ChannelData = new {attachments};

它奏效了。现在,在版本 3 中,代码已更改为

        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);

这基本上归结为使用不同的方法来创建回复,并使用另一种方法发送回复。

现在,问题是,我没有收到 Slack 的回复。 AppInsight 中的诊断告诉我,在连接器的某个地方会发生这样的事情:

异常类型:System.ArgumentNullException

失败的方法:SlackChannel.SlackMapper+d__5.MoveNext

异常消息:值不能为空。参数名称:来源

频道数据:{}

消息:无效的 ChannelData

请注意,此诊断中的ChannelData 似乎为空。所以我从这一切中收集到的是,BotConnector 处理ChannelData 的方式发生了一些变化。我怎样才能知道我到底做错了什么?

【问题讨论】:

    标签: botframework


    【解决方案1】:

    实际上问题出在ConnectorClient 客户端内部,它剥离了channelData。原因在于its serialization settings 使用了ReadOnlyJsonContractResolver,它跳过了所有只读属性——当然匿名类中的所有属性都是只读的。

    知道了,解决方法就很简单了:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2021-03-02
    • 2022-12-07
    • 1970-01-01
    • 2021-01-07
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多