首页 > 解决方案 > Bot Framework v4 加载 Facebook Webview

问题描述

我试图弄清楚如何让 MS Bot Framework v4 与 Facebook Web 视图一起工作。目前,整个互联网上没有任何关于如何使其工作的信息。有一些例子,比如这个,展示了它如何与 BF v3 一起工作。

我无法弄清楚这是如何与v4 中HeroCard的 s 和s 一起工作的。CardAction

从文档看来,这种类型的功能需要一个ActionTypes包含web_url该枚举完全省略的值的值。BF v4 不支持建议此功能。

enableExtensions()我目前正在将 Botman PHP Bot 移植到 MS Bot 框架,通过简单地调用按钮元素在 Botman 中执行此操作似乎非常简单。

我已经尝试了太多的方法来在这里列出,但当前的尝试看起来像这样:

var viewButton = new CardAction(
    "web_url", 
    "View Details", 
    null, 
    "",
    "",
    "https://myurl",
    JObject.FromObject(new { messenger_extensions = true }));

我已经完成了所有域白名单过程,所以我确信一切都准备好了,但是,我目前的尝试只是错误,因为 Favebook 似乎不喜欢 Bot Framework 正在生成的 JSON。

我也尝试过CardAction像这样对类进行子类化:

public class WebViewCardAction : CardAction
{
    public WebViewCardAction(string displayText, string url)
    {
        Type = "web_url";
        Url = url;
        Title = displayText;
        MessengerExtensions = true;
        WebviewHeightRatio = "compact";
    }

    [JsonProperty(PropertyName = "url")]
    public string Url { get; set; }

    [JsonProperty(PropertyName = "webview_height_ratio")]
    public string WebviewHeightRatio { get; set; }

    [JsonProperty(PropertyName = "messenger_extensions")]
    public bool MessengerExtensions { get; set; }
}

在 Bot Framework 模拟器中查看 JSON 时,会产生如下 JSON:

{
    "messenger_extensions": true,
    "title": "View Details",
    "type": "web_url",
    "url": "https://myurl",
    "webview_height_ratio": "compact"
}

这似乎与我在 FB messenger 示例中可以找到的内容一致。但是有了这个 FB 信使错误,甚至没有显示HeroCard.

有没有人有这个工作?

网上有没有例子可以看?

标签: c#azurebotframeworkbots

解决方案


因为活动模式没有改变,所以您链接的示例也适用于 V4:

private async Task TestFacebookWebview(ITurnContext turnContext,
    CancellationToken cancellationToken)
{
    var reply = turnContext.Activity.CreateReply();

    var attachment = new
    {
        type = "template",
        payload = new
        {
            template_type = "button",
            text = "Your  is on it's way!",
            buttons = new[]
            {
                new
                {
                    type = "web_url",
                    url = "https://mybot.azurewebsites.net/",
                    title = "See on map",
                    webview_height_ratio = "compact",
                    messenger_extensions = true,
                },
            },
        },
    };

    reply.ChannelData = JObject.FromObject(new { attachment });

    await turnContext.SendActivityAsync(reply, cancellationToken);
}

如您所见,不需要英雄卡或卡牌动作。在此示例中,使用通过 传递的按钮模板调用Facebook webview,这是特定于频道的活动中的元数据。Messenger 读取该数据并为您创建看起来像卡片的东西。ChannelData

确保将您的域列入白名单以使其正常工作。


推荐阅读