我正在开发具有Microsoft Bot Framework的Facebook Bot。我想向Facebook用户发送自定义消息,因此我使用自定义Channeldata方法。你可以在这里找到它:Channeldata配置。这是我的代码:
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"
}
从回复性活性酶返回的结果也为无效。有人有这个问题吗?谢谢。
正如我认为,您应该以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序列化对象,然后将其设置为回复。Channeldata。
此外,如果您使用Ngrok在真实的环境中测试机器人,那会更好。因此,您会从Facebook Messenger中的机器人中收到一条真实的消息。
对此的回答很晚,但是我在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);