本文介绍了Bot Framework无法使用AddKeyboardCard或ChannelData发送FacebookQuickReply的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Bot Framework 3.3.0,据我了解,它支持Facebook正确实施的快速回复(与创建dynamic对象并通过ChannelData发送对象相反).类名是Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply.

I am using Bot Framework 3.3.0 which I understand supports Facebook's quick replies implemented properly (as opposed to creating a dynamic object and sending it via ChannelData). The class name is Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply.

这是我在IDialog中创建快速回复的方法:

Here is how I create the quick replies from within an IDialog:

var reply = context.MakeMessage();
reply.Text = msg;
var quickReplies = new List<FacebookQuickReply>()
{
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "Cathay", "Cathay"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Airlines", "Hong Kong Airlines"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Express", "HK Express")
};

这是我尝试将其发送到聊天中的两种方法:

And here are the two ways of how I'm trying to send them into the chat:

//I tried both of the lines below
//reply.ChannelData = quickReplies.ToArray();
reply.AddKeyboardCard<FacebookQuickReply>("quick_replies", quickReplies);

await context.PostAsync(reply);

我从 Ezequiel Jadib's获得的第一种方法文章(我知道您正在阅读这篇文章!)对我在facebook Messenger上不起作用.部分原因是在v3.3中似乎已经密封了FacebookQuickReply类,并且不能从中派生该类.

The first way that I got from Ezequiel Jadib's article ( I know you're reading this!) didn't work for me on facebook messenger. Partly the reason is that it seems in v3.3 the FacebookQuickReply class is now sealed and cannot be derived from.

更新:我使用以下方法使其正常工作:

UPDATE: I got it to work by using this:

var channelData = new FacebookChannelData();

channelData.QuickReplies = new[]
{
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "Cathay", "Cathay"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Airlines", "Hong Kong Airlines"),
    new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, "HK Express", "HK Express")
};

reply.ChannelData = channelData;

FacebookChannelData类就是这样:

Where FacebookChannelData class is simply this:

public class FacebookChannelData
{
    [JsonProperty("quick_replies")]
    public FacebookQuickReply[] QuickReplies { get; set; }
}

即使它可以工作,但这似乎也不是一种正确的方法,因为bot框架现在提供了可立即使用的类.

Even though it works, it doesn't seem to be a proper way because the bot framework now provides ready to use classes for that.

END UPDATE

第二种方法(AddKeyboardCard)在模拟器中起作用(但在实际的facebook上不起作用),但是产生了我可以在模拟器中看到的完全错误的JSON.生成的JSON使用类名(为什么?)而不是我提供的文本:

The second way (AddKeyboardCard) kind of works in the emulator (but doesn't work on actual facebook), but produces totally wrong JSON that I can see in the emulator. The resulting JSON uses the class name (why?) instead of the text I provided:

"attachments": [
    {
      "contentType": "application/vnd.microsoft.card.hero",
      "content": {
        "text": "quick_replies",
        "buttons": [
          {
            "type": "imBack",
            "title": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply",
            "value": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply"
          },
          {
            "type": "imBack",
            "title": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply",
            "value": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply"
          },
          {
            "type": "imBack",
            "title": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply",
            "value": "Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply"
          }
        ]
      }
    }
  ],

我在做什么错?您如何使用FacebookQuickReplyAddKeyboardCard()?

What am I doing wrong and how do you use FacebookQuickReply and AddKeyboardCard()?

推荐答案

最近添加的FacebookQuickReply功能的键位于此提交.

The key of the FacebookQuickReply feature recently added is on this commit.

似乎可行的方法是创建KeyboardCard并使用扩展方法以获取ChannelData值(如此处

It seems the way to go is to create a KeyboardCard and the use the ToFacebookMessage extension method to get the ChannelData value (as used here)

这篇关于Bot Framework无法使用AddKeyboardCard或ChannelData发送FacebookQuickReply的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!