首页 > 解决方案 > 来自 Bot Framework 中 Ms Teams 的任务模块调用

问题描述

我希望在我的机器人中打开一个连接到 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 容器在我的团队中渲染视频。 在此处输入图像描述

标签: moduletaskbotframeworkbotsmicrosoft-teams

解决方案


样本中的重要部分:

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

所以,

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

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

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


推荐阅读