Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 .
Microsoft Teams invia notifiche al bot per le modifiche o gli eventi che si verificano negli ambiti in cui il bot è attivo. L'elenco seguente fornisce gli eventi per attivare la logica del servizio:
- Attivare un messaggio di benvenuto quando il bot viene aggiunto a un team.
- Eseguire query e memorizzare nella cache le informazioni sul gruppo quando il bot viene aggiunto a una chat di gruppo.
- Aggiornare le informazioni memorizzate nella cache sull'appartenenza al team o le informazioni sul canale.
- Rimuovere le informazioni memorizzate nella cache di un team se il bot viene rimosso.
- Quando un utente apprezza un messaggio bot.
Ogni evento bot viene inviato come un Activity oggetto in cui messageType definisce quali informazioni sono presenti nell'oggetto. Per i messaggi di tipo message, vedere Invio e ricezione di messaggi.
Per gli eventi di Teams e di gruppo, attivati dal conversationUpdate tipo, vengono passate più informazioni sugli eventi di Teams come parte dell'oggetto channelData e pertanto il gestore eventi deve eseguire una query sul channelData payload per i metadati di Teams eventType e altri specifici dell'evento.
Nella tabella seguente sono elencati gli eventi che il bot può ricevere e su cui può intervenire.
| Type | Oggetto payload | Tipo di evento di Teams | Descrizione | Ambito |
|---|---|---|---|---|
conversationUpdate |
membersAdded |
teamMemberAdded |
Membro aggiunto al team | tutti |
conversationUpdate |
membersRemoved |
teamMemberRemoved |
Il membro è stato rimosso dal team |
groupChat & team |
conversationUpdate |
teamRenamed |
Il team è stato rinominato | team |
|
conversationUpdate |
channelCreated |
È stato creato un canale | team |
|
conversationUpdate |
channelRenamed |
Un canale è stato rinominato | team |
|
conversationUpdate |
channelDeleted |
Un canale è stato eliminato | team |
|
messageReaction |
reactionsAdded |
Reazione al messaggio bot | tutti | |
messageReaction |
reactionsRemoved |
Reazione rimossa dal messaggio del bot | tutti |
Aggiunta di un membro del team o di un bot
L'evento conversationUpdate viene inviato al bot quando riceve informazioni sugli aggiornamenti dell'appartenenza per i team in cui viene aggiunto. Inoltre, quando viene aggiunto per la prima volta, riceve un aggiornamento specifico per le conversazioni personali. Le informazioni sull'utente (Id) sono univoche per il bot e possono essere memorizzate nella cache per un uso futuro da parte del servizio, ad esempio l'invio di un messaggio a un utente specifico.
Bot o utente aggiunto a un team
L'evento conversationUpdate con l'oggetto membersAdded nel payload viene inviato quando si aggiunge un bot a un team o quando si aggiunge un nuovo utente a un team in cui viene aggiunto un bot. Teams aggiunge eventType.teamMemberAdded anche l'oggetto channelData .
Poiché questo evento viene inviato in entrambi i casi, è necessario analizzare l'oggetto membersAdded per determinare se l'aggiunta è stata eseguita da un utente o dal bot stesso. Per quest'ultimo, una procedura consigliata consiste nell'inviare un messaggio di benvenuto al canale in modo che gli utenti possano comprendere le funzionalità fornite dal bot.
Codice di esempio: Verifica se il bot è stato il membro aggiunto
.NET
for (int i = 0; i < sourceMessage.MembersAdded.Count; i++)
{
if (sourceMessage.MembersAdded[i].Id == sourceMessage.Recipient.Id)
{
addedBot = true;
break;
}
}
Node.js
const builder = require('botbuilder');
var c = new builder.ChatConnector({appId: BOT_APP_ID, appPassword: .BOT_SECRET});
var bot = new builder.UniversalBot(c);
bot.on('conversationUpdate', (msg) => {
var members = msg.membersAdded;
// Loop through all members that were just added to the team
for (var i = 0; i < members.length; i++) {
// See if the member added was our bot
if (members[i].id.includes(BOT_APP_ID)) {
var botmessage = new builder.Message()
.address(msg.address)
.text('Hello World!');
bot.send(botmessage, function(err) {});
}
}
});
Esempio di schema: Bot aggiunto al team
{
"membersAdded":[
{
"id":"28:f5d48856-5b42-41a0-8c3a-c5f944b679b0"
}
],
"type":"conversationUpdate",
"timestamp":"2017-02-23T19:38:35.312Z",
"localTimestamp":"2017-02-23T12:38:35.312-07:00",
"id":"f:5f85c2ad",
"channelId":"msteams",
"serviceUrl":"https://smba.trafficmanager.net/amer-client-ss.msg/",
"from":{
"id":"29:1I9Is_Sx0OIy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
},
"conversation":{
"isGroup":true,
"conversationType":"channel",
"id":"19:efa9296d959346209fea44151c742e73@thread.skype"
},
"recipient":{
"id":"28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
"name":"SongsuggesterBot"
},
"channelData":{
"team":{
"id":"19:efa9296d959346209fea44151c742e73@thread.skype"
},
"eventType":"teamMemberAdded",
"tenant":{
"id":"72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
}
Utente aggiunto a una riunione
L'evento conversationUpdate con l'oggetto membersAdded nel payload viene inviato quando un utente viene aggiunto a una riunione privata pianificata. I dettagli dell'evento vengono inviati anche quando utenti anonimi partecipano alla riunione.
Nota
- Quando un utente anonimo viene aggiunto a una riunione, l'oggetto payload membersAdded non ha
aadObjectIdcampo. - Quando un utente anonimo viene aggiunto a una riunione,
froml'oggetto nel payload ha sempre l'ID dell'organizzatore della riunione, anche se l'utente anonimo è stato aggiunto da un altro relatore.
Esempio di schema: Utente aggiunto a una riunione
{
"membersAdded":[
{
"id":"229:1Z_XHWBMhDuehhDBYoPQD6Y1DSFsTtqOZx-SA5Jh9Y4zHKm4VbFGRn7-rK7SWiW1JECwxkMdrWpHoBut2sSyQPA"
}
],
"type":"conversationUpdate",
"timestamp":"2017-02-23T19:38:35.312Z",
"localTimestamp":"2020-09-29T21:11:38.6542339Z",
"id":"f:a8cd1b51-9ddb-bd35-624b-7f7474165df8",
"channelId":"msteams",
"serviceUrl":"https://canary.botapi.skype.com/amer/",
"from":{
"id":"29:1siKxZhSoTapsXvI0gyf7Gywm_HM-4kEQW4BJnWuFYVIVu87xCNP99nidgQRCcwD3L3p_schiMShzx8IDRzf8mw",
"aadObjectId":"f30ba569-abef-4e97-8762-35f85cbae706"
},
"conversation":{
"isGroup":true,
"tenantId":"e15762ef-a8d8-416b-871c-25516354f1fe",
"id":"19:meeting_MWJlNGViOTgtMGExYi00NDA3LWExODgtOTZhMWNlYjM4ZTRj@thread.v2"
},
"recipient":{
"id":"28:3af3604a-d4fc-486b-911e-86fab41aa91c",
"name":"EchoBot1_Rename"
},
"channelData":{
"tenant":{
"id":"e15762ef-a8d8-416b-871c-25516354f1fe"
},
"source":null,
"meeting":{
"id":"MCMxOTptZWV0aW5nX01XSmxOR1ZpT1RndE1HRXhZaTAwTkRBM0xXRXhPRGd0T1RaaE1XTmxZak00WlRSakB0aHJlYWQudjIjMA=="
}
}
}
Bot aggiunto solo per il contesto personale
Il bot riceve un conversationUpdate con membersAdded quando un utente lo aggiunge direttamente per la chat personale. In questo caso, il payload ricevuto dal bot non contiene l'oggetto channelData.team . È consigliabile usarlo come filtro nel caso in cui si voglia che il bot offra un messaggio di benvenuto diverso a seconda dell'ambito.
Nota
Per i bot con ambito personale, il bot riceve l'evento conversationUpdate più volte, anche se il bot viene rimosso e aggiunto di nuovo. Per lo sviluppo e i test, potrebbe essere utile aggiungere una funzione helper che consente di reimpostare completamente il bot. Per ulteriori informazioni, vedere Node.js esempio o esempio C# per ulteriori dettagli sull'implementazione.
Esempio di schema: bot aggiunto al contesto personale
{
"membersAdded": [{
"id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0"
},
{
"id": "29:<userID>",
"aadObjectId": "***"
}
],
"type": "conversationUpdate",
"timestamp": "2019-04-23T10:17:44.349Z",
"id": "f:5f85c2ad",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"from": {
"id": "29:<USERID>",
"aadObjectId": "***"
},
"conversation": {
"conversationType": "personal",
"id": "***"
},
"recipient": {
"id": "28:<BOT ID>",
"name": "<BOT NAME>"
},
"channelData": {
"tenant": {
"id": "<TENANT ID>"
}
}
}
Membro del team o bot rimosso
L'evento conversationUpdate con l'oggetto membersRemoved nel payload viene inviato quando il bot viene rimosso da un team o quando un utente viene rimosso da un team in cui viene aggiunto un bot. Teams aggiunge eventType.teamMemberRemoved anche l'oggetto channelData . Come per l'oggetto membersAdded , è necessario analizzarlo membersRemoved per l'ID app del bot per determinare chi è stato rimosso.
Nota
Se un bot viene aggiunto a un team e successivamente bloccato per il proprietario del team dall'amministratore del tenant, non riceve conversationUpdate l'evento quando il proprietario rimuove un utente dal team.
Esempio di schema: membro del team rimosso
{
"membersRemoved": [
{
"id": "29:1_LCi5Up14pAy65yZuaJzG1uIT7ujYhjjSTsUNqjORsZHjLHKiQIBJa4cX2XsAsRoaY7va2w6ZymA9-1VtSY_g"
}
],
"type": "conversationUpdate",
"timestamp": "2017-02-23T19:37:06.96Z",
"localTimestamp": "2017-02-23T12:37:06.96-07:00",
"id": "f:d8a6a4aa",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"from": {
"id": "29:1I9Is_Sx0OIy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"recipient":
{
"id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
"name": "SongsuggesterBot"
},
"channelData": {
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"eventType": "teamMemberRemoved",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
}
Utente rimosso da una riunione
L'evento conversationUpdate con l'oggetto membersRemoved nel payload viene inviato quando un utente viene rimosso da una riunione privata pianificata. I dettagli dell'evento vengono inviati anche quando utenti anonimi partecipano alla riunione.
Nota
- Quando un utente anonimo viene rimosso da una riunione, l'oggetto payload membersRemoved non ha
aadObjectIdcampo. - Quando un utente anonimo viene rimosso da una riunione,
fromgli oggetti nel payload hanno sempre l'ID dell'organizzatore della riunione, anche se l'utente anonimo è stato rimosso da un altro relatore.
Esempio di schema: Utente rimosso dalla riunione
{
"membersRemoved":
{
"id": "29:1Z_XHWBMhDuehhDBYoPQD6Y1DSFsTtqOZx-SA5Jh9Y4zHKm4VbFGRn7-rK7SWiW1JECwxkMdrWpHoBut2sSyQPA"
}
],
"type": "conversationUpdate",
"timestamp": "2020-09-29T21:15:08.6391139Z",
"id": "f:ee8dfdf3-54ac-51de-05da-9d49514974bb",
"channelId": "msteams",
"serviceUrl": "https://canary.botapi.skype.com/amer/",
"from": {
"id": "29:1siKxZhSoTapsXvI0gyf7Gywm_HM-4kEQW4BJnWuFYVIVu87xCNP99nidgQRCcwD3L3p_schiMShzx8IDRzf8mw",
"aadObjectId": "f30ba569-abef-4e97-8762-35f85cbae706"
},
"conversation": {
"isGroup": true,
"tenantId": "e15762ef-a8d8-416b-871c-25516354f1fe",
"id": "19:meeting_MWJlNGViOTgtMGExYi00NDA3LWExODgtOTZhMWNlYjM4ZTRj@thread.v2"
},
"recipient": {
"id": "28:3af3604a-d4fc-486b-911e-86fab41aa91c",
"name": "EchoBot1_Rename"
},
"channelData": {
"tenant": {
"id": "e15762ef-a8d8-416b-871c-25516354f1fe"
},
"source": null,
"meeting": {
"id": "MCMxOTptZWV0aW5nX01XSmxOR1ZpT1RndE1HRXhZaTAwTkRBM0xXRXhPRGd0T1RaaE1XTmxZak00WlRSakB0aHJlYWQudjIjMA=="
}
}
}
Aggiornamenti dei nomi dei team
Nota
Non è disponibile alcuna funzionalità per eseguire query su tutti i nomi di team e il nome del team non viene restituito nei payload di altri eventi.
Il bot riceve una notifica quando il team di cui fa parte è stato rinominato. Riceve un conversationUpdate evento nell'oggetto eventType.teamRenamedchannelData . Non sono presenti notifiche per la creazione o l'eliminazione di team, perché i bot esistono solo come parte dei team e non hanno visibilità all'esterno dell'ambito in cui sono stati aggiunti.
Esempio di schema: Team rinominato
{
"type": "conversationUpdate",
"timestamp": "2017-02-23T19:35:56.825Z",
"localTimestamp": "2017-02-23T12:35:56.825-07:00",
"id": "f:1406033e",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"from": {
"id": "29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"recipient": {
"id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
"name": "SongsuggesterLocal"
},
"channelData": {
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype",
"name": "New Team Name"
},
"eventType": "teamRenamed",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
}
Aggiornamenti del canale
Il bot riceve una notifica quando un canale viene creato, rinominato o eliminato in un team in cui è stato aggiunto. Anche in questo caso, l'evento conversationUpdate viene ricevuto e viene inviato un identificatore di evento specifico di Teams come parte dell'oggetto channelData.eventTypechannel.id , in cui i dati del canale sono il GUID per il canale e channel.name contengono il nome del canale stesso.
Gli eventi del canale sono i seguenti:
- channelCreated Un utente aggiunge un nuovo canale al team.
- channelRenamed Un utente rinomina un canale esistente.
- channelDeleted Un utente rimuove un canale.
Esempio di schema completo: channelCreated
{
"type": "conversationUpdate",
"timestamp": "2017-02-23T19:34:07.478Z",
"localTimestamp": "2017-02-23T12:34:07.478-07:00",
"id": "f:dd6ec311",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"from": {
"id": "29:1wR7IdIRIoerMIWbewMi75JA3scaMuxvFon9eRQW2Nix5loMDo0362st2IaRVRirPZBv1WdXT8TIFWWmlQCizZQ"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"recipient": {
"id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
"name": "SongsuggesterBot"
},
"channelData": {
"channel": {
"id": "19:6d97d816470f481dbcda38244b98689a@thread.skype",
"name": "FunDiscussions"
},
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"eventType": "channelCreated",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
}
Estratto di schema: channelData for channelRenamed
⋮
"channelData": {
"channel": {
"id": "19:6d97d816470f481dbcda38244b98689a@thread.skype",
"name": "PhotographyUpdates"
},
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"eventType": "channelRenamed",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
⋮
Estratto di schema: channelData per channelDeleted
⋮
"channelData": {
"channel": {
"id": "19:6d97d816470f481dbcda38244b98689a@thread.skype",
"name": "PhotographyUpdates"
},
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"eventType": "channelDeleted",
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
}
⋮
Reazioni
L'evento messageReaction viene inviato quando un utente aggiunge o rimuove la propria reazione a un messaggio originariamente inviato dal bot.
replyToId contiene l'ID del messaggio specifico.
Esempio di schema: a un utente piace un messaggio
{
"reactionsAdded": [
{
"type": "like"
}
],
"type": "messageReaction",
"timestamp": "2017-10-16T18:45:41.943Z",
"id": "f:9f78d1f3",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"from": {
"id": "29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA",
"aadObjectId": "c33aafc4-646d-4543-9d4c-abd28e4d2110"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
},
"recipient": {
"id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
"name": "SongsuggesterLocal"
},
"channelData": {
"channel": {
"id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
},
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
},
"replyToId": "1575667808184"
}
Esempio di schema: a un utente non piace un messaggio
{
"reactionsRemoved": [
{
"type": "like"
}
],
"type": "messageReaction",
"timestamp": "2017-10-16T18:45:41.943Z",
"id": "f:9f78d1f3",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"from": {
"id": "29:1I9Is_Sx0O-Iy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA",
"aadObjectId": "c33aafc4-646d-4543-9d4c-abd28e4d2110"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
},
"recipient": {
"id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
"name": "SongsuggesterLocal"
},
"channelData": {
"channel": {
"id": "19:3629591d4b774aa08cb0887902eee7c1@thread.skype"
},
"team": {
"id": "19:efa9296d959346209fea44151c742e73@thread.skype"
},
"tenant": {
"id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
},
"replyToId": "1575667808184"
}