Deep link de Microsoft Teams: abrir chat con mensaje prellenado (nuevo Teams, apps y autoenvío)

¿Quieres abrir un chat de Microsoft Teams desde un botón, correo o página web con un mensaje ya escrito? En esta guía profesional te explico el deep link correcto, por qué en el nuevo Teams no se “autoenvía” el texto, y qué alternativas existen para abrir apps o automatizar el envío de mensajes.

Índice

Resumen de la solución (versión corta)

Usa este deep link:

https://teams.microsoft.com/l/chat/0/0?users=<correo1[,correo2,...]>&message=<mensajeURLcodificado>
  • users: uno o varios correos (UPN) separados por comas.
  • message: el texto codificado en URL (UTF‑8). Ejemplos: espacio → %20, '%27, "%22, &%26, salto de línea → %0A.
  • Opcional: tenantId=<GUID> para forzar el inquilino (tenant) si gestionas varias cuentas.

Importante: en el nuevo Microsoft Teams (work or school) el enlace abre el chat y prellena el campo de redacción, pero no envía el mensaje de manera automática. El usuario debe pulsar Enter o hacer clic en Enviar. Si necesitas envío sin intervención, utiliza un bot, Microsoft Graph o Power Automate.

Cómo construir la URL paso a paso

  1. Elige los destinatarios
    Usa el UPN (correo) de cada usuario. Para varios destinatarios, sepáralos por comas. users=ana@contoso.com,juan@contoso.com Notas:
    • El chat solo abrirá si tus políticas lo permiten: misma organización o chat externo habilitado.
    • Para garantizar el contexto de una cuenta concreta, añade tenantId (ver más abajo).
  2. Prepara el mensaje
    Debe estar codificado como URL (UTF‑8). Ejemplos comunes: CarácterCódigoCarácterCódigo Espacio%20Comillas dobles (")%22 Comillas simples (')%27Y comercial (&)%26 Signo de interrogación (?)%3FIgual (=)%3D Más (+)%2BComa (,)%2C (si va en el mensaje) Salto de línea%0AArroba (@)%40 (solo si está en el mensaje)
  3. Forzar el tenant (opcional pero recomendado)
    Si gestionas varias cuentas o tenants, especifica el inquilino para evitar que el deep link abra en la cuenta equivocada. tenantId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
  4. Arma el enlace final https://teams.microsoft.com/l/chat/0/0?users=ana@contoso.com&message=Hola%20Ana%2C%20%C2%BFvemos%20el%20informe%20hoy%3F&tenantId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

Ejemplos listos para copiar

Chat 1:1 con mensaje simple

https://teams.microsoft.com/l/chat/0/0?users=usuario@contoso.com&message=Probando%20el%20deep%20link

Chat 1:1 con comillas y ampersand

https://teams.microsoft.com/l/chat/0/0?users=usuario@contoso.com&message=Revisi%C3%B3n%20de%20contrato%3A%20%22Plan%20A%22%20%26%20%22Plan%20B%22

Chat grupal (varios destinatarios)

https://teams.microsoft.com/l/chat/0/0?users=ana@contoso.com,juan@contoso.com,luis@fabrikam.com&message=Equipo%3A%20arrancamos%20a%20las%209%3F

Mensaje con salto de línea y emojis

https://teams.microsoft.com/l/chat/0/0?users=ana@contoso.com&message=Hola%20Ana%0AReuni%C3%B3n%20a%20las%2011%20%E2%9C%85

Forzando tenant

https://teams.microsoft.com/l/chat/0/0?users=usuario@contoso.com&message=Probando%20tenant&tenantId=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

¿Por qué no se “autoenvía” el mensaje en el nuevo Microsoft Teams?

El nuevo Teams (work or school) refuerza el principio de intención del usuario: los deep links están pensados para navegación y prellenado, no para ejecutar acciones sin confirmación explícita. Por diseño, la interfaz exige que el usuario pulse Enter o haga clic en Enviar. Aunque en algunos escenarios de Teams clásico parecía que el texto “se enviaba solo”, aquello no era un comportamiento soportado oficialmente y podía depender del cliente, la plataforma o la secuencia de enfoque. En la versión nueva, ese atajo ya no aplica.

Si tu caso de uso requiere envío sin interacción del usuario, debes usar un bot de Teams, Microsoft Graph o un flujo en Power Automate que envíe el mensaje en nombre de la aplicación (con permisos y consentimiento adecuados).

Guía práctica de codificación de URL (UTF‑8)

Para evitar errores, no intentes “a mano” reemplazar caracteres; utiliza funciones nativas de cada lenguaje para codificar el texto.

JavaScript (navegador o Node.js)

const users = "ana@contoso.com,juan@contoso.com";
const rawMessage = `Hola Ana y Juan:
¿revisamos el presupuesto hoy? "Plan A" & "Plan B"`;
const url = `https://teams.microsoft.com/l/chat/0/0?users=${users}&message=${encodeURIComponent(rawMessage)}`;
console.log(url);

C#

using System;
using System.Net;

var users = "[ana@contoso.com](mailto:ana@contoso.com)";
var rawMessage = "Hola Ana, ¿te va bien a las 15:30? "Plan A" & "Plan B"";
var url = \$"[https://teams.microsoft.com/l/chat/0/0?users={users}&message={WebUtility.UrlEncode(rawMessage)}](https://teams.microsoft.com/l/chat/0/0?users={users}&message={WebUtility.UrlEncode%28rawMessage%29})";
Console.WriteLine(url);

Python

from urllib.parse import quote

users = "[ana@contoso.com](mailto:ana@contoso.com)"
raw\_message = "Hola Ana\nTe envío el enlace del informe ✅"
url = f"[https://teams.microsoft.com/l/chat/0/0?users={users}&message={quote(raw\message](https://teams.microsoft.com/l/chat/0/0?users={users}&message={quote%28rawmessage), safe='')}"
print(url)

PowerShell

$users = "ana@contoso.com"
$raw = "Hola Ana, ¿lo vemos hoy? ""Plan A"" & ""Plan B"""
$msg = [uri]::EscapeDataString($raw)
$url = "https://teams.microsoft.com/l/chat/0/0?users=$users&message=$msg"
$url

Buenas prácticas y límites recomendados

  • Mantén la URL corta: la mayoría de navegadores y clientes toleran URLs largas, pero evita superar ~2000 caracteres para no chocar con límites de correo, CMS o proxies.
  • Codifica todo el mensaje con URL encoding en UTF‑8. Evita incluir JSON sin codificar dentro de message.
  • Prueba con mensajes simples si el prellenado falla. Luego añade gradualmente caracteres especiales para detectar el que rompe.
  • Confirma políticas: si el destinatario es externo y el chat no abre, revisa si tu organización permite mensajería con externos.
  • Especifica tenantId cuando haya múltiples cuentas abiertas en el mismo navegador.

¿Puedo abrir una app dentro del chat con un mensaje prellenado?

No existe un deep link universal que abra una app dentro de un chat y además envíe un mensaje ya escrito. Las alternativas dependen del tipo de app:

Bot (conversacional)

  • Apunta el deep link al bot como destinatario en users (si tu bot admite chat directo). El message se prellenará y el usuario podrá enviarlo.
  • Para envío automático o lógica de negocio al llegar el mensaje, implementa el bot para procesar el texto y responder.

Aplicación personal o pestaña (tab)

Usa el deep link de entidad para abrir tu app y pasar datos en context (la app decide cómo interpretarlos):

https://teams.microsoft.com/l/entity/{appId}/{entityId}?context=%7B%22initMessage%22%3A%22Hola%20desde%20un%20deep%20link%22%2C%22source%22%3A%22landing%22%7D

Este patrón abre la app con contexto; no escribe ni envía un mensaje en el chat. Es útil para prefijar formularios o vistas internas.

Extensiones de mensajería (Message Extensions)

Actualmente no hay un deep link soportado para invocarlas con contenido predefinido. Si necesitas insertar contenido en el composer de chat de forma programática, apóyate en un bot o en Graph.

Cuando de verdad necesitas autoenvío

Las opciones soportadas pasan por automatizar desde el lado del servidor o de un flujo:

Microsoft Graph (envío programático)

Flujo tipo:

  1. Resuelve o crea el chat (1:1 o grupal).
  2. Envía el mensaje con permisos adecuados.
POST https://graph.microsoft.com/v1.0/chats/{chatId}/messages
Content-Type: application/json

{
"body": {
"contentType": "html",
"content": "Hola equipo, este mensaje lo envía un proceso automatizado."
}
}

Necesitarás la aplicación registrada con los permisos y consentimientos correspondientes (delegados o de aplicación) y cumplir con las políticas de tu organización.

Bot de Teams

Un bot puede iniciar chats (según políticas), recibir eventos y enviar mensajes proactivos tras un disparador (p. ej., un webhook o una tarea de backend). Es la vía más flexible para automatizar conversación con contexto.

Power Automate

Los conectores disponibles permiten enviar mensajes de Teams como parte de un flujo, útil para casos de integración no desarrollados a medida.

Diagnóstico: problemas comunes y soluciones

SíntomaCausa probableSolución
El chat abre, pero el cuadro aparece vacío.message no está codificado; comillas o & rompieron la query.Usa encodeURIComponent / UrlEncode y vuelve a probar con un texto simple.
Abre una cuenta/tenant equivocado.Tienes varias sesiones activas.Añade tenantId=<GUID> al deep link.
No abre el chat con un externo.Políticas de chat externo deshabilitadas.Verifica con TI si está permitido el chat con dominios externos.
En móvil, el mensaje se prellena pero no se envía.Diseño intencional del nuevo cliente.El usuario debe pulsar Enviar; para autoenvío, usa Graph/bot/Power Automate.
La URL funciona en navegador A, pero no en B.Restricciones de longitud o plugins.Acorta el mensaje o usa un redireccionador interno; evita superar ~2000 caracteres.

Patrones de implementación habituales

Botón en una intranet o aplicación web

<a href="https://teams.microsoft.com/l/chat/0/0?users=ventas@contoso.com&message=Necesito%20apoyo%20con%20el%20cliente%20ACME" target="_blank" rel="noopener">Chatear con Ventas en Teams</a>
  • target: abre en nueva pestaña (el cliente redirigirá al escritorio o web).
  • rel: seguridad al abrir nuevas ventanas.

Enlace en un email

Pega el deep link como hipervínculo en el cuerpo del correo. Ten en cuenta clientes que recortan URLs largas; considera acortadores internos (no externos si no están aprobados).

QR en cartelería interna

Convierte el deep link en QR para que empleados escaneen y abran un chat de soporte con texto predefinido (por ejemplo, “Problema en sala X”).

Variantes útiles

Mensajes multilínea y plantillas

const plantilla = [
  "Hola equipo,",
  "comparto el enlace al reporte:",
  "https://example.contoso/reporte/123",
  "¿Comentarios?"
].join("\n");
const url = "https://teams.microsoft.com/l/chat/0/0?users=equipo@contoso.com&message=" + encodeURIComponent(plantilla);

Marcadores con parámetros dinámicos

Rellena partes del mensaje desde tu aplicación antes de codificarlo:

const msj = `Pedido ${pedidoId} listo. Cliente: ${cliente}. Total: ${total} €`;
const url = `https://teams.microsoft.com/l/chat/0/0?users=logistica@contoso.com&message=${encodeURIComponent(msj)}`;

Comparativa: Teams clásico vs. nuevo Teams

AspectoTeams clásicoNuevo Teams (work or school)
Deep link de chatPrellena el composer.Prellena el composer.
Autoenvío del mensajeNo soportado oficialmente; algunos clientes parecían “autoenviar” en casos puntuales.No soportado; requiere acción explícita del usuario.
Contexto multi‑tenantPuede cambiar con la sesión activa.Recomendado incluir tenantId para evitar ambigüedad.
Compatibilidad móvilPrellenado.Prellenado.

Checklist rápido antes de publicar tu enlace

  • [ ] Usas users= y message= en la URL.
  • [ ] El mensaje está codificado en UTF‑8 (encodeURIComponent, UrlEncode, etc.).
  • [ ] Confirmaste políticas de chat (interno/externo).
  • [ ] Añadiste tenantId= si hay varias cuentas.
  • [ ] Probaste con un mensaje simple y luego con caracteres especiales.
  • [ ] Asumiste que el nuevo Teams no autoenvía (si necesitas autoenvío, usa Graph/bot/Power Automate).

Plantilla “copiar y pegar”

https://teams.microsoft.com/l/chat/0/0?users=<correo1[,correo2,...]>&message=<mensajeURLcodificado>[&tenantId=<GUID>]

Rellena los corchetes con tus datos, quita los corchetes y asegúrate de codificar el mensaje.

Preguntas frecuentes (FAQ)

¿Puedo usar nombres en lugar de correos en users?
Usa el UPN (correo) del usuario para mayor fiabilidad.

¿Puedo abrir un chat de canal (no 1:1/grupal) con el mensaje prellenado?
El deep link de chat /l/chat es para 1:1 o grupal. Para canales, utiliza los deep links de canal/publicación; no hay autoenvío desde un enlace.

¿Funciona con cuentas personales (Microsoft personal)?
La experiencia descrita está orientada a work or school. En cuentas personales la compatibilidad puede variar.

¿Puedo prefijar menciones (@menciones) en el mensaje?
Puedes incluir el texto @Ana en el message, pero no generará una mención enriquecida hasta que el usuario la confirme o el cliente la resuelva manualmente.

¿Hay un parámetro para enviar adjuntos?
No desde un deep link. Los adjuntos requieren interacción del usuario o automatización vía Graph/bot.

Seguridad y cumplimiento

  • El prellenado respeta la intención del usuario; no se ejecuta envío sin consentimiento.
  • El autoenvío programático debe cumplir permisos y auditoría: usa Graph o bots, con el mínimo privilegio necesario.
  • Evita incluir datos sensibles sin cifrar en la URL; recuerda que las URLs pueden quedar en historiales y logs.

Resumen final

  • Deep link correcto: /l/chat/0/0?users=...&message=...; codifica el mensaje.
  • Nuevo Teams: no autoenvía; requiere acción explícita.
  • Apps en el chat: no hay un enlace universal que abra una app y además envíe texto; usa deep links de entidad para pasar contexto o bots/Graph para automatizar.
Índice