Ottenere il contesto per il bot di Microsoft Teams

Importante

Questo articolo si basa su Bot Framework SDK v3. Se stai cercando la documentazione corrente versione 4.6 o successiva dell'SDK, vedi la sezione Bot conversazionali .

Il bot può accedere a un contesto aggiuntivo sul team o sulla chat, ad esempio il profilo utente. Queste informazioni possono essere usate per arricchire le funzionalità del bot e fornire un'esperienza più personalizzata.

Nota

  • Il modo più semplice per accedere alle API bot specifiche di Microsoft Teams è usare le estensioni per l'SDK Bot Builder.
  • Per C# o .NET, scaricare il pacchetto NuGet Microsoft.Bot.Connector.Teams .
  • Per lo sviluppo Node.js, la funzionalità Bot Builder for Teams è incorporata in Bot Framework SDK v4.6.

Recupera l'elenco dei partecipanti della squadra

Il bot può eseguire una query per ottenere l'elenco dei membri del team e i relativi profili di base. I profili di base includono gli ID utente di Teams e le informazioni di Microsoft Entra, come il nome e l'ID oggetto. È possibile usare queste informazioni per correlare le identità degli utenti. Ad esempio, controlla se un utente connesso a una scheda tramite le credenziali di Microsoft Entra è un membro del team.

Esempio di API REST

Emettere direttamente una richiesta GET su /conversations/{teamId}/members/, usando il serviceUrl valore come endpoint.

Può teamId essere trovato nell'oggetto channeldata del payload dell'attività che il bot riceve negli scenari seguenti:

  • Quando un utente invia un messaggio o interagisce con il bot in un contesto di team. Per ulteriori informazioni, consulta Ricezione di messaggi.
  • Quando si aggiunge un nuovo utente o bot a un team. Per altre informazioni, vedere Bot o utente aggiunto a un team.

Nota

  • Usa sempre l'ID del team quando chiami l'API.
  • Il serviceUrl valore tende a essere stabile, ma può cambiare. Quando arriva un nuovo messaggio, il bot deve verificarne il valore archiviato 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"
}]

Esempio di .NET

Chiama GetConversationMembersAsync usando Team.Id per restituire un elenco di ID utente. La chiamata GetConversationMembersAsync per ottenere userRole proprietà restituisce il valore come utente.

// 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()}");

Esempio di Node.js o 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));
    }
  }
);

Recuperare il profilo utente o l'elenco partecipanti in una chat personale o di gruppo

È possibile effettuare la chiamata API per qualsiasi chat personale per ottenere le informazioni sul profilo dell'utente che chatta con il bot.

La chiamata API, i metodi SDK e l'oggetto risposta sono identici al recupero dell'elenco dei team. L'unica differenza è che si passa il conversationId invece del teamId.

Recuperare l'elenco dei canali in un team

Il bot può eseguire una query sull'elenco dei canali in un team.

Nota

  • Il nome del canale generale predefinito viene restituito null per consentire la localizzazione.
  • L'ID canale per il canale Generale corrisponde sempre all'ID del team.

Esempio di API REST

Emettere direttamente una richiesta GET su /teams/{teamId}/conversations/, usando il serviceUrl valore come endpoint.

L'unica fonte è teamId un messaggio dal contesto del team. Il messaggio è un messaggio inviato da un utente o il messaggio ricevuto dal bot quando viene aggiunto a un team. Per altre informazioni, vedere Bot o utente aggiunto a un team.

Nota

Il serviceUrl valore tende a essere stabile, ma può cambiare. Quando arriva un nuovo messaggio, il bot deve verificarne il valore archiviato 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"
    }]
}

Esempio di .NET

L'esempio seguente usa la FetchChannelList chiamata dalle estensioni di Teams per Bot Builder SDK per .NET:

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

Node.js esempio

L'esempio seguente usa fetchChannelList la chiamata dalle estensioni di Teams per Bot Builder SDK per 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));
    }
  }
);

Ottenere clientInfo nel contesto del bot

È possibile recuperare clientInfo all'interno dell'attività del bot. clientInfo contiene le proprietà seguenti:

  • Impostazioni locali
  • Paese/area geografica
  • Piattaforma
  • Fuso orario

Esempio di JSON

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

Esempio di C#

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

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

Vedere anche

Esempi di Bot Framework.