Importar mensagens de plataforma de terceiros para o Teams usando o Microsoft Graph
Com o Microsoft Graph, você pode migrar o histórico de mensagens e os dados existentes dos usuários de um sistema externo para um canal do Teams. Ao habilitar a recriação de uma hierarquia de mensagens de plataforma de terceiros dentro do Teams, os usuários podem continuar suas comunicações de maneira contínua e continuar sem interrupções.
Observação
No futuro, a Microsoft pode exigir que você ou seus clientes paguem taxas adicionais com base na quantidade de dados importados.
Visão geral da importação
Em um nível elevado, o processo de importação consiste no seguinte:
- Crie uma equipe com um carimbo de data/hora back-in-time.
- Crie um canal com um carimbo de data/hora back-in-time.
- Importe mensagens de back-in-time externas.
- Conclua o processo de migração de equipe e canal.
- Adicionar membros da equipe.
Pré-requisitos
Analisar e preparar dados de mensagem
- Reveja os dados de terceiros para decidir o que é migrado.
- Extraia os dados selecionados do sistema de chat de terceiros.
- Mapeie a estrutura de chat de terceiros para a estrutura do Teams.
- Converta os dados de importação no formato necessário para a migração.
Configure o locatário do Microsoft 365.
- Certifique-se de que existe um inquilino do Microsoft 365 para os dados de importação. Para obter mais informações sobre como configurar um inquilino do Microsoft 365 para o Teams, consulte Preparar o seu inquilino do Microsoft 365.
- Certifique-se de que os membros da equipa estão no ID do Microsoft Entra. Para obter mais informações, consulte Adicionar um novo utilizador ao ID do Microsoft Entra.
Etapa 1: Criar uma equipe
Como você está migrando dados existentes, manter os carimbos de data/hora da mensagem original e impedir a atividade de mensagens durante o processo de migração são fundamentais para recriar o fluxo de mensagens existente do usuário no Teams. Isso é feito da seguinte maneira:
Crie uma nova equipe com um carimbo de data/hora back-in-time usando a propriedade de recurso da
createdDateTime
equipe. Coloque a nova equipe emmigration mode
, um estado especial que restringe os usuários da maioria das atividades dentro da equipe até que o processo de migração seja concluído. Inclua oteamCreationMode
atributo de instância com omigration
valor na solicitação POST para identificar explicitamente a nova equipe como sendo criada para migração.
Observação
O createdDateTime
campo só é preenchido para instâncias de uma equipa ou canal que são migrados.
Permissão
ScopeName | DisplayName | Descrição | Tipo | Consentimento do administrador? | Entidades/APIs cobertas |
---|---|---|---|---|---|
Teamwork.Migrate.All |
Gerenciar a migração do Microsoft Teams | Criar e gerenciar recursos para migração ao Teams. | Somente aplicativo | Sim | POST /teams |
Solicitação (criar uma equipe no estado de migração).
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"
}
Resposta
HTTP/1.1 202 Accepted
Location: /teams/{team-id}/operations/{operation-id}
Content-Location: /teams/{team-id}
Mensagem de erro
400 Bad Request
Você pode receber a mensagem de erro nos seguintes cenários:
- Se
createdDateTime
estiver definido para o futuro. - Se
createdDateTime
estiver especificado corretamente, masteamCreationMode
o atributo da instância está ausente ou definido como um valor inválido.
Etapa 2: Criar um canal
A criação de um canal para as mensagens importadas é semelhante ao cenário de criação de equipe:
Crie um novo canal com um carimbo de data/hora back-in-time usando a propriedade de recurso de
createdDateTime
canal. Coloque o novo canal nomigration mode
, um estado especial que restringe os usuários da maioria das atividades de chat dentro do canal até que o processo de migração seja concluído. Inclua ochannelCreationMode
atributo de instância com omigration
valor na solicitação POST para identificar explicitamente a nova equipe como sendo criada para migração.
Permissão
ScopeName | DisplayName | Descrição | Tipo | Consentimento do administrador? | Entidades/APIs cobertas |
---|---|---|---|---|---|
Teamwork.Migrate.All |
Gerenciar a migração do Microsoft Teams | Criar e gerenciar recursos para migração ao Teams. | Somente aplicativo | Sim | POST /teams |
Solicitação (criar um canal no estado de migração)
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"
}
Resposta
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
}
Mensagem de erro
400 Bad Request
Você pode receber a mensagem de erro nos seguintes cenários:
- Se
createdDateTime
estiver definido para o futuro. - Se
createdDateTime
estiver especificado corretamente, maschannelCreationMode
o atributo da instância está ausente ou definido com um valor inválido.
Etapa 3: Importar mensagens
Após a criação da equipa e do canal, pode começar a enviar mensagens de back-in-time com as createdDateTime
teclas e from
no corpo do pedido.
Observação
- Não há suporte para mensagens importadas com o
createdDateTime
anterior ao thread de mensagemcreatedDateTime
. -
createdDateTime
deve ser exclusivo entre mensagens no mesmo thread. -
createdDateTime
dá suporte a carimbos de data/hora com precisão de milissegundos. Por exemplo, se a mensagem de solicitação de entrada tiver o valorcreatedDateTime
definido como 2020-09-16T05:50:31.0025302Z, em seguida, ela será convertida para 2020-09-16T05:50:31.002Z quando a mensagem for ingerida.
Solicitação (mensagem POST que é somente 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"
}
}
Resposta
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":[
]
}
Mensagem de erro
400 Bad Request
Solicitar (POSTAR uma mensagem com imagem embutida)
Observação
- Não há escopos de permissão especiais neste cenário, pois a solicitação faz parte de
chatMessage
. - Os escopos para
chatMessage
se aplicam aqui.
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"
}
]
}
Resposta
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": []
}
Etapa 4: concluir o modo de migração
Após a conclusão do processo de migração de mensagens, a equipa e o canal são retirados do modo de migração com o completeMigration
método . Esta etapa abre os recursos de equipe e canal para uso geral pelos membros da equipe. A ação está associada à team
instância. Antes que a equipe seja concluída, todos os canais devem ser concluídos fora do modo de migração.
Solicitação (modo de migração de canal final)
POST https://graph.microsoft.com/v1.0/teams/team-id/channels/channel-id/completeMigration
Resposta
HTTP/1.1 204 NoContent
Solicitação (modo de migração de equipe final)
POST https://graph.microsoft.com/v1.0/teams/team-id/completeMigration
Resposta
HTTP/1.1 204 NoContent
Ação chamada em um team
ou channel
que não está em migrationMode
.
Etapa cinco: Adicionar membros da equipe
Você pode adicionar um membro a uma equipe usando a interface do usuário do Teamsou a API do Microsoft Graph adicionar membro:
Solicitação (adicionar membro)
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}"
}
Resposta
HTTP/1.1 204 No Content
Dicas e informações adicionais
Depois que a solicitação
completeMigration
for feita, você não poderá importar mais mensagens para a equipe.Você só pode adicionar membros da equipe à nova equipe depois que a
completeMigration
solicitação tiver retornado uma resposta bem-sucedida.Limitação: as mensagens são importadas em cinco RPS por canal.
Se precisar de fazer uma correção para os resultados da migração, tem de eliminar a equipa, repetir os passos para criar a equipa e o canal e voltar a migrar as mensagens.
Observação
As imagens inline são o único tipo de suporte de dados suportado pelo esquema da API de mensagens de importação.
Importar escopo de conteúdo
A tabela a seguir fornece o escopo do conteúdo:
No escopo | Fora do âmbito |
---|---|
Mensagens de equipe e canal | 1:1 e mensagens de chat em grupo |
Hora de criação da mensagem original | Canais privados |
Imagens embutidas como parte da mensagem | Em menções |
Links para arquivos existentes no SPO ou OneDrive | Reações |
Mensagens com rich text | Vídeos |
Cadeia de resposta de mensagem | Anúncios |
Processamento de alta taxa de transferência | Trechos de código |
Adesivos | |
Emojis | |
Cotações | |
Postagens cruzada entre canais | |
Canais compartilhados |