当用户关闭或在 Botframework V4 的 Web 视图中按下按钮时,对话框会自动继续

Dialog automatically continue when user closes or press a button in the webview on Botframework V4

我在 azure 中部署了一个 Web 应用程序,它在 Messenger Webview 中打开。我制作了一个空文本提示,供用户单击以便用户在关闭 Webview 时能够继续。然而,用户有时会忘记点击按钮。我阅读了 this 文档,但我无法做到这一点,因为我最擅长查看实际示例和代码。当用户关闭或按下 Webview 中的按钮时,对话框如何自动继续?谢谢。

Web 视图是一组问题,用户的答案保存在 Cosmos DB 中,当他们关闭 Web 视图时,机器人会访问他们在 Cosmos DB 中的分数并计算他们的分数。

这是我当前的代码。

private static async Task<DialogTurnResult> ThirdStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken = default(CancellationToken))
{
    Activity reply = stepContext.Context.Activity.CreateReply();
    reply.ChannelData = JObject.FromObject(
        new
        {
            attachment = new
            {
                type = "template",
                payload = new
                {
                    template_type = "generic",
                    elements = new[]
                    {
                          new
                          {
                                title = "<title>",
                                buttons = new object[]
                                {
                                new
                                   {
                                        type = "web_url",
                                        title = "<title>",
                                        url = webAppUrl,
                                        messenger_extensions="true",
                                        webview_height_ratio = "tall",
                                   },
                                new
                                   {
                                        type = "postback",
                                        title = "Done ✔️",
                                        payload = "Done ✔️",
                                   },
                                },
                          },
                    },
                },
            },
        });
    await stepContext.Context.SendActivityAsync(reply);

    return await stepContext.PromptAsync(
        nameof(TextPrompt),
        new PromptOptions
        {
            Prompt = MessageFactory.Text(string.Empty),
            RetryPrompt = MessageFactory.Text("Click Done to proceed."),
        });
}

private static async Task<DialogTurnResult> FourthStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    var result = stepContext.Result.ToString().ToLower();

    if (result == "done ✔️" || result == "done")
    {
        return await stepContext.NextAsync();
    }

    await stepContext.Context.SendActivityAsync(
            MessageFactory.Text(
                $"Please press done to proceed, thank you!"));

    return await stepContext.ReplaceDialogAsync(nameof(CalendarIncomeExpensesDialogV2));
}

更新拉法:

由于您甚至不知道您正在尝试创建哪种类型的网络应用程序或您正在使用哪种语言编写网络应用程序或您计划如何托管网络应用程序,因此您的第一步是弄清楚所有这一切。如果您在该过程的任何部分需要帮助,那么您需要提出一个非常具体的新问题,并包括您到目前为止尝试过的内容以及所有相关代码。

当您在 Facebook 网络视图中打开网络应用程序时,您需要确保该网络应用程序具有向机器人发送 activity 所需的所有信息(我一直称之为主动消息,但那些通常指的是机器人到用户的消息)。所需的凭据应该已经内置到 Web 应用程序中,因此您唯一需要发送到 Web 应用程序端点的是用户 ID,以便 Web 应用程序可以在 activity 和机器人中传递它可以识别 activity 属于哪个对话。向机器人发送 activity 的传统方法是使用 Direct Line,尽管您可能想出一种方法,只需向机器人的端点发送 HTTP 请求,甚至使用 Facebook 应用程序的回调 URL.

这里完全没有必要牵扯到LUIS。当您不知道用户会说什么时,LUIS 应该只用于解释来自用户的消息。任何时候您都可以控制发送给机器人的消息,使用 LUIS 没有任何意义。请记住,有 15 种以上的 activity 类型,您的 activity 不需要是 "message" activity。您可以通过多种方式识别 activity 并在您的机器人中做出相应的响应。我建议使用事件 activity.

根据我对您熟练程度的了解,您可能需要进行大量研究才能完成您想要完成的任务。文档是一个很好的起点:https://docs.microsoft.com/en-us/azure/bot-service/