Partager via


Créer une intégration personnalisée pour synchroniser votre système de gestion du personnel avec Shifts

Vue d’ensemble

Intégrez Shifts, l’application de gestion de planification dans Microsoft Teams, à votre système de gestion de la main-d’œuvre (WFM). Cette intégration permet à votre personnel de première ligne d’afficher et de gérer leurs plannings directement dans Shifts.

Cet article vous guide tout au long de la création d’un connecteur à l’aide de Microsoft API Graph pour faciliter cette intégration.

Vous pouvez configurer votre intégration pour une synchronisation de données unidirectionnelle ou bidirectionnelle.

  • Synchronisation unidirectionnelle (WFM système vers Shifts) : dans cette configuration, les données de planification de votre système WFM sont synchronisées avec Shifts. Le connecteur lit les données dans votre système WFM et les écrit dans Shifts. Toutefois, les modifications apportées dans Shifts par les utilisateurs ne sont pas répercutées dans votre système WFM.

  • Synchronisation bidirectionnelle (WFM système et Shifts) : cette configuration permet une synchronisation bidirectionnelle. Les données de planification dans votre système de WFM sont synchronisées avec Shifts, et toutes les modifications apportées dans Shifts par les utilisateurs sont resynchronisées avec votre système WFM. Le connecteur valide et approuve les modifications apportées par les utilisateurs dans Shifts en fonction des règles d’entreprise appliquées par votre système WFM avant que les modifications ne soient écrites dans Shifts.

Remarque

Si vous utilisez UKG Pro WFM, Blue Yonder WFM ou Reflexis WFM, vous pouvez également utiliser un connecteur managé pour intégrer Shifts à votre système WFM. Pour plus d’informations, consultez Connecteurs Shifts.

Terminologie utilisée dans cet article

Term Description
connecteur Application qui synchronise les données de planification entre votre système WFM et Shifts.
intégration de la main-d’œuvre Entité qui définit la méthode de chiffrement pour la communication, l’URL de rappel de votre connecteur et les entités Shifts à synchroniser.

Avant de commencer

Configuration requise

  • Déterminez les données que vous souhaitez synchroniser en fonction des besoins de votre entreprise.
  • Comprendre les concepts d’authentification et d’autorisation dans le Plateforme d'identités Microsoft. Consultez Principes de base de l’authentification et de l’autorisation.
  • Administration rôles requis :
    • Au moins un administrateur d’application cloud pour inscrire une application dans le centre d’administration Microsoft Entra
    • Administrateur général pour inscrire l’intégration de la main-d’œuvre

Se familiariser avec le processus d’intégration

Voici une vue d’ensemble des étapes d’intégration. Passez en revue ces informations pour comprendre le processus global, y compris les personnes qui effectuent chaque étape.

Étape Synchronisation unidirectionnelle Synchronisation bidirectionnelle Qui effectue cette étape
1 Créez votre connecteur : Créez votre connecteur : Developer
2 Inscrire une application dans le centre d’administration Microsoft Entra Inscrire une application dans le centre d’administration Microsoft Entra Un compte qui est au moins un administrateur d’application cloud
3 Créer des équipes et des planifications pour la synchronisation Créer des équipes et des planifications pour la synchronisation Développeur ou administrateur Teams
4 Inscrire et activer l’intégration de la main-d’œuvre : Inscrire et activer l’intégration de la main-d’œuvre : Étape 4a : Administrateur général
Étape 4b : Développeur

Étape 1 : Créer votre connecteur

Pour créer votre connecteur, procédez comme suit :

Étape 1a : Synchroniser les modifications apportées dans Shifts à votre système WFM

Pour configurer votre connecteur afin de recevoir et de traiter les demandes de Shifts, vous devez implémenter les points de terminaison suivants :

Déterminer l’URL de base et les URL de point de terminaison

L’URL de base (webhook) est {url}/v{apiVersion}, où url et apiVersion sont les propriétés que vous définissez dans l’objet workforceIntegration lorsque vous inscrivez l’intégration de la main-d’œuvre.

Les chemins relatifs des URL de point de terminaison sont les suivants :

  • /relier: /connect
  • /mettre à jour: /teams/{teamid}/update
  • /lire: /teams/{teamid}/read

Par exemple, si url est https://contosoconnector.com/wfi et apiVersion est 1:

  • L’URL de base est https://contosoconnector/com/wfi/v1.
  • Le point de terminaison /connect est https://contosoconnector/wfi/v1/connect.
  • Le point de terminaison /update est https://contosoconnector/wfi/v1/teams/{teamid}/update.
  • Le point de terminaison /read est https://contosoconnector/wfi/v1/teams/{teamid}/read.

Chiffrement

Toutes les demandes sont chiffrées à l’aide de AES-256-CBC-HMAC-SHA256. Vous spécifiez la clé secrète partagée lorsque vous inscrivez l’intégration du personnel. Les réponses renvoyées à Shifts ne doivent pas être chiffrées.

Points de terminaison

POST /connect

Shifts appelle ce point de terminaison pour tester la connexion lorsque vous inscrivez l’intégration du personnel. Une réponse de réussite est retournée uniquement si ce point de terminaison renvoie une réponse HTTP 200 OK .

Exemple

Demande
ConnectRequest

{
   "tenantId": "a1s2s355-a2s3-j7h6-f4d3-k2h9j4mqpz",
   "userId": "4fbc12d7-1234-56ef-8a90-bc123d45678f"
}

Réponse
Retourner HTTP 200 OK

POST /teams/{teamid}/update

Shifts appelle ce point de terminaison pour obtenir l’approbation lorsqu’une modification est apportée à une entité Shifts dans une planificationactivée pour l’intégration de la main-d’œuvre. Si ce point de terminaison approuve la demande, la modification est enregistrée dans Shifts.

Étant donné que votre système WFM est le système d’enregistrement, lorsque le connecteur reçoit une demande à ce point de terminaison, il doit d’abord tenter d’apporter la modification dans le système WFM. Si la modification réussit, retournez réussite. Sinon, retournez l’échec.

Shifts appelle ce point de terminaison pour chaque modification (y compris les modifications initiées à partir du connecteur/WFM système). Si le connecteur a envoyé une mise à jour à Shifts à l’aide de API Graph et ajouté l’en-têteX-MS-WFMPassthrough: workforceIntegratonId, la requête envoyée à ce point de terminaison aura le même en-tête, ce qui vous permet d’identifier et de gérer ces demandes de manière appropriée. Par exemple, retournez la réussite sans apporter la même modification dans le système WFM, car il serait redondant et peut bloquer le connecteur dans une boucle infinie.

Le diagramme suivant montre le flux de données.

Diagramme montrant le flux des mises à jour de Shifts vers votre système WFM.

Remarque

Pour plus d’informations sur les modèles de demande et de réponse, consultez WfiRequest dans la section Informations de référence sur les points de terminaison de cet article.

Code de réponse de retour
Toute réponse de l’intégration, y compris une erreur, doit avoir un code 200 OKde réponse HTTP . Le corps de la réponse doit avoir le status et le message d’erreur qui reflètent l’état d’erreur de sous-appel approprié. Toute réponse de l’intégration autre que est 200 OK traitée comme une erreur et renvoyée à l’appelant (client ou Microsoft Graph).

Si vous souhaitez configurer une synchronisation unidirectionnelle, rendez Shifts en lecture seule

Pour une synchronisation unidirectionnelle, vous devez rendre Shifts en lecture seule afin que les utilisateurs ne puissent pas apporter de modifications dans Shifts. Pour que Shifts soit en lecture seule, retourne une réponse d’échec pour toutes les demandes de Shifts.

Par exemple, pour empêcher les utilisateurs d’apporter des modifications aux shifts dans la planification, ce point de terminaison doit retourner une réponse d’échec chaque fois qu’il reçoit une demande concernant une shift entité.

Exemple

Demande
WfiRequestContainer

L’exemple suivant montre une requête de Shifts qui demande si un shift, dont l’ID est SHFT_12345678-1234-1234-1234-1234567890ab et dont les propriétés sont répertoriées dans le corps, peut être enregistré dans Shifts. Cette demande a été déclenchée lorsqu’un utilisateur crée un shift dans Shifts.

{
  "requests": [
    {
      "id": "SHFT_12345678-1234-1234-1234-1234567890ab",
      "method": "POST",
      "url": "/shifts/SHFT_12345678-1234-1234-1234-1234567890ab",
      "headers": {
        "X-MS-Transaction-ID": "1",
        "X-MS-Expires": "2024-10-11T21:27:59.0134605Z"
      },
      "body": {
        "draftShift": {
          "activities": [],
          "isActive": true,
          "startDateTime": "2024-10-12T15:00:00.000Z",
          "endDateTime": "2024-10-12T17:00:00.000Z",
          "theme": "Blue"
        },
        "isStagedForDeletion": false,
        "schedulingGroupId": "TAG_a3e0b3f1-4a5c-4c2e-8eeb-5b8c3d1e3f8b",
        "userId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "createdDateTime": "2024-10-11T21:27:28.762Z",
        "lastModifiedDateTime": "2024-10-11T21:27:28.762Z",
        "lastModifiedBy": {
          "user": {
            "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
            "displayName": "Adele Vance"
          }
        },
        "id": "SHFT_12345678-1234-1234-1234-1234567890ab"
      }
    }
  ]
}

Réponse
WfiResponse

Réussite : Retourner HTTP 200 OK

Cet exemple montre la réponse retournée si le point de terminaison a approuvé la demande. Dans ce scénario, le shift est enregistré dans Shifts, et l’utilisateur peut voir le shift dans la planification.

{
  "responses": [
    {
      "id": "SHFT_12345678-1234-1234-1234-1234567890ab",
      "status": 200,
      "body": {
        "eTag": "3f4e5d6c-7a8b-9c0d-1e2f-3g4h5i6j7k8l",
        "error": null,
        "data": null
      }
    }
  ]
}

Échec : retourner HTTP 200 OK

Cet exemple montre la réponse retournée si le point de terminaison a refusé la demande. Dans ce scénario, l’utilisateur reçoit un message d’erreur « Impossible d’ajouter le shift » dans Shifts.

{
    "responses": [
        {
            "id": "SHFT_12345678-1234-1234-1234-1234567890ab",
            "status": 500,
            "body": {
                "error": {
                    "code": "500",
                    "message": “Could not add the shift”
                },
                "data": null
            }
        }
    ]
}
POST /teams/{teamid}/read

Ce point de terminaison gère les demandes de Shifts pour récupérer les raisons de congé éligibles ou les shifts éligibles pour les demandes d’échange d’un utilisateur.

Remarque

Depuis octobre 2024, ce point de terminaison est pris en charge uniquement dans la version bêta de Microsoft API Graph. Vous devez également spécifier des valeurs pour la propriété eligibilityFilteringEnabledEntities lorsque vous inscrivez l’intégration de la main-d’œuvre.

Le diagramme suivant montre le flux de données.

Diagramme montrant le flux pour les demandes de filtrage d’éligibilité.

Code de réponse de retour
Toute réponse de l’intégration, y compris une erreur, doit avoir un code 200 OKde réponse HTTP . Le corps de la réponse doit inclure le status et le message d’erreur qui reflète l’état d’erreur de sous-appel approprié. Toute réponse de l’intégration autre que est 200 OK traitée comme une erreur et renvoyée à l’appelant (client ou Microsoft Graph).

Exemple : TimeOffReason

Demande

L’exemple suivant montre une requête de Shifts qui demande les raisons pour lesquelles un utilisateur (ID d’utilisateur aa162a04-bec6-4b81-ba99-96caa7b2b24d) est éligible. Cette demande a été déclenchée lorsque l’utilisateur demande un congé dans Shifts.

 { 
  "requests": [ 
    { 
      "id": "aa162a04-bec6-4b81-ba99-96caa7b2b24d", 
      "method": "GET", 
      "url": "/users/aa162a04-bec6-4b81-ba99-96caa7b2b24d/timeOffReasons?requestType=TimeOffReason"
    } 
  ] 
}

Réponse
Réussite : Retourner HTTP 200 OK

La réponse suivante montre que les ID de motif de congé éligibles pour l’utilisateur sont « TOR_29f4a110-ae53-458b-83d6-00c910fe2fbc » et « TOR_8c0e8d07-ac1a-48dc-b3af-7bc71a62ff7d ». Dans ce scénario, l’utilisateur voit les raisons de congé correspondantes à choisir dans Shifts.

{
    "responses": [ 
      { 
        "id": "aa162a04-bec6-4b81-ba99-96caa7b2b24d", 
        "status": 200, 
        "body": { 
          "data": [ 
            "TOR_29f4a110-ae53-458b-83d6-00c910fe2fbc", 
            "TOR_8c0e8d07-ac1a-48dc-b3af-7bc71a62ff7d" 
          ], 
          "error": null 
          } 
        }
    ]
}

Échec : retourner HTTP 200 OK

Dans cet exemple, une réponse d’erreur est retournée, car le connecteur n’a pas pu atteindre le système WFM pour récupérer les raisons de congé de l’utilisateur.

 {
  "responses": [
    {
      "id": "aa162a04-bec6-4b81-ba99-96caa7b2b24d",
      "status": 503,
      "body": {
        "data": null,
        "error": {
          "code": "503",
          "message": "Could not reach WFM"
        }
      }
    }
  ]
}
Exemple : SwapRequest

Demande

L’exemple suivant montre une requête de Shifts qui demande quelles équipes sont éligibles pour un échange avec le shift dont l’ID est SHFT_5e2b51ac-dc47-4a66-83ea-1bbbf81ac029 entre 2024-1 0-01T04:00:00.000000Z et 2024-11-01T03:59:59.9990000Z.

{
  "requests": [
    {
      "id": "SHFT_5e2b51ac-dc47-4a66-83ea-1bbbf81ac029",
      "method": "GET",
      "url": "/shifts/SHFT_5e2b51ac-dc47-4a66-83ea-1bbbf81ac029/requestableShifts?requestType=SwapRequest&startTime=2024-10-01T04:00:00.0000000Z&endTime=2024-11-01T03:59:59.9990000Z"
    }
  ]
}

Réponse
Réussite : Retourner HTTP 200 OK

La réponse suivante montre que le shift peut être échangé avec le shift dont l’ID est SHFT_98e96e23-966b-43be-b90d-4697037b67af.

{ 
  "responses": [ 
    { 
      "id": "SHFT_5e2b51ac-dc47-4a66-83ea-1bbbf81ac029", 
      "status": 200, 
      "body": { 
        "data": ["SHFT_98e96e23-966b-43be-b90d-4697037b67af"],
        "error": null, 
      } 
    }
  ]
}

Échec : retourner HTTP 200 OK

Dans cet exemple, une réponse d’erreur est retournée, car le connecteur n’a pas pu atteindre le système WFM pour récupérer les shifts éligibles pour une demande d’échange pour l’utilisateur.

{
  "responses": [
    {
      "id": "SHFT_5e2b51ac-dc47-4a66-83ea-1bbbf81ac029",
      "status": 503,
      "body": {
        "data": null,
        "error": {
          "code": "503",
          "message": "could not reach WFM"
        }
      }
    }
  ]
}

Étape 1b : Synchroniser les données de votre système WFM vers Shifts

Utilisez les API Shifts dans Microsoft Graph pour lire les données de planification de votre système WFM et écrire les données dans Shifts.

Par exemple, pour ajouter un shift à Shifts, utilisez l’API Créer un shift .

Consultez la référence Microsoft API Graph v1.0 pour les API Shifts, qui sont répertoriées sous Gestion des shifts.

Remarque

L’en-tête MS-APP-ACTS-AS est requis dans les requêtes et doit contenir l’ID (GUID) de l’utilisateur pour lequel votre application agit pour le compte. Nous vous recommandons d’utiliser l’ID utilisateur d’un propriétaire d’équipe lors de la mise à jour de la planification.

Le diagramme suivant montre le flux de données.

Diagramme montrant le flux de synchronisation des données de votre système WFM vers Shifts.

Synchronisation initiale

Pour la première synchronisation, le connecteur doit lire les données de votre système WFM et écrire les données dans Shifts. Nous vous recommandons de synchroniser deux semaines de données futures.

Après la synchronisation initiale

Après la première synchronisation, vous pouvez choisir de :

  • Mettre à jour les shifts de manière synchrone avec les modifications apportées à votre système WFM : envoyez une mise à jour à Shifts pour chaque modification apportée dans votre système WFM.

  • Mettez à jour de façon asynchrone shifts avec les modifications apportées à votre système de WFM : effectuez une synchronisation périodique en écrivant toutes les modifications qui se sont produites dans votre système WFM dans une période donnée (par exemple, 10 minutes) dans Shifts.

    Toutes les opérations d’écriture dans Shifts, y compris les opérations d’écriture lancées par le connecteur, déclenchent un appel au point de terminaison /update du connecteur. Nous vous recommandons d’inclure l’en-tête X-MS-WFMPassthrough: workforceIntegratonId à tous les appels en écriture afin que le connecteur puisse les identifier et les gérer de manière appropriée. Par exemple, si votre système WFM a initié la modification, approuvez-la sans appliquer de mise à jour à votre système WFM.

    Remarque

    Si vous configurez votre connecteur pour une synchronisation bidirectionnelle des données entre votre système WFM et Shifts, excluez les modifications initiées à partir de Shifts dans la synchronisation périodique. Ces modifications sont déjà écrites dans Shifts.

Étape 2 : Inscrire une application dans le centre d’administration Microsoft Entra

Suivez ces étapes pour inscrire une application pour votre connecteur dans le Plateforme d'identités Microsoft, configurer les autorisations permettant à l’application d’accéder à Microsoft Graph et obtenir un jeton d’accès.

  1. Connectez-vous au centre d’administration Microsoft Entra en tant qu’administrateur d’application cloud.

  2. Inscrire votre application Pour connaître les étapes à suivre, consultez Inscrire une application auprès du Plateforme d'identités Microsoft.

  3. Attribuez les autorisationsd’application Schedule.ReadWrite.All à l’application pour l’accès à l’application uniquement et obtenez un jeton d’accès.

    Pour obtenir des instructions pas à pas, consultez Obtenir un accès sans utilisateur.

    Le jeton d’accès vérifie que votre application est autorisée à appeler Microsoft Graph à l’aide de sa propre identité à l’aide de l’autorisation Schedule.ReadWrite.All . Il doit être inclus dans l’en-tête d’autorisation des demandes.

Étape 3 : Créer des équipes et des planifications pour la synchronisation

Configurez les équipes dans Teams que vous souhaitez synchroniser. Vous pouvez utiliser des équipes existantes ou en créer de nouvelles.

  1. Configurez des équipes dans Teams pour qu’elles correspondent aux équipes et aux emplacements de votre système WFM. Veillez à ajouter les personnes suivantes à chaque équipe :

    • Les responsables de première ligne en tant que propriétaires d’équipe. Veillez à ajouter l’utilisateur dans l’en-tête MS-APP-ACTS-AS en tant que propriétaire d’équipe de chaque équipe respective.
    • Employés de première ligne en tant que membres de l’équipe.
  2. Créez une planification dans Shifts pour chaque équipe. Pour plus d’informations, consultez Créer ou remplacer une planification.

  3. Ajoutez des groupes de planification à la planification sur chaque équipe. Les groupes de planification sont utilisés pour regrouper les employés en fonction des caractéristiques communes au sein d’une équipe. Par exemple, les groupes de planification peuvent être des services ou des types de travaux. Pour plus d’informations, consultez Type de ressource schedulingGroup.

  4. Ajouter des employés à chaque groupe de planification. Pour plus d’informations, consultez Remplacer schedulingGroup.

Remarque

Vous pouvez également utiliser le Centre d’administration Teams pour configurer vos équipes et déployer Shifts dans les équipes. Pour en savoir plus, reportez-vous à la rubrique :

Étape 4 : Inscrire et activer l’intégration de la main-d’œuvre

Une intégration du personnel définit les paramètres de chiffrement pour la communication entre Shifts et le connecteur, l’URL des rappels à partir de Shifts et les types d’entités à synchroniser.

Pour inscrire et activer l’intégration de la main-d’œuvre, procédez comme suit :

Étape 4a : Inscrire l’intégration de la main-d’œuvre dans votre locataire

Vous devez être administrateur général pour effectuer cette étape.

Utilisez l’API Create workforceIntegration pour inscrire votre intégration de personnel dans votre locataire.

Voici un exemple de demande.

POST https://graph.microsoft.com/v1.0/teamwork/workforceIntegrations/
{ 
  "displayName": "Contoso integration", 
  "apiVersion": 1, 
  "encryption": { 
    "protocol": "sharedSecret", 
    "secret": "secret-value" 
  }, 
  "isActive": true, 
  "url": "https://contosoconnector.com/wfi", 
  "supportedEntities": "Shift,SwapRequest,UserShiftPreferences,Openshift,OpenShiftRequest,OfferShiftRequest”,
}

Pour plus de détails, voir le tableau suivant. Pour plus d’informations, consultez Type de ressource workforceIntegration.

Propriété Plus d’informations
apiVersion Version de l’API pour l’URL de rappel. Votre URL de base est composée de la propriété url et de cette propriété.
chiffrement Définissez le protocole sur sharedSecret. La valeur du secret doit contenir exactement 64 caractères.

Utilisez le secret pour déchiffrer les charges utiles JSON chiffrées envoyées au point de terminaison de votre connecteur à partir de Shifts. La charge utile est chiffrée à l’aide de AES-256-CBC-HMAC-SHA256. Votre application doit conserver ce secret en toute sécurité. Par exemple, dans un coffre de clés.
supportedEntities Spécifiez les entités Shifts que le connecteur doit prendre en charge pour la synchronisation. Shifts appelle le point de terminaison /update de votre connecteur lorsque l’une de ces entités change afin que vous puissiez approuver ou rejeter la modification. Pour obtenir la liste des valeurs possibles, consultez type de ressource workforceIntegration

Note Cette liste est une énumération évolutif. Vous devez utiliser l’en-tête Prefer: include-unknown-enum-members de requête pour obtenir toutes les valeurs.
eligibilityFilteringEnabledEntities Remarque : Depuis octobre 2024, ce point de terminaison est pris en charge uniquement dans la version bêta de Microsoft API Graph.

Spécifiez les entités Shifts que vous souhaitez connecter pour prendre en charge le filtrage d’éligibilité. Les valeurs possibles sont les suivantes :
  • none: liste vide
  • SwapRequests: Shifts appelle le point de terminaison /read de votre connecteur pour obtenir une liste filtrée des shifts qu’un utilisateur peut choisir pour une demande d’échange.
  • TimeOffReasons: Shifts appelle le point de terminaison /read de votre connecteur pour obtenir une liste filtrée des raisons de congé qu’un utilisateur peut choisir lorsqu’il demande un congé.
Note Cette liste est une énumération évolutif. Vous devez utiliser l’en-tête Prefer: include-unknown-enum-members de requête pour obtenir toutes les valeurs.
url URL d’intégration de la main-d’œuvre pour les rappels à partir de Shifts. Votre URL de base est composée de cette propriété et de la propriété apiVerson .

Étape 4b : Activer l’intégration du personnel pour vos planifications d’équipe

Activez l’intégration de votre personnel selon les planifications que vous souhaitez gérer. Pour ce faire, utilisez l’API Créer ou remplacer une planification pour créer ou mettre à jour la planification pour vos équipes.

Voici un exemple de demande.

POST https://graph.microsoft.com/v1.0/teams/{teamId}/schedule
{
  enabled: true,
  timezone: “America/New_York”,
  workforceIntegrationIds: [ “workforceIntegrationId”]
}
  • Spécifiez l’id workforceIntegrationId qui a été généré lors de l’inscription de l’intégration de la main-d’œuvre.
  • Vous pouvez activer un maximum d’une intégration de main-d’œuvre selon une planification. Si vous incluez plusieurs workforceIntegrationId dans la requête, le premier est utilisé.

Résolution des problèmes

Connector

Lorsque le connecteur répond à une requête de Shifts, que se passe-t-il s’il retourne un code de réponse autre que 200 ? Cela fait-il une différence si elle retourne une status autre que 200 dans le corps de la réponse ?

Il existe une différence entre ces deux scénarios.

  • Si le connecteur retourne un code de réponse autre que 200, Shifts tente de réessayer les points de terminaison /read et /update plusieurs fois. Finalement, Shifts affiche un « Quelque chose s’est mal passé. La configuration de l’intégration de la main-d’œuvre de votre équipe a répondu avec des données non valides. » message d’erreur.
  • Si le connecteur retourne une status autre que 200 dans le corps de la réponse, Shifts affiche un message « Un problème s’est produit. Désolé... Votre modification n’a pas pu être effectuée », message d’erreur et arrête de réessayer les points de terminaison.

Que se passe-t-il si le connecteur retourne des données non valides dans le corps de la réponse ?

Shift tente de réessayer plusieurs fois les points de terminaison /read et /update. Finalement, Shifts affiche un « Quelque chose s’est mal passé. L’intégration de la main-d’œuvre configurée sur votre équipe a répondu avec des données non valides. » Message d’erreur.

Comment faire identifier si la requête a été initialement effectuée dans Shifts ou dans le système WFM pour empêcher une boucle infinie ?

Ajoutez l’en-tête X-MS-WFMPassthrough: workforceIntegratonId à tous les appels d’écriture et de mise à jour pour identifier/ignorer les modifications déclenchées par le connecteur. Cet en-tête est utilisé pour indiquer que la requête est effectuée en raison d’un appel précédent effectué par le connecteur pour API Graph synchroniser les données de votre système WFM vers Shifts.

Inscription à l’intégration de la main-d'

J’ai inscrit l’intégration de la main-d’œuvre et spécifié « eligibilityFilteringEnabledEntities », y compris « SwapRequest, OfferShiftRequest et TimeOffReason », mais le corps de la réponse n’affiche pas la liste « eligibilityFilteringEnabledEntities ».

Le filtrage d’éligibilité est actuellement pris en charge par le biais du point de https://graph.microsoft.com/beta terminaison, et non du point de https://graph.microsoft.com/v1 terminaison.

J’ai inscrit l’intégration de la main-d’œuvre et ajouté « supportedEntities », mais je reçois une réponse de demande incorrecte 400 et une « Charge utile non valide : valeur demandée 'shift, ....' est introuvable. » message

Assurez-vous que chaque entité Shifts dans le corps de la supportedEntities demande de liste commence par une lettre majuscule. Par exemple : "supportedEntities":"Shift,SwapRequest,OpenShift".

J’ai inscrit l’intégration de la main-d’œuvre et implémenté les points de terminaison /connect, /update et /read, mais le webhook ne fonctionne pas.

Assurez-vous que l’intégration de votre personnel est activée pour votre planification d’équipe. En outre, case activée que les propriétés url et apiVersion sont correctes.

Informations de référence sur le point de terminaison

Demande

ConnectRequest

Propriété Type Description
tenantId String ID du locataire pour l’intégration de la main-d’œuvre
userId String ID de l’utilisateur pour l’intégration de la main-d’œuvre
{
  "tenantId": "string",
  "userId": "string"
}

WfiRequestContainer

Propriété Type Description
Requêtes Collection WfiRequest Liste des WfiRequests
{
  "requests": [
    {
      "id": "string",
      "method": "string",
      "url": "string",
      "headers": {
        "X-MS-Transaction-ID": "string",
        "X-MS-Expires": "string (DateTime)"
      },
      "body": "ShiftsEntity"
    }
  ]
}

Nombre d’éléments dans une requête :

  • Dans la plupart des cas, une requête a un élément.
  • Certaines demandes, telles que les approbations de demandes de shift d’échange, ont cinq éléments : une demande d’échange PUT, deux shifts DELETE (shifts existants) et deux shifts POST (nouvelles équipes).

WfiRequest

Propriété Type Description
id String ID de l’entité
méthode String Méthode appelée sur l’élément. Par exemple, POST, PUT, GET, DELETE.
url Chaîne Indique le type d’entité et les détails de l’opération.
en-têtes WfiRequestHeader En-têtes
body ShiftsEntity Corps de l’entité liée à la requête.
Pour POST /teams/{teamId}/update
Propriété Type Description
id String ID de l’entité
méthode String POST pour créer une entité, PUT mettre à jour une entité, DELETE supprimer une entité.
url Chaîne Le format est /{EntityType}/{EntityId}. Les valeurs possibles pour {EntityType} sont shifts, swapRequests, timeoffReasons, openshifts, offershiftrequestsopenshiftrequests, , timeOffRequeststimesoff. Par exemple : /shifts/SHFT_12345678-1234-1234-1234-1234567890ab.
en-tête WfiRequestHeader En-tête
body ShiftsEntity Doit correspondre {EntityType} à la propriété URL . Utilisez l’un des éléments shift, swapShiftsChangeRequest, timeOffReason, openshift, openShiftChangeRequest, offerShiftRequests, timeOff, timeOffRequest. Par exemple : /shifts/SHFT_12345678-1234-1234-1234-1234567890ab.
Pour POST /teams/{teamsId}/read
Propriété Type Description
id String ID de l’entité
méthode String Est toujours GET.
url Chaîne
  • TimeOffReasons : le format est /users/{userId}/timeOffReasons?requestType=TimeOffReason. Par exemple : /users/aa162a04-bec6-4b81-ba99-96caa7b2b24d/timeOffReasons?requestType=TimeOffReason.
  • SwapRequest : le format est /shifts/{ShiftsId}/requestableShifts?requestType=SwapRequest\u0026startTime={startTime}\u0026endTime={endTime}. Par exemple : shifts/SHFT_1132430e-365e-4dc5-b8b0-b800592a81a8/requestableShifts?requestType=SwapRequest\u0026startTime=2024-10-01T07:00:00.0000000Z\u0026endTime=2024-11-01T06:59:59.9990000Z.
en-tête WfiRequestHeader En-tête
body ShiftsEntity Est toujours null.

WfiRequestHeader

Propriété Type Description
X-MS-Transaction-ID String Transaction ID
X-MS-Expire String (DateTime) Date/heure d’expiration de la transaction

X-MS-WFMPassthrough: workforceIntegratonId ne sera pas inclus dans WfiRequestHeader. Il doit être extrait de httpRequest.

Réponse

WfiResponseContainer

Propriété Type Description
Réponses Collection WfiResponse Liste des WfiResponses
{
  "responses": [
    {
      "id": "string",
      "status": "string",
      "body": {
        "eTag": "string",
        "error": {
          "code": "string",
          "message": "string"
        },
        "data": ["string1", "string2"]
      }
    }
  ]
}

WfiResponse

Propriété Type Description
id String ID de l’entité
status String Résultat de l’opération
body WfiResponseBody WfiResponseBody

WfiResponseBody

Propriété Type Description
eTag String eTag
error WfiResponseError Détails sur l’erreur
data String Données demandées (pour les demandes de lecture)

WfiResponseError

Propriété Type Description
code String Code d’erreur
message String Message d’erreur