【问题标题】:Task Module call from Ms Teams in Bot Framework来自 Bot Framework 中 Ms Teams 的任务模块调用
【发布时间】:2019-12-03 22:41:36
【问题描述】:

我希望在我的机器人中打开一个连接到 Teams 频道的任务模块(弹出 - 带有音频/视频的 iframe)。我在遵循 GitHub 页面上提供的示例代码时遇到问题。

我已尝试按照示例并将其合并到我的代码中,但没有成功。

在我的 bot.cs 文件中,我正在创建调用类型的卡片操作:

card.Buttons.Add(new CardAction("invoke", TaskModuleUIConstants.YouTube.ButtonTitle, null,null,null,
                new Teams.Samples.TaskModule.Web.Models.BotFrameworkCardValue<string>()
                {
                    Data = TaskModuleUIConstants.YouTube.Id
                }));

在我继承自 Controller 的 BotController.cs 中

   [HttpPost]
        public async Task PostAsync()
        {
            // Delegate the processing of the HTTP POST to the adapter.
            // The adapter will invoke the bot.
           await _adapter.ProcessAsync(Request, Response, _bot);        

        }

        public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
        {
           if (activity.Type == ActivityTypes.Invoke)
            {
                return HandleInvokeMessages(activity);
            }

            return new HttpResponseMessage(HttpStatusCode.Accepted);
        }

        private  HttpResponseMessage HandleInvokeMessages (Activity activity)
        {

            var activityValue = activity.Value.ToString();
            if (activity.Name == "task/fetch")
            {
                var action = Newtonsoft.Json.JsonConvert.DeserializeObject<Teams.Samples.TaskModule.Web.Models.BotFrameworkCardValue<string>>(activityValue);

                Teams.Samples.TaskModule.Web.Models.TaskInfo taskInfo = GetTaskInfo(action.Data);
                Teams.Samples.TaskModule.Web.Models.TaskEnvelope taskEnvelope = new Teams.Samples.TaskModule.Web.Models.TaskEnvelope
                {
                    Task = new Teams.Samples.TaskModule.Web.Models.Task()
                    {
                        Type = Teams.Samples.TaskModule.Web.Models.TaskType.Continue,
                        TaskInfo = taskInfo
                    }
                };
                return msg;
            }

            return new HttpResponseMessage(HttpStatusCode.Accepted);
        }

根据 GitHub 示例有更多代码,但我不会在此处粘贴。有人可以指出我正确的方向吗?

我已经到了显示弹出窗口的阶段,但内容和标题来自清单文件,而不是创建实际的 iframe,也没有呈现视频。我的目标是使用 iframe 容器在我的团队中渲染视频。

【问题讨论】:

  • 能否确认您是否在示例代码中添加了this line
  • @Gousia-MSFT 我没有这个文件。我应该创建它并添加到项目的顶层吗?
  • 是的,请尝试添加它,如果这样可以解决您的问题,请告诉我。
  • 你能解决这个问题吗?
  • 嗨,我已经添加了提到的代码,但没有运气。我收到了很多错误:The name 'Scripts' does not exist in the current contextThe name 'Styles' does not exist in the current context

标签: module task botframework bots microsoft-teams


【解决方案1】:

来自the sample的重要部分:

此示例部署在 Microsoft Azure 上,您可以通过将任务模块 CSharp.zip 上传到您的一个团队和/或作为个人应用程序自行尝试。 (必须为您的租户启用旁加载;请参阅此处的第 6 步。) 该应用在免费的 Azure 层上运行,因此如果您最近没有使用它并且它可能需要一段时间才能加载如果它不被使用,它会很快回到睡眠状态,但一旦加载它就会非常活泼。

所以,

  1. 您的 Teams 管理员必须启用旁加载
  2. 您的机器人必须侧载到团队中

最简单的方法是下载sample manifest,在 App Studio 中打开它,然后在其中编辑您的机器人信息。然后您需要确保为您的机器人设置了Domains and permissions &gt; Valid Domains。还要确保将选项卡 URL 更改为您自己的。

您还需要确保在您的任务中,他们调用的 URL 全部使用 https 而不是 http。如果链中的任何地方都在使用 http(例如,如果您使用 ngrok 和 http://localhost),它将无法正常工作。

【讨论】:

  • 团队侧载已启用。清单文件与添加的有效域一起更正。全部使用Https。单击按钮后,是否没有更简单的方法可以只显示一个带有 iframe 对象的弹出窗口?谢谢
  • @Rikardo 你能分享你的完整代码吗?这可能会使故障排除变得更容易。恐怕这是弹出我所知道的 iframe 的唯一方法。另一种方法是在浏览器中打开一个链接。
  • 我不能分享完整的代码。我已经看到您的示例使用返回 taskEnvelope 的 ASP.NET httpResponseMessage。由于我的机器人在 .Net Core 2.1 上运行,因此我的代码似乎从未达到此方法。无论如何我可以复制到我的PostAsync 方法?
  • @Rikardo 恐怕我对 C# 或那个示例不够精通,无法提供一个好的答案。我建议opening an issue in that repo
猜你喜欢
  • 2020-05-07
  • 1970-01-01
  • 2021-01-13
  • 2019-07-18
  • 2019-02-04
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多