【发布时间】: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