Obtenir du contexte pour votre bot Microsoft Teams

Important

Cet article est basé sur le SDK Bot Framework v3. Si vous recherchez la version 4.6 ou ultérieure de la documentation actuelle du Kit de développement logiciel (SDK), consultez la section robots conversationnels .

Votre bot peut accéder à des informations contextuelles supplémentaires sur l’équipe ou la conversation, telles que le profil utilisateur. Ces informations peuvent être utilisées pour enrichir les fonctionnalités de votre bot et fournir une expérience plus personnalisée.

Remarque

  • Les API de bot spécifiques à Microsoft Teams sont mieux accessibles via nos extensions pour le SDK Bot Builder.
  • Pour C# ou .NET, téléchargez notre package NuGet Microsoft.Bot.Connector.Teams .
  • Pour Node.js développement, la fonctionnalité Bot Builder for Teams est intégrée au SDK Bot Framework v4.6.

Récupérer la liste de l’équipe

Votre bot peut rechercher la liste des membres de l’équipe et leur profil de base. Les profils de base incluent les ID utilisateur Teams et des informations Microsoft Entra telles que le nom et l’ID d’objet. Vous pouvez utiliser ces informations pour corréler les identités des utilisateurs. Par exemple, la case activée est un membre de l’équipe si un utilisateur connecté à un onglet via des informations d’identification de Microsoft Entra est un membre de l’équipe.

Exemple d’API REST

Émettez directement une requête GET sur /conversations/{teamId}/members/, en utilisant la serviceUrl valeur comme point de terminaison.

Il teamId peut être trouvé dans l’objet channeldata de la charge utile d’activité que votre bot reçoit dans les scénarios suivants :

  • Lorsqu’un utilisateur envoie un message ou interagit avec votre bot dans un contexte d’équipe. Pour plus d’informations, consultez Réception de messages.
  • Lorsqu’un nouvel utilisateur ou un nouveau bot est ajouté à une équipe. Pour plus d’informations, consultez bot ou utilisateur ajouté à une équipe.

Remarque

  • Utilisez toujours l’ID d’équipe lors de l’appel de l’API.
  • La serviceUrl valeur a tendance à être stable mais peut changer. Lorsqu’un nouveau message arrive, votre bot doit vérifier sa valeur stockée serviceUrl .
GET /v3/conversations/19:ja0cu120i1jod12j@skype.net/members

Response body
[{
    "id": "29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
    "objectId": "9d3e08f9-a7ae-43aa-a4d3-de3f319a8a9c",
    "givenName": "Larry",
    "surname": "Brown",
    "email": "Larry.Brown@fabrikam.com",
    "userPrincipalName": "labrown@fabrikam.com"
}, {
    "id": "29:1bSnHZ7Js2STWrgk6ScEErLk1Lp2zQuD5H2qQ960rtvstKp8tKLl-3r8b6DoW0QxZimuTxk_kupZ1DBMpvIQQUAZL-PNj0EORDvRZXy8kvWk",
    "objectId": "76b0b09f-d410-48fd-993e-84da521a597b",
    "givenName": "John",
    "surname": "Patterson",
    "email": "johnp@fabrikam.com",
    "userPrincipalName": "johnp@fabrikam.com"
}, {
    "id": "29:1URzNQM1x1PNMr1D7L5_lFe6qF6gEfAbkdG8_BUxOW2mTKryQqEZtBTqDt10-MghkzjYDuUj4KG6nvg5lFAyjOLiGJ4jzhb99WrnI7XKriCs",
    "objectId": "6b7b3b2a-2c4b-4175-8582-41c9e685c1b5",
    "givenName": "Rick",
    "surname": "Stevens",
    "email": "Rick.Stevens@fabrikam.com",
    "userPrincipalName": "rstevens@fabrikam.com"
}]

Exemple .NET

Appelez GetConversationMembersAsync en utilisant Team.Id pour renvoyer une liste d’ID utilisateur. Appeler GetConversationMembersAsync pour obtenir userRole la propriété et renvoyer la valeur en tant qu’utilisateur.

// Fetch the members in the current conversation
var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));
var teamId = context.Activity.GetChannelData<TeamsChannelData>().Team.Id;
var members = await connector.Conversations.GetConversationMembersAsync(teamId);

// Concatenate information about all members into a string
var sb = new StringBuilder();
foreach (var member in members.AsTeamsChannelAccounts())
{
    sb.AppendFormat(
        "GivenName = {0}, TeamsMemberId = {1}",
        member.Name, member.Id);

    sb.AppendLine();
}

// Post the member info back into the conversation
await context.PostAsync($"People in this conversation: {sb.ToString()}");

Exemple Node.js ou TypeScript


[...]
import * as builder from "botbuilder";
[...]

var teamId = session.message.sourceEvent.team.id;
connector.fetchMembers(
  (<builder.IChatConnectorAddress>session.message.address).serviceUrl,
  teamId,
  (err, result) => {
    if (err) {
      session.endDialog('There is some error');
    }
    else {
      session.endDialog('%s', JSON.stringify(result));
    }
  }
);

Récupérer le profil utilisateur ou la liste dans une conversation personnelle ou de groupe

Vous pouvez effectuer un appel d’API pour n’importe quelle conversation personnelle afin d’obtenir les informations de profil de l’utilisateur qui discute avec votre bot.

L’appel d’API, les méthodes du Kit de développement logiciel (SDK) et l’objet de réponse sont identiques à l’extraction de la liste de l’équipe. La seule différence est que vous passez le à la conversationId place du teamId.

Récupérer la liste des canaux dans une équipe

Votre bot peut interroger la liste des canaux dans une équipe.

Remarque

  • Le nom du canal Général par défaut est renvoyé afin null de permettre la localisation.
  • L’ID de canal pour le canal Général correspond toujours à l’ID d’équipe.

Exemple d’API REST

Émettez directement une requête GET sur /teams/{teamId}/conversations/, en utilisant la serviceUrl valeur comme point de terminaison.

La seule source est teamId un message du contexte d’équipe. Le message est soit un message d’un utilisateur, soit le message que votre bot reçoit lorsqu’il est ajouté à une équipe. Pour plus d’informations, consultez bot ou utilisateur ajouté à une équipe.

Remarque

La serviceUrl valeur a tendance à être stable mais peut changer. Lorsqu’un nouveau message arrive, votre bot doit vérifier sa valeur stockée serviceUrl .

GET /v3/teams/19%3A033451497ea84fcc83d17ed7fb08a1b6%40thread.skype/conversations

Response body
{
    "conversations": [{
        "id": "19:033451497ea84fcc83d17ed7fb08a1b6@thread.skype",
        "name": null
    }, {
        "id": "19:cc25e4aae50746ecbb11473bba24c70a@thread.skype",
        "name": "Materials"
    }, {
        "id": "19:b7b84cba410c406ba671dbbf5e0a3519@thread.skype",
        "name": "Design"
    }, {
        "id": "19:fc5db2aed489454e8f8c06829ed6c986@thread.skype",
        "name": "Marketing"
    }]
}

Exemple .NET

L’exemple suivant utilise l’appel FetchChannelList des extensions Teams pour le SDK Bot Builder pour .NET :

ConversationList channels = client.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);

Node.js exemple

L’exemple suivant utilise fetchChannelList l’appel à partir des extensions Teams pour le SDK Bot Builder pour Node.js:

var teamId = session.message.sourceEvent.team.id;
connector.fetchChannelList(
  (session.message.address).serviceUrl,
  teamId,
  (err, result) => {
    if (err) {
      session.endDialog('There is an error');
    }
    else {
      session.endDialog('%s', JSON.stringify(result));
    }
  }
);

Obtenir clientInfo dans le contexte de votre bot

Vous pouvez récupérer les clientInfo dans l’activité de votre bot. clientInfo contient les propriétés suivantes :

  • Paramètres régionaux
  • Pays
  • Plateforme
  • Fuseau horaire

Exemple JSON

[
    {
        "type": "clientInfo",
        "locale": "en-US",
        "country": "US",
        "platform": "Windows",
        "timezone": "Asia/Calcutta"
    }
]

Exemple C#

var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));

{
    var clientinfo = context.Activity.Entities[0];
    await context.PostAsync($"ClientInfo: clientinfo ");
}

Voir aussi

Exemples Bot Framework.