在ms团队选项卡(javascript)中查找两个聊天参与者
我们的应用程序具有用户之间的关系,我们希望在MS团队选项卡中显示这些关系 假设MSTeam中的用户a和用户B之间有一次聊天。 用户A当前已登录到ms Team,并将我们的应用程序选项卡添加到聊天中 在选项卡中,我们希望显示用户A和用户B之间的关系(如果存在)。因此,我们需要以某种方式确定用户B(电子邮件将是最好的) 通过MS teams SDK,我可以找到聊天ID,但不能找到用户B的ID。 我找到了通过聊天ID获取成员的Graph API路由: 不幸的是,它是测试版。如果我理解正确,这意味着我不能将其用于生产 是否有其他方法来查找用户B的信息(id、电子邮件) 以下是上下文如何查找选项卡(值已更改)。 配置页面和选项卡本身都是一样的在ms团队选项卡(javascript)中查找两个聊天参与者,javascript,microsoft-teams,Javascript,Microsoft Teams,我们的应用程序具有用户之间的关系,我们希望在MS团队选项卡中显示这些关系 假设MSTeam中的用户a和用户B之间有一次聊天。 用户A当前已登录到ms Team,并将我们的应用程序选项卡添加到聊天中 在选项卡中,我们希望显示用户A和用户B之间的关系(如果存在)。因此,我们需要以某种方式确定用户B(电子邮件将是最好的) 通过MS teams SDK,我可以找到聊天ID,但不能找到用户B的ID。 我找到了通过聊天ID获取成员的Graph API路由: 不幸的是,它是测试版。如果我理解正确,这意味着我不
{
"appSessionId": "0db8663f-35cd-4231-ba3a-a3089b151f8",
"chatId": "19:15d9c400-6c59-4379-914e-d6d22d1597aa_a883b685-0733-46da-b102-ce7974668cf@unq.gbl.spaces",
"entityId": "",
"hostClientType": "desktop",
"isFullScreen": false,
"jsonTabUrl": "microsoft-teams-json-tab.azurewebsites.net",
"locale": "en-us",
"loginHint": "u1.dabra@outlook.com",
"ringId": "general",
"sessionId": "882ef0d4-e222-5ec4-79d9-6911debf550",
"subEntityId": "",
"teamSiteDomain": "dabra.sharepoint.com",
"teamSitePath": "",
"teamSiteUrl": "",
"tenantSKU": "free",
"theme": "default",
"tid": "9703245a-7156-4221-b92d-ec339ddf183",
"upn": "myemail@outlook.com",
"userLicenseType": "Unknown",
"userObjectId": "a883b685-0733-46da-b102-ce797466c7",
"userPrincipalName": "admin@Dabra.onmicrosoft.com"
}
Upd:
我还没能解决我的问题,但我找到了一种方法,在安装tab时让聊天用户进入机器人。也许这段代码对某些人有用
Response是我们正在寻找的聊天用户列表
this.onTeamsMembersAddedEvent(async (teamMembersAdded, teamInfo, turnContext, next) => {
const connector = turnContext.adapter.createConnectorClient(turnContext.activity.serviceUrl);
const conversationId = turnContext.activity.conversation.id;
const response = await connector.conversations.getConversationMembers(conversationId);
// Response is the list of users in chat
console.log(response);
await next();
});
如果您使用的是用C#编写的Bot,那么有一种方法可以使用TurnContext.conversation.GetConversationMembersSync方法获取当前对话的所有成员(我确信Node.js中有一个等效的Bot)。这意味着,如果将机器人添加到应用程序以及现有选项卡中,则可以在将机器人添加到群组聊天时查询对话成员。将Bot添加到对话中时,它会收到OnMembersAddedAsync事件,您可以在该事件中执行“GetConversationMembersAsync”调用,如下所示:
protected override Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
List<ChannelAccount> teamMembers = (await turnContext.TurnState.Get<IConnectorClient>().Conversations.GetConversationMembersAsync(
turnContext.Activity.GetChannelData<TeamsChannelData>().Team.Id).ConfigureAwait(false)).ToList();
List<MicrosoftTeamUser> teamsUsers = new List<MicrosoftTeamsUser>();
foreach (var item in teamMembers)
{
var teamsUser = JsonConvert.DeserializeObject<MicrosoftTeamUser>(item.Properties.ToString());
teamsUser.Id = item.Id;
teamsUsers.Add(teamsUser);
}
}
经过一些研究,我发现JS是等效的,并且能够同时获得两个聊天参与者。问题是我在安装选项卡时无法使用此选项。当然,我可以让与聊天Id相关的用户访问我们的数据库,然后从选项卡进行查询。但不能保证在用户单击“保存”按钮时保存数据,因此不能完全依赖此方法。我不能接受这个答案,因为它不能完全解决我的问题,但无论如何知道它是有用的。谢谢你的回答!是的,我明白你的意思,它不能让你在你的标签上的准确时间点100%获得频道成员。不过,我还有另一个可能的选择——根据选项卡的功能,您可能能够启动任务模块(基本上是一个团队弹出窗口),并且任务模块能够在任务完成时回调到其相关的Bot。这将非常有用,因为可以随时调用“GetConversationMembersAsync”,而不仅仅是从OnMembersAddedAsync调用。基本上,您可以按需调用此来进行刷新。我还没试过这个!顺便说一下,如果答案至少是部分有用的,请考虑至少一个“投票”,而不是一个“马克作为答案”:
public class MicrosoftTeamsUser
{
public string Id { get; set; }
public string ObjectId { get; set; }
public string GivenName { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public string UserPrincipalName { get; set; }
public string TenantId { get; set; }
}