如何使用 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 中的用户发送通知?

如何在基于Bot framewok v4构建的团队聊天机器人中启用语音功能

使用 Bot Framework V4 在 Teams 中发送主动式 1:1 消息