Importar mensajes de plataformas de terceros a Teams con Microsoft Graph
Con Microsoft Graph, puede migrar el historial de mensajes y los datos ya existentes de los usuarios de un sistema externo a un canal de Teams. Al habilitar la recreación de una jerarquía de mensajería de plataforma de terceros dentro de Teams, los usuarios pueden continuar sus comunicaciones sin problemas y continuar sin interrupciones.
Nota:
En el futuro, Microsoft puede solicitarle a usted o a sus clientes que paguen tarifas adicionales en función de la cantidad de datos que se importen.
Introducción a la importación
En un nivel alto, el proceso de importación consta de lo siguiente:
- Crear un equipo con una marca de tiempo back-in-time.
- Crear un canal con una marca de tiempo back-in-time.
- Importar mensajes externos con fecha de back-in-time.
- Completar el proceso de migración de equipos y canales.
- Agregar miembros del equipo.
Requisitos previos
Análisis y preparación de datos de mensajes
- Revise los datos de terceros para decidir qué se migra.
- Extraiga los datos seleccionados del sistema de chat de terceros.
- Asigne la estructura de chat de terceros a la estructura de Teams.
- Convierta los datos de importación en el formato necesario para la migración.
Configurar el espacio empresarial de Microsoft 365.
- Asegúrese de que existe un inquilino de Microsoft 365 para los datos de importación. Para obtener más información sobre cómo configurar un inquilino de Microsoft 365 para Teams, consulte Preparación del inquilino de Microsoft 365.
- Asegúrese de que los miembros del equipo estén en Microsoft Entra ID. Para obtener más información, vea Agregar un nuevo usuario a Microsoft Entra ID.
Paso 1: Crear un equipo
Puesto que está migrando datos ya existentes, mantener las marcas de tiempo de los mensajes originales y evitar la actividad de mensajería durante el proceso de migración es clave para volver a crear el flujo de mensajes ya existente del usuario en Teams. Esto se consigue de la siguiente manera:
Cree un nuevo equipo con una marca de tiempo back-in-time mediante la propiedad
createdDateTime
de recursos de equipo. Coloque el nuevo equipo enmigration mode
, un estado especial que restringe a los usuarios de la mayoría de las actividades dentro del equipo hasta que se complete el proceso de migración. Incluya el atributo de instanciateamCreationMode
con el valormigration
en la solicitud POST para identificar explícitamente el nuevo equipo como creado para la migración.
Nota:
El createdDateTime
campo solo se rellena para las instancias de un equipo o canal que se migran.
Permiso
ScopeName | DisplayName | Descripción | Tipo | ¿Consentimiento del administrador? | Entidades o API cubiertas |
---|---|---|---|---|---|
Teamwork.Migrate.All |
Administrar la migración a Microsoft Teams | Crear y administrar recursos para la migración a Teams. | Aplicación solamente | Sí | POST /teams |
Solicitud (crear un equipo en estado de migración)
POST https://graph.microsoft.com/v1.0/teams
Content-Type: application/json
{
"@microsoft.graph.teamCreationMode": "migration",
"template@odata.bind": "https://graph.microsoft.com/v1.0/teamsTemplates('standard')",
"displayName": "My Sample Team",
"description": "My Sample Team’s Description",
"createdDateTime": "2020-03-14T11:22:17.043Z"
}
Respuesta
HTTP/1.1 202 Accepted
Location: /teams/{team-id}/operations/{operation-id}
Content-Location: /teams/{team-id}
Mensaje de error
400 Bad Request
Puede recibir el mensaje de error en los escenarios siguientes:
- Si
createdDateTime
se establece para el futuro. - Si
createdDateTime
se especifica correctamente, peroteamCreationMode
atributo de instancia falta o se establece en un valor no válido.
Paso 2: Crear un canal
La creación de un canal para los mensajes importados es similar al escenario de creación de equipo:
Cree un nuevo canal con una marca de tiempo de back-in-time mediante la propiedad
createdDateTime
de recursos del canal. Coloque el nuevo canal enmigration mode
, un estado especial que restringe a los usuarios de la mayoría de las actividades de chat dentro del canal hasta que se complete el proceso de migración. Incluya el atributo de instanciachannelCreationMode
con el valormigration
en la solicitud POST para identificar explícitamente el nuevo equipo como creado para la migración.
Permiso
ScopeName | DisplayName | Descripción | Tipo | ¿Consentimiento del administrador? | Entidades o API cubiertas |
---|---|---|---|---|---|
Teamwork.Migrate.All |
Administrar la migración a Microsoft Teams | Crear y administrar recursos para la migración a Teams. | Aplicación solamente | Sí | POST /teams |
Solicitud (crear un canal en estado de migración)
POST https://graph.microsoft.com/v1.0/teams/{team-id}/channels
Content-Type: application/json
{
"@microsoft.graph.channelCreationMode": "migration",
"displayName": "Architecture Discussion",
"description": "This channel is where we debate all future architecture plans",
"membershipType": "standard",
"createdDateTime": "2020-03-14T11:22:17.047Z"
}
Respuesta
HTTP/1.1 202 Accepted
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#teams('team-id')/channels/$entity",
"id":"id-value",
"createdDateTime":null,
"displayName":"Architecture Discussion",
"description":"This channel is where we debate all future architecture plans",
"isFavoriteByDefault":null,
"email":null,
"webUrl":null,
"membershipType":null,
"moderationSettings":null
}
Mensaje de error
400 Bad Request
Puede recibir el mensaje de error en los escenarios siguientes:
- Si
createdDateTime
se establece para el futuro. - Si
createdDateTime
se especifica correctamente pero atributo de instanciachannelCreationMode
falta o se establece en un valor no válido.
Paso 3: Importar mensajes
Una vez creado el equipo y el canal, puede empezar a enviar mensajes en tiempo atrás mediante las createdDateTime
claves y from
en el cuerpo de la solicitud.
Nota:
- No se admiten los mensajes importados con
createdDateTime
anteriores al subproceso de mensajecreatedDateTime
. -
createdDateTime
debe ser único en todos los mensajes del mismo subproceso. -
createdDateTime
admite marcas de tiempo con precisión de milisegundos. Por ejemplo, si el mensaje de solicitud entrante tiene el valor decreatedDateTime
establecido como 2020-09-16T05:50:31.0025302Z, se convertiría a 2020-09-16T05:50:31.002Z cuando se ingiera el mensaje.
Solicitud (mensaje POST que es de solo texto)
POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/messages
{
"createdDateTime":"2019-02-04T19:58:15.511Z",
"from":{
"user":{
"id":"id-value",
"displayName":"Joh Doe",
"userIdentityType":"aadUser"
}
},
"body":{
"contentType":"html",
"content":"Hello World"
}
}
Respuesta
HTTP/1.1 200 OK
{
"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#teams('team-id')/channels('channel-id')/messages/$entity",
"id":"id-value",
"replyToId":null,
"etag":"id-value",
"messageType":"message",
"createdDateTime":"2019-02-04T19:58:15.58Z",
"lastModifiedDateTime":null,
"deleted":false,
"subject":null,
"summary":null,
"importance":"normal",
"locale":"en-us",
"policyViolation":null,
"from":{
"application":null,
"device":null,
"conversation":null,
"user":{
"id":"id-value",
"displayName":"Joh Doe",
"userIdentityType":"aadUser"
}
},
"body":{
"contentType":"html",
"content":"Hello World"
},
"attachments":[
],
"mentions":[
],
"reactions":[
]
}
Mensaje de error
400 Bad Request
Solicitud (PUBLICAR un mensaje con imagen alineada)
Nota:
- No hay ningún ámbito de permiso especial en este escenario, ya que la solicitud forma parte de
chatMessage
. - Los ámbitos de
chatMessage
se aplican aquí.
POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/messages
{
"body": {
"contentType": "html",
"content": "<div><div>\n<div><span><img height=\"250\" src=\"../hostedContents/1/$value\" width=\"176.2295081967213\" style=\"vertical-align:bottom; width:176px; height:250px\"></span>\n\n</div>\n\n\n</div>\n</div>"
},
"hostedContents":[
{
"@microsoft.graph.temporaryId": "1",
"contentBytes": "iVBORw0KGgoAAAANSUhEUgAAANcAAAExCAYAAADvFzeeAAAXjklEQVR4Ae2d/XNU1RnH+9e0FFrA0RCIyaS8hRA0HV5KbS1gHRgVpjMClY4GHJ3yYm1HCmXaWttaaZUZtIIFKYi8lFAkvOQ9u5vN225IARVBbX9/Os9NbrLZbMjmhCfJPX5+2Lmb3T25y3O+n/M599x7w9f+++UXwoMakIF7n4GvUdR7X1RqSk01A8CFuZm5GGUAuIwKi72wF3ABF+YyygBwGRUWc2Eu4AIuzGWUAeAyKizmwlzABVyYyygDwGVUWMyFuYALuDCXUQaAy6iwmAtzARdwfWXMdeuzT+TGxz3Sfb1LunrapL07IW3pePDQ5/qavqef0c+OdYAELuAac4jGGkLL9rdvfyo9N9ODQAqBGmmrwGlb/R0u3xG4gMspOC5hG882CoRaaCSA8n1ff9doIQMu4PIOrus3u+8ZVNnw6e/Od5AALuDKOyz5hmqiPnfnzi1J9bSbgRWCpvvQfY307wQu4BoxJCOFaDK8rwsQmQsUIQhWW93XSIsewAVckYdLQ24F0Ui/926AARdwRRounZ6Np7GyYdN9DzdFBC7gijRc43GMlQ1U9s/6HXJNjYELuHI<<-----Removed----->>>>",
"contentType": "image/png"
}
]
}
Respuesta
HTTP/1.1 200 OK
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#teams('team-id')/channels('channel-id')/messages/$entity",
"id": "id-value",
"replyToId": null,
"etag": "id-value",
"messageType": "message",
"createdDateTime": "2019-02-04T19:58:15.511Z",
"lastModifiedDateTime": null,
"deleted": false,
"subject": null,
"summary": null,
"importance": "normal",
"locale": "en-us",
"policyViolation": null,
"from": {
"application": null,
"device": null,
"conversation": null,
"user": {
"id": "id-value",
"displayName": "Joh Doe",
"userIdentityType": "aadUser"
}
},
"body": {
"contentType": "html",
"content": "<div><div>\n<div><span><img height=\"250\" src=\"https://graph.microsoft.com/teams/teamId/channels/channelId/messages/id-value/hostedContents/hostedContentId/$value\" width=\"176.2295081967213\" style=\"vertical-align:bottom; width:176px; height:250px\"></span>\n\n</div>\n\n\n</div>\n</div>"
},
"attachments": [],
"mentions": [],
"reactions": []
}
Paso 4: Completar el modo de migración
Una vez completado el proceso de migración de mensajes, tanto el equipo como el canal se quitan del modo de migración mediante el completeMigration
método . Este paso abre los recursos del equipo y del canal para que los usen los miembros del equipo con carácter general. La acción se enlaza a la instancia team
. Antes de que el equipo finalice, todos los canales deben completarse fuera del modo de migración.
Solicitud (modo de migración de canal final)
POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/completeMigration
Respuesta
HTTP/1.1 204 NoContent
Solicitud (finalizar el modo de migración del equipo)
POST https://graph.microsoft.com/v1.0/teams/team-id/completeMigration
Respuesta
HTTP/1.1 204 NoContent
Acción llamada en team
o channel
que no esté en migrationMode
.
Paso 5: Agregar miembros del equipo
Puede agregar un miembro a un equipo mediante la interfaz de usuario de Teams o la API de Microsoft Graph agregar miembros:
Solicitud (agregar miembro)
POST https://graph.microsoft.com/beta/teams/{team-id}/members
Content-type: application/json
Content-length: 30
{
"@odata.type": "#microsoft.graph.aadUserConversationMember",
"roles": [],
"user@odata.bind": "https://graph.microsoft.com/beta/users/{user-id}"
}
Respuesta
HTTP/1.1 204 No Content
Sugerencias e información adicional
Una vez realizada la solicitud de
completeMigration
, no podrá importar más mensajes al equipo.Solo puede agregar miembros del equipo al nuevo equipo después de que la solicitud de
completeMigration
haya devuelto una respuesta correcta.Limitación: los mensajes se importan a cinco RPS por canal.
Si necesita realizar una corrección en los resultados de la migración, debe eliminar el equipo, repetir los pasos para crear el equipo y el canal y volver a migrar los mensajes.
Nota:
Las imágenes insertadas son el único tipo de medio compatible con el esquema de la API de mensaje de importación.
Importar ámbito de contenido
En la tabla siguiente se proporciona el ámbito de contenido:
Dentro del ámbito | Fuera del ámbito |
---|---|
Mensajes de equipo y canal | Mensajes de chat de grupo y 1:1 |
Hora de creación del mensaje original | Canales privados |
Imágenes alineadas como parte del mensaje | En menciones |
Vínculos a archivos ya existentes en SPO o OneDrive | Reacciones |
Mensajes con texto enriquecido | Vídeos |
Cadena de respuesta de mensajes | Anuncios |
Procesamiento de alto rendimiento | Fragmentos de código |
Adhesivos | |
Emojis | |
Ofertas | |
Publicaciones cruzadas entre canales | |
Canales compartidos |