Vuoi aprire una chat di Microsoft Teams con un semplice URL e, possibilmente, far trovare agli utenti un messaggio già pronto? Con la nuova app “Teams (work or school)” il comportamento dei deep‑link è cambiato: aprire la chat è ancora possibile, l’inserimento automatico del testo non più. Vediamo cosa funziona oggi e come ottenere lo stesso risultato in modo affidabile.
Contesto e cambiamento nella nuova app di Microsoft Teams
Per anni, molte organizzazioni hanno usato collegamenti del tipo https://teams.microsoft.com/...
per aprire direttamente una chat con persone specifiche e, nella versione “classic”, anche per precompilare il campo del messaggio tramite il parametro message=
. Con l’introduzione della nuova interfaccia “Teams (work or school)” rilasciata tra fine 2023 e il 2024, Microsoft ha aggiornato il modello di deep‑link per allinearlo alla UX unificata e rafforzare le garanzie di sicurezza. Il risultato più visibile è che i link continuano ad aprire la chat 1:1 o di gruppo, ma l’eventuale testo dopo &message=
viene ignorato.
In pratica: il deep‑link rimane una scorciatoia per arrivare alla destinazione giusta dentro Teams, non uno strumento per “inviare” o “caricare” automaticamente contenuti in una chat privata.
Cosa è cambiato rispetto a Teams classic
Nella versione precedente, il formato comunemente adottato era:
https://teams.microsoft.com/l/chat/0/0?users=<user1@dominio>&message=<testo_URL-encoded>
Questo funzionava perché il client intercettava il parametro message=
e lo riportava nel campo di input della chat. Oggi la nuova app apre comunque la chat, ma ignora completamente il parametro. Il comportamento è coerente su desktop, web e mobile della nuova esperienza.
Motivazioni di sicurezza e coerenza dell’esperienza
- Prevenzione di injection: permettere a un link pubblico di popolare il box di testo può generare confusione o abusi (ad esempio, l’utente può “credere” di aver scritto qualcosa che non ha mai digitato).
- Allineamento della UX: Microsoft ha ridefinito i deep‑link come navigazione e non come meccanismo di “pre‑staging” di contenuti nelle chat private.
- Controllo e auditing: l’invio programmatico dei messaggi è ora incanalato nelle API ufficiali (Graph, bot, estensioni), dove esistono permessi, log e policy amministrative.
Formati di URL e protocollo oggi supportati
Aprire una nuova chat o spostarsi su una chat esistente è ancora possibile con deep‑link ufficiali. I formati più utili sono questi:
Deep‑link via HTTPS
https://teams.microsoft.com/l/chat/0/0?users=<user1@dominio>
Per una chat di gruppo, separa più indirizzi con punto e virgola:
https://teams.microsoft.com/l/chat/0/0?users=<user1@dominio>;<user2@dominio>;<user3@dominio>
Note pratiche:
- Ordine e deduplica: l’ordine dei membri non è rilevante; evita duplicati.
- Tenant esterni: se la chat cross‑tenant è permessa, indica l’indirizzo effettivo della persona ospite; diversamente il deep‑link aprirà Teams ma mostrerà un errore di autorizzazione.
- Encoding: gli indirizzi email non richiedono encoding, ma qualsiasi altro parametro aggiuntivo sì (usa
encodeURIComponent
o equivalente).
Protocollo nativo dell’app desktop
msteams:/l/chat/0/0?users=<user1@dominio>
Questo protocollo prova ad aprire la chat direttamente nell’app desktop, se presente. È utile in ambienti gestiti o in applicazioni desktop dove si vuole evitare la mediazione del browser.
Parametri non più onorati
Il parametro message=
non viene più elaborato dalla nuova app. Se lo includi, la chat si apre comunque, ma il testo viene scartato. Lo stesso vale per eventuali varianti “non documentate”.
Soluzioni per inserire o inviare un messaggio in modo affidabile
Oggi ci sono diverse strade per ottenere un’esperienza equivalente o migliore rispetto al vecchio message=
. La scelta dipende da effort, governance e requisiti di sicurezza.
Opzione | Spiegazione | Pro | Contro |
---|---|---|---|
Protocollo msteams: o deep‑link HTTPS | Apre la chat 1:1 o di gruppo con i membri indicati. | Immediato, zero codice, coerente con le policy. | Non inserisce testo; l’utente deve digitarlo. |
Bot Framework o app di Teams | Un bot, una messaging extension o un’app personalizzata inviano il messaggio programmaticamente quando la chat è aperta o come risposta a un’azione. | Funziona su tutte le piattaforme; controlli e log a livello tenant. | Richiede sviluppo, distribuzione e consenso amministratore. |
Conversation deep‑link verso un canale | Precompila l’editor della conversazione in un canale di un team. | Supportato ufficialmente e stabile. | Non applicabile alle chat private 1:1 o di gruppo. |
Power Automate o Graph API | Si crea o si individua la chat e si invia il messaggio via Graph. | Affidabile e auditabile; scalabile; orchestrabile. | Richiede licenze/permessi e un back‑end o flow. |
Promemoria di copia‑incolla | Si include il testo desiderato nel link solo come “promemoria” visivo nell’interfaccia o nella pagina; l’utente incolla manualmente. | Nessun codice e nessun permesso speciale. | Esperienza macchinosa e non sempre chiara. |
Percorso consigliato con Microsoft Graph
Se l’obiettivo è davvero precompilare o inviare automaticamente un messaggio in una chat, la via robusta e supportata è usare Microsoft Graph (o un bot/app). Il deep‑link pubblico non lo consente più per scelta di prodotto.
Flusso logico
- Individuare o creare la chat con i partecipanti corretti.
- Inviare il messaggio HTML o Markdown tramite l’endpoint dei messaggi.
- Restituire un deep‑link standard alla stessa chat per agevolare il rientro dell’utente in Teams.
Esempio di creazione chat con Graph
Richiesta per creare una chat 1:1 o di gruppo indicando i membri. La forma esatta dei corpi JSON può variare nel tempo; l’esempio seguente illustra il modello concettuale.
POST https://graph.microsoft.com/v1.0/chats
Content-Type: application/json
{
"chatType": "group",
"members": [
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": ["owner"],
"[user@odata.bind](mailto:user@odata.bind)": "[https://graph.microsoft.com/v1.0/users('user1@contoso.com')](https://graph.microsoft.com/v1.0/users%28'user1@contoso.com'%29)"
},
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": [],
"[user@odata.bind](mailto:user@odata.bind)": "[https://graph.microsoft.com/v1.0/users('user2@contoso.com')](https://graph.microsoft.com/v1.0/users%28'user2@contoso.com'%29)"
}
]
}
Risposta minimale (estratto):
{
"id": "19:abcxyz123...@thread.v2",
"chatType": "group"
}
Esempio di invio messaggio
POST https://graph.microsoft.com/v1.0/chats/{chat-id}/messages
Content-Type: application/json
{
"body": {
"contentType": "html",
"content": "Ciao, questo messaggio è stato inviato via Graph."
}
}
Dopo l’invio, puoi restituire all’utente un deep‑link standard per riaprire velocemente la chat:
https://teams.microsoft.com/l/chat/0/0?users=user1@contoso.com;user2@contoso.com
Note su permessi e governance
- Le API dei messaggi chat richiedono deleghe o permessi applicativi coerenti con le policy aziendali e quasi sempre il consenso di un amministratore.
- Usa un’identità applicativa o un flow di Power Automate con connettore Graph ufficiale per garantire auditing e rispetto delle policy di conservazione.
- Applica un controllo sui destinatari per evitare invii accidentali a utenti esterni ove la chat esterna non sia permessa.
Implementazione con Power Automate
Se preferisci un approccio low‑code, Power Automate può orchestrare la creazione e l’invio del messaggio sfruttando connettori disponibili o richieste HTTP verso Graph.
- Trigger: clic su un pulsante in una pagina intranet, invio di un modulo, evento in un’applicazione.
- Azione: ricerca o creazione della chat con i membri desiderati.
- Azione: invio del messaggio con il contenuto HTML/Markdown e, se serve, menzioni o allegati supportati.
- Ritorno: presentazione di un link “Apri in Teams” verso la chat appena aggiornata.
Vantaggi: controllo centralizzato, log nativi, gestione delle credenziali in un luogo sicuro. Svantaggi: latenza e dipendenza da licenze/limiti di esecuzione.
Implementazione con Bot Framework o app personalizzata
Un bot può essere invitato in una chat o inviare un messaggio come risultato di un’azione dell’utente (per esempio, una messaging extension che genera contenuto a partire da un link). Questo approccio è ideale quando vuoi:
- Applicare logiche avanzate di business sul contenuto da inviare.
- Integrare sistemi esterni con feedback in tempo reale dentro Teams.
- Garantire tracciabilità, policy, moderazione e telemetria.
Richiede competenze di sviluppo e una pipeline di pubblicazione interna; in cambio, ottieni l’esperienza più “nativa” e sostenibile nel tempo.
Alternative parziali con canali dei team
Dove l’obiettivo non è una chat privata ma una conversazione di canale, il “conversation deep‑link” consente di precompilare il riquadro “Nuova conversazione” all’interno di un canale. È un flusso diverso dalla chat 1:1 o di gruppo ma copre casi d’uso simili: onboarding, domande frequenti, segnalazioni.
Limiti principali: non opera nelle chat private e richiede che l’utente sia membro del team e del canale target.
Esperienza di copia‑incolla come ripiego
Se non puoi investire subito in un’integrazione, puoi comunque fornire un link che apra la chat e, accanto al link, mostrare il testo che l’utente deve incollare. In alcune interfacce interne puoi persino pre‑selezionare il testo con JavaScript, riducendo l’attrito. È una soluzione “zero codice server‑side” ma resta fragile e meno elegante.
Linee guida per costruire i deep‑link
- Separatore dei membri: usa il punto e virgola tra indirizzi; evita spazi superflui.
- Case‑insensitive: gli indirizzi non sono case sensitive, ma è buona norma mantenerli in minuscolo.
- Encoding: applica l’URL encoding ai parametri variabili; ad esempio, spazio →
%20
, apice →%27
, simbolo&
→%26
. - Compatibilità: preferisci gli schemi documentati
https://teams.microsoft.com
emsteams:/
per garantire il maggior supporto tra web, desktop e mobile. - Affidabilità: non fare affidamento su parametri non ufficiali o su comportamenti osservati in versioni precedenti del client.
Esempi pratici pronti da copiare
Chat singola via browser
https://teams.microsoft.com/l/chat/0/0?users=alessia.rossi@contoso.com
Chat di gruppo via browser
https://teams.microsoft.com/l/chat/0/0?users=alessia.rossi@contoso.com;marco.bianchi@contoso.com;giulia.verdi@contoso.com
Chat singola via app desktop
msteams:/l/chat/0/0?users=alessia.rossi@contoso.com
Snippet di encoding con JavaScript
// Testo da visualizzare a schermo per il copia-incolla dell'utente
const testo = "Ciao, possiamo sentirci alle 15:30?";
const encoded = encodeURIComponent(testo);
// encoded → Ciao%2C%20possiamo%20sentirci%20alle%2015%3A30%3F
Quando usare Graph, quando basta il deep‑link
Esigenza | Soluzione consigliata | Motivo |
---|---|---|
Aprire rapidamente una chat con persone note | Deep‑link https://teams.microsoft.com/... o msteams:/ | Zero codice, esperienza immediata, nessun permesso speciale. |
Precompilare o inviare automaticamente un messaggio | Microsoft Graph o bot/app | Solo le API consentono invii programmati con controllo, auditing e policy. |
Avviare conversazioni in un canale | Conversation deep‑link di canale | Supporto ufficiale per precompilare l’editor del canale. |
Esperimento o MVP senza back‑end | Deep‑link + testo da copiare | Soluzione rapida ma con UX meno fluida. |
Diagnostica e risoluzione dei problemi
- La chat non si apre: verifica che l’utente sia loggato nello stesso tenant previsto dal link; controlla eventuali estensioni del browser che bloccano protocolli personalizzati.
- Chat cross‑tenant bloccata: l’accesso esterno per la chat potrebbe essere disabilitato dal Teams Admin Center; contatta l’amministratore.
- Messaggio non precompilato: è il comportamento atteso nella nuova app; usa Graph o un bot per ottenere l’effetto desiderato.
- Link non riconosciuto su mobile: su alcune combinazioni di OS e app, il protocollo
msteams:/
potrebbe non essere associato; preferisci lo schema HTTPS. - Conflitti con profili multipli: se l’utente usa più account, il client potrebbe chiedere di scegliere; riduci l’attrito indicando chiaramente il contesto del link nella UI in cui lo pubblichi.
Accorgimenti di sicurezza e conformità
- Principio del minimo privilegio: se usi Graph o bot, richiedi solo le autorizzazioni strettamente necessarie.
- Audit e conservazione: l’invio programmatico rientra nei log di conformità; definisci un processo di retention coerente con le policy aziendali.
- Trasparenza verso l’utente: indica chiaramente quando un messaggio viene generato da un sistema e non digitato manualmente.
- Protezione da phishing: evita di generare link “opachi”; mostra sempre i destinatari e lo scopo del collegamento.
Domande frequenti
È possibile forzare la nuova app a rispettare il parametro message=
?
No. Il parametro è deprecato e la nuova app lo ignora per progetto.
Esiste un parametro alternativo documentato per il testo?
No per le chat private. Per i canali, il conversation deep‑link consente di precompilare l’editor della conversazione.
Posso usare un link per creare la chat e inviare un messaggio in un solo passaggio?
No. L’invio automatico richiede Graph, un bot o un’automazione server‑side/flow con le autorizzazioni adeguate.
Quali permessi servono con Graph?
Dipende dal modello (delegato o applicativo) e dal tipo di operazioni. In generale, sono necessarie deleghe/permessi della famiglia Chat.* e il consenso amministratore secondo le policy del tenant.
Posso menzionare utenti o includere allegati via Graph?
Sì, nel corpo del messaggio HTML/Markdown e con payload specifici per le menzioni; per gli allegati sono richiesti passaggi supplementari e formati supportati.
Checklist decisionale
- Serve solo aprire la chat con i destinatari corretti → usa deep‑link
https://teams.microsoft.com/...
omsteams:/
. - Serve anche il messaggio precompilato o inviato → implementa Graph o un bot/app.
- Il contesto è un canale e non una chat privata → usa conversation deep‑link di canale.
- Non hai back‑end né permessi admin → fornisci testo da copiare accanto al deep‑link.
Piano di adozione suggerito
- Mappatura dei casi d’uso: elenca dove usavi
message=
e che valore produceva. - Selezione della strategia: per ogni caso, scegli tra deep‑link semplice, Graph, bot o canale.
- Implementazione incrementale: parti dai flussi a più alto impatto; usa Power Automate per un MVP se non hai back‑end.
- Change management: comunica agli utenti il nuovo comportamento e aggiorna eventuali guide interne.
- Misurazione: raccogli feedback; se gli utenti faticano con il copia‑incolla, pianifica l’integrazione Graph.
Riferimenti rapidi
- Microsoft Teams – Deep link protocol → sezione “Create a deep link to a chat”.
- Microsoft Graph v1.0 – Chats → endpoint
POST /chats
ePOST /chats/{id}/messages
. - Roadmap ID 122486 → note sul deprecamento del parametro
message=
nella nuova app.
Riassunto finale
- Il vecchio parametro
&message=
non è più supportato nella nuova “Teams (work or school)”. - Non esiste un deep‑link pubblico che apra la chat e inserisca automaticamente il messaggio in una chat 1:1 o di gruppo.
- Le alternative efficaci passano da Microsoft Graph, un bot/app o, per i canali, dal conversation deep‑link.
- La scelta dipende da effort tecnico, policy del tenant e licenze disponibili; il deep‑link semplice resta ideale quando vuoi solo aprire la chat.
Esempi rapidi
// Chat 1:1 via HTTPS
https://teams.microsoft.com/l/chat/0/0?users=utente@dominio.com
// Chat di gruppo via HTTPS
[https://teams.microsoft.com/l/chat/0/0?users=utente1@dominio.com;utente2@dominio.com](https://teams.microsoft.com/l/chat/0/0?users=utente1@dominio.com;utente2@dominio.com)
// App desktop
msteams:/l/chat/0/0?users=[utente@dominio.com](mailto:utente@dominio.com)
Modello di richiesta Graph con curl
curl -X POST https://graph.microsoft.com/v1.0/chats \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"chatType": "oneOnOne",
"members": [
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": [],
"user@odata.bind": "https://graph.microsoft.com/v1.0/users('utente@dominio.com')"
},
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": [],
"user@odata.bind": "https://graph.microsoft.com/v1.0/users('operatore@dominio.com')"
}
]
}'
curl -X POST https://graph.microsoft.com/v1.0/chats/19:abcxyz@thread.v2/messages \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"body": {
"contentType": "html",
"content": "<p>Buongiorno, come posso aiutarti?</p>"
}
}'
Punti chiave: usa i deep‑link per navigare, le API per inviare messaggi. Evita scorciatoie non documentate; punta a soluzioni mantenibili che rispettino sicurezza e compliance.