Aracılığıyla paylaş


Ön saha çalışanları vardiya dışındayken Microsoft Teams'e erişimi sınırlama

Genel bakış

Çalışma zamanı, yöneticilerin Android ve iOS mobil cihazlarda vardiyalı çalışanlar için Microsoft Teams'e erişimi sınırlamasına olanak tanıyan bir özelliktir. Bu denetimler, ön cephe çalışanları için kendi cihazını getir (KCG) veya şirkete ait ayrılmış cihaz senaryoları için tasarlanmıştır. Ön cephe cihaz senaryoları hakkında daha fazla bilgi edinin.

Bu özellik sayesinde Teams'e erişimi engelleyebilir veya vardiya dışında olan ön cephe çalışanları Teams'i açtığında bir uyarı iletisi gösterebilirsiniz. Aşağıdakiler durumunda ön cephe iş gücünüz için çalışma süresini etkinleştirmeyi göz önünde bulundurun:

  • Ön cephe çalışanlarının iş uygulamalarına erişmeleri durumunda çalışma saatleri dışında ödeme istemesinden endişe duyuyorsunuz.
  • Yerel yasalar ve düzenlemeler, çalışanlar vardiya dışı olduğunda iş uygulamalarına erişimi kısıtlamanızı gerektirir.

Nasıl çalışır?

Bir ön çalışan vardiyasına gidip Teams'i açtığında, uygulama çalışanın vardiyasında mı yoksa vardiya dışında mı olduğunu denetler.

  • Çalışan vardiyadaysa Teams'e erişebilir.
  • Teams açıkken çalışan vardiya dışındaysa çalışan bir blok veya uyarı ekranı görür.
    • Bir blok ekranı yapılandırdıysanız çalışan vardiyasına gelene kadar Teams'e erişemez.
    • Bir uyarı ekranı yapılandırdıysanız çalışan bu ekranı kapatabilir ve Teams'in kendi takdirine bağlı olarak kullanılıp kullanılmayacağını seçebilir.
  • Çalışan, çıkış yaparken Teams kullanıyorsa, çalışan çıkış yaptıktan sonra uygulama için bir blok veya uyarı ekranı görür.

Erişim engelleme ekranının ve uyarı ekranının ekran görüntüsü.

Çalışma süresiyle birlikte, çalışanlar vardiya dışındayken Teams bildirimlerini otomatik olarak kapatmak için sessiz zaman ayarlamanızı öneririz.

Çalışma zamanını ayarlama

Ön cephenizde çalışma süresini etkinleştirmek için bu adımları izleyin.

Android ve iOS için uygulama koruma ilkelerini yapılandırma

Android ve iOS cihazlarda Teams erişimini engellemek veya uyarmak için çalışma zamanını yapılandırmak için Microsoft Intune uygulama koruma ilkelerini kullanın. İlke ayarları hakkında daha fazla bilgi için bkz:

İş gücü yönetim sisteminizi (WFM) workingTimeSchedule API'sine bağlama

Uygulama oluşturma

  1. workingTimeSchedule Graph API için Microsoft Entra bir uygulama oluşturun.

    Uygulamanızı kaydederken, uygulamayı yalnızca kiracınızdaki kullanıcıların kullanabilmesi için Yalnızca bu kuruluş dizinindeki hesaplar (Tek kiracı) seçeneğini belirlediğinizden emin olun. Daha fazla bilgi için bkz. Uygulamayı Microsoft kimlik platformu kaydetme.

  2. Gerekli kapsamı Schedule-WorkingTime.ReadWrite.Allkullanarak Graph API çağırmak için gizli uygulama iznini ekleyin.

    1. Azure portal uygulamanızda oturum açın.

    2. Bildirim sekmesine gidin. Uygulamanızın tam tanımını içeren bir JSON görürsünüz.

    3. Bildirimin sonuna özelliğini ekleyin requiredResourceAccess .

      Bu özellik, uygulamanızın erişmesi gereken izin kümesini belirtir. Başka bir deyişle, uygulamanızın çağırabileceği tüm API'leri içerir. Bu özellik bildirimde zaten varsa, API'nizin bu özelliğe zaten verilmiş bazı izinleri vardır.

    4. Dizinin içine requiredResourceAccess , Graph uygulamasının 00000003-0000-0000-0000-c000-0000000000000000 izinlerini belirtmek için kimliğine sahip bir nesne ekleyin.

      Dizinizin requiredResourceAccess içinde aynı kimliği taşıyan bir nesneniz zaten varsa, yalnızca diziye aşağıdakileri resourceAccess eklemeniz gerekir:

      • Yeni gizli iznin kimliğine sahip bir nesne, 0b21c159-dbf4-4dbb-a6f6-490e412c716e.
      • İzin türü. Bu durumda, Role.

      Bildirimin sonunun nasıl görünebileceğine ilişkin bir örnek aşağıda verilmişti:

      {
        ...
        "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
      }
      
    5. Değişiklikleri kaydedin.

Bu adımı gerçekleştirmek için kiracı yöneticisi olmanız gerekir.

  1. Tarayıcınızda ; response_type=code&scope=https://graph.microsoft.com/.default adresine gidinhttps://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={ClientAppId}&.
  2. URL'de değerini uygulama kimliğiniz ile değiştirin ClientAppId .
  3. Onay iletişim kutusunda, uygulama için yeni gizli izin için kiracı genelinde yönetici onayı vermek için Kabul Et'i seçin.

Uygulamadan Graph çağrısı

C# dilinde örnek kod kullanarak uygulamadan Graph uç noktalarını çağırma burada anlatılmıştır.

  1. .NET 6 veya .NET 7 SDK'sı kullanarak yeni bir konsol projesi oluşturun.

  2. Microsoft.Identity.Client NuGet paketini yükleyin.

  3. program.cs dosyasını açın ve aşağıdaki örnek kodu kopyalayıp yapıştırın:

        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();
    
  4. Kodda aşağıdakileri değiştirin:

    • tenantId: değerini kiracı kimliğiniz ile değiştirin.
    • clientId: değerini uygulamanızın kimliğiyle değiştirin.
    • clientSecret: Uygulamanızın kimlik doğrulaması bölümüne bir istemci gizli dizisi eklemeniz gerekir. Ayrıca bir güvenlik sertifikası kullanmayı ve kodu buna göre değiştirmeyi de seçebilirsiniz.
    • userId: değerini inWorkingTime veya outOfWorkingTime ilkesini uygulamak istediğiniz kullanıcıyla değiştirin.

Sessiz zaman ayarlama

Bu adım isteğe bağlıdır ancak önerilir.

çalışma dışı saatlerde ön hat çalışanları için Teams bildirimlerini otomatik olarak kapatmak için Intune sessiz zaman ilkelerini yapılandırın. Sessiz zaman ilkeleri oluşturma hakkında daha fazla bilgi edinin.

Sık sorulan sorular

Bu özellikten yararlanmak için Teams'de Vardiyalar uygulamasını kullanmam gerekiyor mu?

Hayır, bu özellik WFM gelen/giden saate dayanır.

Yerinde bir saat giriş/çıkış sistemim yoksa çalışma süresini kullanabilir miyim?

Hayır, bu özelliği kullanmak için bir saat giriş/çıkış sinyali gereklidir.