Module Bot框架中来自Ms团队的任务模块调用
我希望在我的机器人中打开一个任务模块(弹出-带音频/视频的iframe),该模块连接到Teams频道。在GitHub页面上提供的示例代码之后,我遇到了一些问题 我试图按照示例并通过合并到我的代码中,但没有成功 在我的bot.cs文件中,我正在创建调用类型的卡操作:Module Bot框架中来自Ms团队的任务模块调用,module,task,botframework,bots,microsoft-teams,Module,Task,Botframework,Bots,Microsoft Teams,我希望在我的机器人中打开一个任务模块(弹出-带音频/视频的iframe),该模块连接到Teams频道。在GitHub页面上提供的示例代码之后,我遇到了一些问题 我试图按照示例并通过合并到我的代码中,但没有成功 在我的bot.cs文件中,我正在创建调用类型的卡操作: card.Buttons.Add(new CardAction("invoke", TaskModuleUIConstants.YouTube.ButtonTitle, null,null,null,
card.Buttons.Add(new CardAction("invoke", TaskModuleUIConstants.YouTube.ButtonTitle, null,null,null,
new Teams.Samples.TaskModule.Web.Models.BotFrameworkCardValue<string>()
{
Data = TaskModuleUIConstants.YouTube.Id
}));
card.Buttons.Add(新卡片操作(“调用”),TaskModuleUIConstants.YouTube.ButtonTitle,null,null,null,
new Teams.Samples.TaskModule.Web.Models.BotFrameworkCardValue()
{
Data=TaskModuleUIConstants.YouTube.Id
}));
在从控制器继承的my 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);
}
[HttpPost]
公共异步任务PostAsync()
{
//将HTTP POST的处理委托给适配器。
//适配器将调用bot。
wait _adapter.ProcessAsync(请求、响应、_bot);
}
公共异步任务发布([FromBody]活动)
{
if(activity.Type==ActivityTypes.Invoke)
{
返回HandleInvokeMessages(活动);
}
返回新的HttpResponseMessage(HttpStatusCode.Accepted);
}
专用HttpResponseMessage HandleInvokeMessages(活动)
{
var activityValue=activity.Value.ToString();
if(activity.Name==“任务/提取”)
{
var action=Newtonsoft.Json.JsonConvert.DeserializeObject(activityValue);
Teams.Samples.TaskModule.Web.Models.TaskInfo TaskInfo=GetTaskInfo(action.Data);
Teams.Samples.TaskModule.Web.Models.TaskEnvelope TaskEnvelope=新建Teams.Samples.TaskModule.Web.Models.TaskEnvelope
{
Task=newteams.Samples.TaskModule.Web.Models.Task()
{
Type=Teams.Samples.TaskModule.Web.Models.TaskType.Continue,
TaskInfo=TaskInfo
}
};
返回味精;
}
返回新的HttpResponseMessage(HttpStatusCode.Accepted);
}
根据GitHub示例,还有更多代码,但我不会将其粘贴到这里。有人能给我指出正确的方向吗
我已经到了显示弹出窗口的阶段,但是内容和标题来自manifest文件,而不是创建实际的iframe,也没有视频渲染。我的目标是使用iframe容器在我的团队中渲染视频。
重要部分来自:
此示例部署在Microsoft Azure上,您可以通过将任务模块CSharp.zip上载到您的一个团队和/或作为个人应用程序来尝试(必须为您的租户启用侧加载;请参阅此处的步骤6。)该应用程序正在免费Azure层上运行,因此,如果您最近没有使用它,则可能需要一段时间才能加载,如果没有使用它,它会很快恢复睡眠,但一旦加载,它就会非常快速
所以
域和权限>有效域。还要确保将选项卡URL更改为自己的URL
您还需要确保在任务中,他们调用的URL都使用https
,而不是http
。如果链中的任何位置正在使用http
(如使用ngrok和http://localhost
),它将不起作用。重要部分来自:
此示例部署在Microsoft Azure上,您可以通过将任务模块CSharp.zip上载到您的一个团队和/或作为个人应用程序来尝试(必须为您的租户启用侧加载;请参阅此处的步骤6。)该应用程序正在免费Azure层上运行,因此,如果您最近没有使用它,则可能需要一段时间才能加载,如果没有使用它,它会很快恢复睡眠,但一旦加载,它就会非常快速
所以
您的团队管理员必须启用侧加载
您的机器人必须侧装到团队中
最简单的方法是下载,在App Studio中打开,然后在中编辑您的机器人信息。然后,您需要确保为bot设置了域和权限>有效域。还要确保将选项卡URL更改为自己的URL
您还需要确保在任务中,他们调用的URL都使用https
,而不是http
。如果链中的任何位置正在使用http
(如使用ngrok和http://localhost
),它将不起作用。请确认您是否已从示例代码中添加了内容?@Gousia MSFT我没有此文件。我应该创建它并添加到项目的顶层吗?是的,请尝试添加它,并让我知道这是否解决了您的问题。您能解决这个问题吗?您好,我添加了提到的代码,但没有运气。我收到了大量错误:名称“Scripts”在当前上下文中不存在
名称“style”在当前上下文中不存在
请确认是否已从示例代码中添加?@Gousia MSFT我没有此文件。我应该创建它并添加到项目的顶层吗?是的,请尝试添加它,并让我知道这是否解决了您的问题。您能解决这个问题吗?您好,我添加了提到的代码,但没有运气。我收到了大量错误:名称“Scripts”在当前上下文中不存在
名称“style”在当前上下文中不存在
团队侧加载已启用。清单文件已更正,并添加了有效域。所有人都使用Https。有没有更简单的方法只显示一个弹出窗口