2016-08-12 52 views
0

我有一個機器人回覆僅包含附件的消息。當它在Slack上工作時,它使用Slack附件格式相當嚴重,因此我必須使用ChannelData屬性。無法發送定製的Slack消息與Bot連接器的版本3

在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

請注意,ChannelData在此診斷似乎是空的。所以我從中得到的是,BotConnector處理ChannelData的方式發生了變化。我怎樣才能知道我究竟做錯了什麼?

回答

0

實際上問題出在ConnectorClient客戶端,其中channelData。原因在於its serialization settings,它使用ReadOnlyJsonContractResolver,它跳過所有隻讀屬性 - 當然匿名類中的所有屬性都是隻讀的。

知道的是,該解決方案很簡單:

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

注意明確使用JObject而不是匿名類。

+0

添加了一個Gist求助https://gist.github.com/phaniav/cf03f8f62ee7c6dc891486d8df893794 – phani