Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ms团队选项卡(javascript)中查找两个聊天参与者_Javascript_Microsoft Teams - Fatal编程技术网

在ms团队选项卡(javascript)中查找两个聊天参与者

在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路由: 不幸的是,它是测试版。如果我理解正确,这意味着我不

我们的应用程序具有用户之间的关系,我们希望在MS团队选项卡中显示这些关系

假设MSTeam中的用户a和用户B之间有一次聊天。 用户A当前已登录到ms Team,并将我们的应用程序选项卡添加到聊天中

在选项卡中,我们希望显示用户A和用户B之间的关系(如果存在)。因此,我们需要以某种方式确定用户B(电子邮件将是最好的)

通过MS teams SDK,我可以找到聊天ID,但不能找到用户B的ID。 我找到了通过聊天ID获取成员的Graph API路由:

不幸的是,它是测试版。如果我理解正确,这意味着我不能将其用于生产

是否有其他方法来查找用户B的信息(id、电子邮件)

以下是上下文如何查找选项卡(值已更改)。 配置页面和选项卡本身都是一样的

{
  "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; }
}