2016-11-24 75 views
1

我正在開發一個帶有微軟bot框架的Facebook bot。 我想發送自定義消息給Facebook用戶,所以我使用自定義channelData方法。你可以在這裏找到: channelData Config. 這裏是我的代碼:C#通過bot框架發送模板facebook消息

var reply = activity.CreateReply(); 
reply.ChannelData = new 
        { 
         attachment = (text as SendPackage).message.attachment, 
         notification_type = "NO_PUSH" 
        }; 
var result = await connector.Conversations.ReplyToActivityAsync(reply); 

我測試模擬器,但channelData財產送花兒給人空:

{ 
    "type": "message", 
    "timestamp": "2016-11-24T02:30:44.9047645Z", 
    "from": { 
    "id": "56800324", 
    "name": "Bot1" 
    }, 
    "conversation": { 
    "id": "8a684db8", 
    "name": "Conv1" 
    }, 
    "recipient": { 
    "id": "2c1c7fa3", 
    "name": "User1" 
    }, 
    "text": "", 
    "channelData": {}, 
    "replyToId": "3f223b935086422da7ed36786ab05cb9" 
} 

結果返回從ReplyToActivityAsync爲空過。 有沒有人有這個問題? 謝謝。

回答

0

正如我所想,您應該設置Json格式的通道數據,而不是匿名對象。所以,我的建議是設置通道數據如下所示:

var channelData = "{"; 
var channelData += "'notification_type' : 'NO_PUSH',"; 
var channelData += "'attachment' : '" + text + "'"; 
var channelData = "}"; 

var reply = activity.CreateReply(); 
reply.ChannelData = channelData; 
var result = await connector.Conversations.ReplyToActivityAsync(reply); 

另外,如果你想發送的對象,它的型號是複雜的,你可以創建一個類模型,然後使用JsonConvert.Serialize序列化對象,然後將其設置爲reply.ChannelData。

此外,如果您使用ngrok在真實環境中測試您的機器人將會更好。因此,您會在Facebook Messenger中收到來自您的機器人的真實消息。

0

這是一個非常晚的答案,但我有類似的問題與在C#中設置消息的ChannelData。

這一直爲我工作的唯一方法是使用Newtonsoft.Json的JObject.FromObject:

例如:

using Newtonsoft.Json.Linq; 

message.ChannelData = JObject.FromObject(new 
{ 
    notification_type = "REGULAR", 
    // all your other channel-specific stuff here... 
}); 
await context.PostAsync(message);