【问题标题】:Is it possible to open an URL and submit an "Action" to the bot via an adaptive card?是否可以通过自适应卡打开 URL 并向机器人提交“操作”?
【发布时间】:2019-12-27 15:58:41
【问题描述】:

我想通过 AdaptiveCard 中的“Action.OpenUrl”打开一个 URL,并向机器人另外提供一个“OK”状态,这样瀑布对话框就可以按预期继续。

重要的是,我想在 Azure 上为 MS Teams 部署机器人。所以我的第一次尝试是向机器人“Action.Submit”“OK”并通过 System.Diagnostics.Process.Start(url) 从代码中打开 URL。但它不再像 Windows 10 那样工作,并引发“找不到目录”异常。我尝试了一些针对该问题的解决方案。例如这个“here! 这在本地模拟器上对我有用,但是当部署在 MS Teams 中时,它根本没有做任何事情。所以现在我重新考虑在 AdaptiveCard JSON 中嵌套“Action.XXX”的可能性,它允许我通过 OpenUrl 函数打开 URL,同时像 Submit 函数一样给机器人一个信号。有人遇到过这样的问题吗?

"actions": [
    {
      "type": "Action.Submit",
      "title": "Alles OK",
      "data": {
        "msteams": {
          "type": "imBack",
          "value": "OK"
        }
      }
    },

这就是现在 MS Teams 自适应卡片中的操作按钮 它应该在下面看到的 c# Bot 代码中触发“OK”案例 同时打开可以添加到“Action.OpenUrl”按钮的url

if (stepContext.Result is string promptResult)
            {
                switch (promptResult)
                {
                    case "OK":
                        string url = CreateTicketResponses.CreateTicketLink(state.Summary, state.Description, state.Type);
                        System.Diagnostics.Process.Start(url);
                        //await stepContext.Context.SendActivityAsync(url);
                        state.Reset();
                        new DialogTurnResult(DialogTurnStatus.Complete);
                        return await stepContext.EndDialogAsync();

如上所述,我想获得一张自适应卡片,它在新的浏览器选项卡中(在用户可能拥有的任何系统上)打开 URL,并为机器人提供结束对话框的指示器 (EndDialogAsync())。

【问题讨论】:

  • System.Diagnostics.Process.Start(url); - 这不是要在服务器上运行吗??
  • @derdax 自适应卡上的按钮一次只能有一个操作。我们不能有一个按钮来同时执行“Action.Submit”和“Action.OpenURL”。
  • 因此,如果进程在服务器上运行,那么它根本无法“在新的浏览器选项卡中(在用户可能拥有的任何系统上)打开 URL”
  • 我也许可以设计一个解决方法,但我们需要知道您了解您正在尝试做的事情的问题。 @stuartd 告诉您机器人代码将在服务器上运行,而您的回复并未表明您了解此问题。服务器与您的用户正在使用的机器是完全不同的机器。当机器人代码在服务器上运行时,用户将在自己的计算机上运行 Teams 客户端应用程序。如果您的机器人运行一个旨在打开 URL 的命令,那么它将尝试在您的用户未使用的计算机上打开一个 URL。你明白吗?

标签: c# botframework microsoft-teams adaptive-cards


【解决方案1】:

我认为你有两个选择:

  1. 您可以在自适应卡片中收集数据,并让机器人通过发送另一张卡片(不一定是自适应)来响应提交操作,该卡片带有一个按钮,该按钮打开一个填充了自适应卡片中数据的 URL。
  2. 您可以跳过自适应卡片,只发送一个链接到 Jira 的通用 URL 按钮卡片,然后用户可以在 Jira 页面上填写数据,而不是已经在自适应卡片中填写。

在任何一种情况下,机器人都不会知道用户打开了 URL。当用户想要继续对话时,他们必须在聊天窗口中输入一些内容。如果您真的希望机器人知道用户何时单击按钮,那么您必须设置一个特殊的网络应用程序,将活动发送到机器人,然后重定向到您的 Jira 页面,这将是困难/复杂的。

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2022-01-11
    • 2017-01-18
    • 2022-01-01
    • 2019-12-14
    相关资源
    最近更新 更多