【问题标题】:BotFramework Action does not rendered as Buttons (empty) in Facebook Messenger and TelegramBotFramework Action 不会在 Facebook Messenger 和 Telegram 中呈现为按钮(空)
【发布时间】:2016-09-05 08:58:02
【问题描述】:

我正在尝试将 Microsoft Bot 连接器操作呈现为 Facebook Messenger 中的按钮,但它没有按预期呈现。事实上,信使并没有显示任何东西。在 BotFramework Emulator 上进行测试时,仅显示 .Text 属性,但不显示按钮。

class myFactory
{

public static IForm<myButton> BuildForm()
{
    return new FormBuilder<myButton>()
           .Message("Welcome to my test Button!")
           .OnCompletionAsync(async (context, myButton) =>
           {
               var reply = context.MakeMessage();
               reply.Text = "Test actions";
               reply.Attachments = new List<Attachment>();

               var actions = new List<Microsoft.Bot.Connector.Action>();

               actions.Add(new Microsoft.Bot.Connector.Action() { Title = "button1", Message = "message1", Url = "http://google.com" });
               actions.Add(new Microsoft.Bot.Connector.Action() { Title = "button2", Message = "message2", Url = "http://google.com" });
               actions.Add(new Microsoft.Bot.Connector.Action() { Title = "button3", Message = "message3", Url = "http://google.com" });

               Attachment at = new Attachment();
                   at.Title = "Choose One:";
                   at.Actions = actions;
                   at.ContentType = "template";
                   at.Text = "Text choose";
                   at.TitleLink = "http://www.google.com";
                   at.ContentUrl = "http://msdn.microsoft.com";

                   reply.Attachments.Add(at);

                    await context.PostAsync(reply);
           })
           .Build();
    }
};

【问题讨论】:

  • 经过严格测试。我发现 Buttons 仅适用于 Web Facebook 消息,而不适用于移动 facebook messenger 应用程序。 Telegram 也不显示我想要的按钮。我现在正在考虑的解决方案是检查我的机器人正在运行的频道以呈现适当的回复。
  • 按钮应该在所有 Facebook Messenger 客户端、kik 和电报中通用。是不是你有一个不支持按钮和轮播的旧版本的 fb messenger 应用程序?我使用Actions 在我的机器人中生成按钮,并依靠连接器将它们降级为不支持按钮的频道的文本选项。
  • @ShahinShayandeh 是的。你说得对,我忘了说我在 Windows 手机上运行它,但它使用 UWP 桌面版 Messenger 和 android Messenger 版可以正常工作。请添加您的评论作为答案,以便我可以将其标记为正确答案。谢谢。

标签: c# bots telegram-bot facebook-messenger botframework


【解决方案1】:

我没有使用过 Telegram,但对于 Facebook 操作按钮,您只需要提供消息或网址,而不是同时提供两者。如果提供了 Url 属性,则操作按钮将链接到该 url,但是当提供消息时,单击该文本将被发送到您的机器人,就好像用户输入了它一样。

另外,附件中的 ContentType 和 ContentUrl 可能会导致问题。 ContentUrl(如果提供)应指向图像或视频,然后 ContentType 应为“图像”或“视频”。您无需指定“模板”,Bot Connector 会为您执行此操作。尝试类似:

var reply = context.MakeMessage();
reply.Text = "Test actions";
reply.Attachments = new List<Attachment>();

var actions = new List<Microsoft.Bot.Connector.Action>();

actions.Add(new Microsoft.Bot.Connector.Action() { Title = "button1", Message = "message1" });
actions.Add(new Microsoft.Bot.Connector.Action() { Title = "button2", Url = "http://bing.com" });
actions.Add(new Microsoft.Bot.Connector.Action() { Title = "button3", Message = "message3" });

Attachment at = new Attachment();
at.Title = "Choose One:";
at.Actions = actions;

reply.Attachments.Add(at);

【讨论】:

  • 抱歉 url 和 contentType 它包含在试验哪些部分将提供我想要的输出。无论如何,我会尝试你的答案并给你反馈。
  • 嗨,我刚刚发现我期望的按钮在网络 Facebook 消息上工作,而不是在移动 Facebook 信使中工作。使用我发布的代码。我非常感谢您的帮助,但我不能接受它作为答案。请在此处回复评论,以便我可以投票支持您的答案,谢谢,
【解决方案2】:

按钮应该在所有 Facebook Messenger 客户端、kik 和电报中通用。我猜您使用的是不支持按钮和轮播的旧版 Facebook Messenger 应用程序。我使用操作在我的机器人中生成按钮,并依靠连接器将它们降级为不支持按钮的频道的文本选项。这是与 facebook 配合使用的 a bot with attachments 示例。

【讨论】:

    【解决方案3】:

    在最新版本的botbuilder(v1.2.3)中,默认情况下,提示将在支持的聊天平台(例如:电报、facebook)中生成为可选按钮。

    参考:https://github.com/Microsoft/BotBuilder/blob/master/CSharp/Library/FormFlow/FormDialog.cs

    相关代码:

    if (prompt != null)
    {
        var msg = context.MakeMessage();
        msg.Text = prompt.Prompt;
        msg.Attachments = prompt.Buttons.GenerateAttachments();
        await context.PostAsync(msg);
    }
    return prompt;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多