Bot Framework团队成员的任务模块调用

时间:2019-07-25 15:29:51

标签: module task botframework bots microsoft-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容器在团队中渲染视频。 enter image description here

1 个答案:

答案 0 :(得分:0)

the sample中的重要部分:

  

此示例已部署在Microsoft Azure上,您可以通过将Task Module CSharp.zip上传到您的团队之一和/或作为个人应用程序来自己尝试。 (必须为租户启用侧面加载;请参见此处的步骤6。)该应用程序正在免费的Azure层上运行,因此如果您最近没有使用过它,则加载它可能需要一段时间。如果不使用它,它会迅速回到睡眠状态,但是一旦加载,它就会变得非常活泼。

所以

  1. 您的团队管理员必须启用侧面加载
  2. 您的漫游器必须横向加载到团队中

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

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