Bot Framework v4加载Facebook Webview

时间:2018-12-28 14:10:41

标签: c# azure botframework bots

我正在尝试弄清楚如何使MS Bot Framework v4与Facebook Web View一起使用。目前,整个互联网上没有任何有关如何使它正常工作的信息。 like this one有一些示例,展示了它如何与BF v3一起使用。

我不知道它如何与v4中的HeroCardCardAction s一起工作。

从文档中看来,此类型的功能将需要一个ActionTypes,其中包含一个web_url的值,该值被枚举完全忽略了。提示BF v4不支持此功能。

我目前正在将Botman PHP Bot移植到MS Bot Framework,似乎在Botman中通过简单地在按钮元素上调用enableExtensions()来做到这一点非常简单。

我尝试了太多的方法在此处列出,但是当前的尝试看起来像这样:

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

我已经完成了所有域白名单处理,因此我确定一切都准备就绪。但是,由于我目前的尝试,Messenger只是报错,因为Favebook似乎不喜欢Bot Framework正在生成的JSON。< / p>

我还尝试过像这样对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 Messenger错误甚至没有显示HeroCard

有人能做到这一点吗?

网上有什么例子可以看吗?

1 个答案:

答案 0 :(得分:1)

由于活动架构未更改,因此链接的示例在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);
}

如您所见,不需要英雄卡或卡动作。在此示例中,使用通过ChannelData传递的webview来调用Facebook button templatevar shell = require('shelljs'); shell.exec('git clone http://mybitbuck.et/scm/myproject/myrepo.git'); 是活动中特定于该频道的元数据。 Messenger会读取该数据并为您创建看起来像卡的东西。

请确保您whitelist your domain才能正常工作。