2016-11-24 79 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);