Abilitare la collaborazione con Teams

La pagina di configurazione è condivisa fra i due prodotti: la documentazione riporta Applies to: Dynamics 365 Customer Service and Dynamics 365 Contact Center—standalone only. Nel Copilot Service admin center, dalla site map vai in Support experience > Collaboration, poi in Embedded chat using Teams seleziona Manage: si apre la pagina Microsoft Teams collaboration and chat.

L’interruttore principale è Turn on Microsoft Teams chats inside Dynamics 365. Subito dopo scegli fra Turn on for all Dynamics 365 apps e Turn on for selected Dynamics 365 apps; per Copilot Service workspace e Customer Service Hub la chat Teams è già attiva di default, mentre per le app personalizzate va abilitata a mano.

Nella sezione Connect chats to Dynamics 365 records decidi a quali tipi di record si possono agganciare le chat. Qui cade la prima differenza fra i due prodotti, e la doc la dichiara esplicitamente: Case is applicable to Customer Service only. Il caso, insomma, non è il tuo perno in Dynamics 365 Contact Center: la pagina di configurazione delle AI suggestions fa scegliere fra Case e Conversation, ed è Conversation il tipo di record su cui ragiona chi lavora in Contact Center.

Le altre impostazioni utili: Join chat per far entrare in una chat connessa chi ha accesso in scrittura al record; Receive notification on key updates, che avvisa i partecipanti quando cambiano fino a cinque attributi scelti (per l’entità Case sono preconfigurati Priority, Status, Status Reason); Sync Teams chats with records (Preview) per vedere le chat sulla timeline; Auto-name chats per nominare la chat come il record. Sulla pagina Configure Microsoft Teams collaboration trovi invece Turn on the linking of Dynamics 365 records to Microsoft Teams channels, l’opzione AI-based suggested contacts sotto Suggest contacts, più Turn on Enhanced Microsoft Teams Integration e Enable Confidential Labels.

Lato permessi, l’app richiede Chat.ReadWrite.All, Directory.Read.All, Presence.Read.All, User.Read.All e User.ReadBasic.All; in ambiente multisessione gli utenti devono avere gli stessi permessi del ruolo Productivity tools user. Chi può scollegare una chat si governa con il privilegio Disconnect Teams chat from Dynamics 365 record, sotto Business management > Miscellaneous Privileges; per Dynamics 365 Contact Center la tabella dei ruoli cita OC admin, OC supervisor e OC agent.

Che cosa cambia per il representative

Aperto un record, il representative (l’operatore umano) seleziona l’icona Teams chats and channels integration e ottiene il pannello Teams chats, con i tab Chat e Channels. In un’app multisessione come Copilot Service workspace o Contact Center workspace il pannello è raggiungibile direttamente dal productivity pane; in Customer Service Hub e nelle app custom si apre invece nel riquadro laterale destro.

Da lì può avviare una New connected chat, oppure trasformare una chat di gruppo esistente in chat connessa con Connect chats to record. Attenzione a un limite spesso ignorato: si possono connettere solo chat di gruppo, le uno-a-uno no. Le voci puntuali sono Connect to this case e Disconnect from this case, e il pulsante Join compare passando sopra l’icona del lucchetto quando si ha accesso in scrittura al record.

Un punto da tenere fermo: il customer support swarming è deprecato dall’8 febbraio 2026 e la documentazione raccomanda di usare la embedded Microsoft Teams chat per collaborare con gli esperti. La pagina di panoramica sulla collaborazione lo elenca ancora fra le opzioni: in caso di conflitto fa fede la pagina delle deprecation.

Sulla voce, infine, il representative può consultare o trasferire una chiamata a un utente Teams abilitando External Microsoft Teams users nelle impostazioni Consult e Transfer della sezione voice channel del voice workstream. Funziona solo via VOIP: consult e transfer verso utenti Teams tramite PSTN dal tab Teams del dialer non sono supportati, per quello esiste il tab External number.

Estendere il pannello di produttività: app profile manager JavaScript API

Il namespace è Microsoft.Apm e la reference lo descrive come l’insieme di metodi e proprietà per gestire tab e sessioni in Copilot Service workspace. Servono i ruoli App Profile user oppure Productivity tools user.

Sulle sessioni trovi getFocusedSession, getAllSessions, getSession, createSession, canCreateSession, close, focus e requestFocus, con le proprietà sessionId, isDefault, canClose e title. Sui tab: getFocusedTab, getAllTabs, getTab, createTab, canCreateTab, closeTab, focusTab e refreshTab. Sul contesto c’è updateContext, con sintassi Microsoft.Apm.getFocusedSession().updateContext(input);, che imposta l’automation dictionary e permette ai provider di aggiungere, modificare e rimuovere valori di slug, poi riutilizzabili dalle macro. Gli eventi client-side sono ON_SESSION_SWITCH e ON_SESSION_CLOSED.

Il pannello ospita strumenti custom sviluppati come custom page o come controllo Power Apps component framework: si registrano in Support experience > Productivity > Productivity tools > New, compilando Pane tool configuration con Name, Unique Name, Type (Control o Custom Page), Icon, Global, Description e Learn More Link, e si accendono poi nel Productivity pane dell’experience profile. Servono il ruolo Productivity tools administrator per configurare e Productivity tools user per usare. La nota da ricordare è netta: i custom productivity tool ospitati nel pane non sono legati contestualmente alla sessione e non hanno un meccanismo per recuperare informazioni dal contesto di sessione. È esattamente il vuoto che le API di Microsoft.Apm servono a colmare.

Estendere la conversazione: Omnichannel JavaScript API

L’altra API ha un namespace diverso, Microsoft.Omnichannel, e uno scopo diverso: agisce sulla conversazione, non sul profilo. I metodi sono getConversationId, getConversations (che restituisce i record di conversazione msdyn_ocliveworkitem), openConversation, linkToConversation, unlinkFromConversation e sendMessageToConversation.

linkToConversation collega account, contact o incident alla conversazione della sessione in focus, ma solo nel database: il collegamento si vede dopo il refresh della pagina e, testualmente, The caller is responsible for the UI refresh. Si può legare un solo account o contact e un solo case per volta, e solo a conversazioni attive.

La confusione tipica da evitare è proprio la sovrapposizione fra le due API: refreshTab, createSession e updateContext appartengono a Microsoft.Apm, mentre linkToConversation e sendMessageToConversation appartengono a Microsoft.Omnichannel. Non a caso l’esempio ufficiale di linkToConversation le usa entrambe nella stessa funzione, chiamando Microsoft.Apm.refreshTab dentro la promise risolta da Microsoft.Omnichannel.linkToConversation. In sede d’esame aspettati domande che mettono un metodo sotto il namespace sbagliato, o che ti chiedono quale API usare per aprire una scheda contro quale usare per legare un record alla conversazione: la risposta si decide sull’oggetto su cui l’API agisce, sessione e tab da una parte, conversazione dall’altra.