C#通过bot框架发送模板facebook消息

时间:2016-11-24 02:52:33

标签: facebook frameworks bots botframework messenger

我正在使用microsoft bot框架开发一个facebook bot。 我想向facebook用户发送自定义消息,所以我使用自定义channelData方法。你可以在这里找到它: channelData Config. 这是我的代码:

import java.util.*;

class Solution {
    /*
     * param number: A 3-digit number.
     * return: Reversed number.
     */
    public int reverseInteger(int number) {
        // write your code here
        if (number > 1000 || number <100){
            return -1;
        }
        String s = Integer.toString(number);
        char[] c = s.toCharArray();
        StringBuilder b = new StringBuilder(c.length);

        for (int i = s.length()-1; i >= 0; i--){
            b.append(String.valueOf(c[i]));
        }

        int y = Integer.parseInt(b.toString());
        return y;
    }

    public static void main(String args[]) {
        Solution p = new Solution();
        int ff= p.reverseInteger(102);
        System.out.println(ff); // 201
    }
}

我在模拟器上测试了它,但是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);

从ReplyToActivityAsync返回的结果也是null。 有人有这个问题吗? 感谢。

2 个答案:

答案 0 :(得分: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中获取来自机器人的真实消息。

答案 1 :(得分: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);