我正在使用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。 有人有这个问题吗? 感谢。
答案 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);