Limitar o acesso ao Microsoft Teams quando os trabalhadores da linha da frente estão fora do turno
Visão Geral
O tempo útil é uma funcionalidade que permite aos administradores limitar o acesso ao Microsoft Teams para trabalhadores por turnos em dispositivos móveis Android e iOS. Estes controlos foram concebidos para cenários de dispositivos dedicados da empresa (BYOD) ou bring-your-own-device para trabalhadores de primeira linha. Saiba mais sobre cenários de dispositivos de primeira linha.
Com esta funcionalidade, pode bloquear o acesso ao Teams ou mostrar uma mensagem de aviso quando os trabalhadores de primeira linha que estão fora do turno abrem o Teams. Considere ativar o tempo útil para a sua força de trabalho de primeira linha se:
- Está preocupado com os trabalhadores de primeira linha que pedem pagamento fora do horário de trabalho se acederem a aplicações de trabalho.
- As leis e regulamentos locais exigem que restrinja o acesso a aplicações de trabalho quando os funcionários estão fora do turno.
Como funciona
Quando um trabalhador de primeira linha entra no seu turno e abre o Teams, a aplicação verifica se a função de trabalho está dentro ou fora do turno.
- Se a função de trabalho estiver no turno, pode aceder ao Teams.
- Se a função de trabalho estiver desativada quando o Teams estiver aberto, a função de trabalho verá um ecrã de bloqueio ou aviso.
- Se tiver configurado um ecrã de blocos, a função de trabalho não pode aceder ao Teams até aceder ao respetivo turno.
- Se tiver configurado um ecrã de aviso, a função de trabalho pode dispensá-lo e optar por utilizar o Teams a seu critério.
- Se uma função de trabalho estiver a utilizar o Teams durante o tempo limite, a função de trabalho vê um ecrã de bloqueio ou aviso para a aplicação depois de ter terminado.
Juntamente com o tempo útil, recomendamos que também configure o tempo de pausa para desativar automaticamente as notificações do Teams quando os trabalhadores estão fora do turno.
Configurar o tempo útil
Siga estes passos para ativar o tempo útil para a sua linha da frente.
Configurar políticas de proteção de aplicações para Android e iOS
Utilize Microsoft Intune políticas de proteção de aplicações para configurar o tempo útil para bloquear ou avisar o acesso ao Teams em dispositivos Android e iOS. Para obter mais informações sobre as definições de política, consulte:
- Definições da política de proteção de aplicações Android – Iniciação condicional
- Definições de política de proteção de aplicações iOS – Iniciação condicional
Ligar o sistema de gestão da força de trabalho (WFM) à API workingTimeSchedule
Criar uma aplicação
Crie uma aplicação no Microsoft Entra para a API do Graph workingTimeSchedule.
Quando registar a sua aplicação, certifique-se de que escolhe a opção Contas apenas neste diretório organizacional (Inquilino único), para que apenas os utilizadores no seu inquilino possam utilizar a aplicação. Para saber mais, veja Registar uma aplicação com o plataforma de identidade da Microsoft.
Adicione a permissão de aplicação oculta para chamar o API do Graph com o âmbito necessário,
Schedule-WorkingTime.ReadWrite.All
.Inicie sessão na sua aplicação no portal do Azure.
Aceda ao separador Manifesto . Verá um JSON que contém a definição completa da sua aplicação.
No final do manifesto, adicione a
requiredResourceAccess
propriedade .Esta propriedade especifica o conjunto de permissões a que a sua aplicação necessita de acesso. Por outras palavras, contém todas as APIs que a sua aplicação pode chamar. Se esta propriedade já estiver presente no manifesto, a API já tem algumas permissões concedidas.
Dentro da
requiredResourceAccess
matriz, adicione um objeto com um ID de00000003-0000-0000-0000-c000-0000000000000000
para especificar permissões da aplicação Graph.Se já tiver um objeto com este mesmo ID dentro da matriz
requiredResourceAccess
, só terá de adicionar o seguinte dentro daresourceAccess
matriz:- Um objeto com o ID da nova permissão oculta,
0b21c159-dbf4-4dbb-a6f6-490e412c716e
. - O tipo de permissão. Neste caso,
Role
.
Eis um exemplo do aspeto do fim do manifesto:
{ ... "preAuthorizedApplications": [], "publisherDomain": "microsoft.onmicrosoft.com", "replyUrlsWithType": [ { "url": "https://localhost:44321/signin-oidc", "type": "Web" }, { "url": "https://localhost:44321/", "type": "Web" } ], "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "0b21c159-dbf4-4dbb-a6f6-490e412c716e", "type": "Role" } ] } ], "samlMetadataUrl": null, "signInUrl": null, "signInAudience": "AzureADMyOrg", "tags": [], "tokenEncryptionKeyId": null }
- Um objeto com o ID da nova permissão oculta,
Salve as alterações.
Conceder consentimento do administrador ao nível do inquilino para a permissão oculta da aplicação
Você precisa ser um administrador de locatários para executar esta etapa.
- No browser, aceda a https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}& response_type=code&scope=https://graph.microsoft.com/.default.
- No URL, substitua pelo
ClientAppId
ID da aplicação. - Na caixa de diálogo de consentimento, selecione Aceitar para conceder consentimento do administrador ao nível do inquilino para a nova permissão oculta para a aplicação.
Chamar o Graph a partir da aplicação
Eis como chamar pontos finais do Graph da aplicação com código de exemplo em C#.
Crie um novo projeto de consola com o SDK .NET 6 ou .NET 7.
Instale o
Microsoft.Identity.Client
pacote NuGet.Abra o ficheiro program.cs e copie e cole o seguinte código de exemplo no mesmo:
using System.Text; using Microsoft.Identity.Client; var userId = "928bf23a-81e8-47c9-ad54-2c0206248afe"; var path = Path.Combine(Path.GetTempPath(), "workingTimeTokenGenerator.txt"); string? accessToken; if (!File.Exists(path) || (DateTime.UtcNow - new FileInfo(path).LastWriteTimeUtc).TotalMinutes > 59) { var clientId = "00001111-aaaa-2222-bbbb-3333cccc4444"; var clientSecret = "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2"; var tenantId = "cad3e174-69d3-4707-abd2-f527f45c367a"; var scopes = new string[] { "00000003-0000-0000-c000-000000000000/.default" }; var app = ConfidentialClientApplicationBuilder.Create(clientId) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(scopes) .WithAuthority(AzureCloudInstance.AzurePublic, tenantId) .ExecuteAsync(); accessToken = result.AccessToken; File.WriteAllText(path, accessToken); } else { accessToken = File.ReadAllText(path); } int number; while (true) { Console.WriteLine("Press 1 for startWorkingTime, 2 for endWorkingTime."); var choice = Console.ReadLine(); if (!Int32.TryParse(choice, out number) || !new[] { 1, 2}.Contains(number)) { Console.WriteLine("Out-of-range election."); continue; } break; } Console.WriteLine("Performing request..."); var httpClient = new HttpClient(); var message = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri($"https://graph.microsoft.com/beta/users/{userId}/solutions/schedule/{(number == 1 ? "startWorkingTime" : "endWorkingTime")}") }; message.Headers.Add("Authorization", $"Bearer {accessToken}"); message.Content = new StringContent("", Encoding.UTF8, "application/json"); var response = await httpClient.SendAsync(message); if (!response.IsSuccessStatusCode) { string? content = null; try { content = await response.Content?.ReadAsStringAsync(); } catch { } Console.WriteLine($"Graph returned a non success status code: {response.StatusCode}. Reason phrase: {response.ReasonPhrase}." + (content is null ? "Unable to get the response body." : $"Content: {content}")); } else { Console.WriteLine($"Graph returned a success status code: {response.StatusCode}."); } Console.WriteLine("Press any key to exit."); _ = Console.ReadKey();
No código, altere o seguinte:
-
tenantId
: substitua pelo seu ID de inquilino. -
clientId
: substitua pelo ID da sua aplicação. -
clientSecret
: tem de adicionar um segredo do cliente na secção de autenticação da sua aplicação. Também pode optar por utilizar um certificado de segurança e alterar o código em conformidade. -
userId
: substitua pelo utilizador ao qual pretende aplicar a política inWorkingTime ou outOfWorkingTime.
-
Configurar a hora de pausa
Este passo é opcional, mas recomendado.
Configure políticas de tempo de pausa no Intune para desativar automaticamente as notificações do Teams para trabalhadores de primeira linha durante o horário de descanso. Saiba mais sobre como criar políticas de tempo de pausa.
Perguntas frequentes
Preciso de utilizar a aplicação Turnos no Teams para tirar partido desta funcionalidade?
Não, esta funcionalidade depende do sinal de entrada/saída do relógio da sua WFM.
Posso utilizar o tempo útil se não tiver um sistema de entrada/saída?
Não, é necessário um sinal de entrada/saída do relógio para utilizar esta funcionalidade.