module - 来自 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 容器在我的团队中渲染视频。
解决方案
样本中的重要部分:
此示例部署在 Microsoft Azure 上,您可以通过将任务模块 CSharp.zip 上传到您的团队和/或作为个人应用程序自己尝试。(必须为您的租户启用旁加载;请参阅此处的第 6 步。)该应用程序在免费的 Azure 层上运行,因此如果您最近没有使用它可能需要一段时间才能加载,如果它会很快回到睡眠状态没有被使用,但是一旦加载它就非常活泼。
所以,
- 您的 Teams 管理员必须启用旁加载
- 您的机器人必须侧载到团队中
最简单的方法是下载示例清单,在 App Studio 中打开它,然后在其中编辑您的机器人信息。然后您需要确保Domains and permissions > Valid Domains
已为您的机器人设置。还要确保将选项卡 URL 更改为您自己的。
您还需要确保在您的任务中,他们调用 ALL 的 URL 使用https
而不是http
. 如果链中的任何地方都在使用http
(例如,如果您使用 ngrok 和http://localhost
),它将无法正常工作。
推荐阅读
- javascript - 与之前使用 getBoundingClientRect 放置的位置相比,元素的位置不会保持不变
- c# - Azure Web 服务 - 如何限制对公共站点的访问以实现合规性?
- pandas - Pandas 0.25.0:分类上的 groupby
- apache-poi - 如何从 Apache POI XWPFDocument 中获取脚注和段落?
- python - 如果 excel 已经打开,则在 excel 上写入数据框
- django - Django Import-Export Importing with User object failed
- c# - asp:placeholder 使用 ajax 更新内容
- gcc - GCC 在链接脚本中添加更多二进制文件
- azure - 是否有 Workflow.Definition (Microsoft.Azure.Management.Logic.Models) 应该是什么样子的示例?
- python - 从主数组中获取子数组,其中每个子数组右移一位