如何使用 MS bot 框架从 Teams 私人消息中获取用户上下文
Posted
技术标签:
【中文标题】如何使用 MS bot 框架从 Teams 私人消息中获取用户上下文【英文标题】:How to get user context from Teams private message using MS bot framework 【发布时间】:2019-06-19 14:13:00 【问题描述】:我目前正在实施一个 Teams 机器人,它必须通过个人聊天获取与机器人通信的人的用户名(名字和姓氏)和用户的电子邮件地址。
我正在使用 SDK v4 的 bot 框架,并尝试实现此处提到的方法 (https://github.com/OfficeDev/BotBuilder-MicrosoftTeams-dotnet)。获取团队上下文时返回的唯一参数是租户 ID。频道和团队都是空的(我想这是因为我在私人聊天中?)。
由于我现在从 Teams 上下文中获得了租户 ID,我该如何使用它来检索用户的信息?
要检索 Teams 上下文,我调用以下命令:
ITeamsContext teamsContext = turnContext.TurnState.Get<ITeamsContext>();
【问题讨论】:
【参考方案1】:使用 ITeamsContext 对象检索 ID 后,您需要使用这些 ID 来完全填充 Teams 对象。您可以使用 Operations.FetchTeamDetailsAsync 方法执行此操作。
要获取对话中的成员名单,您将使用 GetConversationParametersForCreateOrGetDirectConversation() 方法。 #epicmethodname。
using Microsoft.Bot.Builder.Teams;
using Microsoft.Bot.Schema.Teams;
using Microsoft.Bot.Connector.Teams;
...
ConversationList channels = await teamsContext.Operations.FetchChannelListAsync(incomingTeamId);
TeamDetails teamInfo = await teamsContext.Operations.FetchTeamDetailsAsync(incomingTeamId);
var roster = teamsContext.GetConversationParametersForCreateOrGetDirectConversation(turnContext.Activity.From).Members;
List<TeamsChannelAccount> rosterTC = roster.ToList().ConvertAll(member =>
return teamsContext.AsTeamsChannelAccount(member);
);
await turnContext.SendActivityAsync($"You have roster.Count number of people in this group. You are from.Name");
您可以在此处找到一些入门帮助和其他资源:https://developer.microsoft.com/en-us/office/blogs/preview-release-of-net-teams-bot-builder-v4-sdk/
【讨论】:
你好安德鲁。谢谢你回到我身旁。我会试一试,让你知道它是否有效。 你好安德鲁,谢谢你的回复。你知道为什么我的teamsContext.Team.Id
== teamsContext.Channel.Id
并且从FetchChannelListAsync()
得到结果后它有ChannelInfo.Name
== null?
哦,我找到原因了。主要通用 Channel 有 name == null 和 Id == TeamsId以上是关于如何使用 MS bot 框架从 Teams 私人消息中获取用户上下文的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure 或 App Studio 将 Bot 部署到 MS Teams?
MS BOT框架(自适应卡):如何从directline发送值(Stepcontext.Value)?
使用 Team 的附件按钮将文件上传到 bot 应用程序时,Microsoft Teams 返回错误
如何通过 Bot Framework 向 Teams 中的用户发送通知?