Condividi tramite


Creare un'integrazione personalizzata per sincronizzare il sistema di gestione della forza lavoro con Turni

Panoramica

Integrare Turni, l'app di gestione della pianificazione in Microsoft Teams, con il sistema di gestione della forza lavoro (WFM). Questa integrazione consente alla forza lavoro in prima linea di visualizzare e gestire le pianificazioni direttamente all'interno di Turni.

Questo articolo illustra come creare un connettore usando microsoft API Graph per facilitare questa integrazione.

È possibile configurare l'integrazione per una sincronizzazione dei dati unidirezionale o una sincronizzazione dati bidirezionale.

  • Sincronizzazione unidirezionale (WFM sistema a turni): in questa configurazione, i dati di pianificazione nel sistema WFM vengono sincronizzati con Turni. Il connettore legge i dati nel sistema WFM e li scrive in Turni. Tuttavia, le modifiche apportate in Turni dagli utenti non vengono riflesse nuovamente nel sistema WFM.

  • Sincronizzazione bidirezionale (WFM sistema e turni): questa configurazione consente una sincronizzazione bidirezionale. I dati di pianificazione nel sistema WFM vengono sincronizzati con Turni e tutte le modifiche apportate in Turni dagli utenti vengono sincronizzate con il sistema WFM. Il connettore convalida e approva le modifiche apportate dagli utenti in Turni in base alle regole di business applicate dal sistema WFM prima che le modifiche vengano scritte in Turni.

Nota

Se si usa UKG Pro WFM, Blue Yonder WFM o Reflexis WFM, è anche possibile usare un connettore gestito per integrare Turni con il sistema WFM. Per altre informazioni, vedere Turni di connettori.

Terminologia usata in questo articolo

Termine Descrizione
connettore App che sincronizza i dati di pianificazione tra il sistema WFM e Turni.
integrazione della forza lavoro Entità che definisce il metodo di crittografia per la comunicazione, l'URL di callback per il connettore e le entità Turni da sincronizzare.

Prima di iniziare

Prerequisiti

  • Determinare i dati da sincronizzare in base alle esigenze aziendali.
  • Comprendere i concetti di autenticazione e autorizzazione nel Microsoft Identity Platform. Vedere Nozioni di base su autenticazione e autorizzazione.
  • Amministrazione ruoli necessari:
    • Almeno un amministratore di applicazioni cloud per registrare un'app nel Interfaccia di amministrazione di Microsoft Entra
    • Amministratore globale per registrare l'integrazione della forza lavoro

Acquisire familiarità con il processo di integrazione

Ecco una panoramica dei passaggi di integrazione. Esaminare queste informazioni per comprendere il processo complessivo, incluso chi esegue ogni passaggio.

Passaggio Sincronizzazione unidirezionale Sincronizzazione bidirezionale Chi esegue questo passaggio
1 Creare il connettore: Creare il connettore: Developer
2 Registrare un'app nel Interfaccia di amministrazione di Microsoft Entra Registrare un'app nel Interfaccia di amministrazione di Microsoft Entra Un account che è almeno un amministratore di applicazioni cloud
3 Creare team e pianificazioni per la sincronizzazione Creare team e pianificazioni per la sincronizzazione Sviluppatore o amministratore di Teams
4 Registrare e abilitare l'integrazione della forza lavoro: Registrare e abilitare l'integrazione della forza lavoro: Passaggio 4a: Amministratore globale
Passaggio 4b: Sviluppatore

Passaggio 1: Creare il connettore

Per creare il connettore, completare la procedura seguente:

Passaggio 1a: Sincronizzare le modifiche apportate in Turni al sistema WFM

Per configurare il connettore per ricevere ed elaborare le richieste da Turni, è necessario implementare gli endpoint seguenti:

Determinare l'URL di base e gli URL dell'endpoint

L'URL di base (webhook) è {url}/v{apiVersion}, dove url e apiVersion sono le proprietà impostate nell'oggetto workforceIntegration quando si registra l'integrazione della forza lavoro.

I percorsi relativi degli URL dell'endpoint sono i seguenti:

  • /connettersi: /connect
  • /aggiornare: /teams/{teamid}/update
  • /leggere: /teams/{teamid}/read

Ad esempio, se url è https://contosoconnector.com/wfi e apiVersion è 1:

  • L'URL di base è https://contosoconnector/com/wfi/v1.
  • L'endpoint /connect è https://contosoconnector/wfi/v1/connect.
  • L'endpoint /update è https://contosoconnector/wfi/v1/teams/{teamid}/update.
  • L'endpoint /read è https://contosoconnector/wfi/v1/teams/{teamid}/read.

Crittografia

Tutte le richieste vengono crittografate tramite AES-256-CBC-HMAC-SHA256. È possibile specificare la chiave privata condivisa quando si registra l'integrazione della forza lavoro. Le risposte inviate a Turni non devono essere crittografate.

Endpoint

POST /connect

Turni chiama questo endpoint per testare la connessione quando si registra l'integrazione della forza lavoro. Una risposta di esito positivo viene restituita solo se questo endpoint restituisce una risposta HTTP 200 OK .

Esempio

Richiesta
ConnectRequest

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

Risposta
Restituisce HTTP 200 OK

POST /teams/{teamid}/update

Turni chiama questo endpoint per ottenere l'approvazione quando viene apportata una modifica a un'entità Turni in una pianificazioneabilitata per l'integrazione della forza lavoro. Se questo endpoint approva la richiesta, la modifica viene salvata in Turni.

Poiché il sistema WFM è il sistema di registrazione, quando il connettore riceve una richiesta a questo endpoint, deve prima tentare di apportare la modifica nel sistema WFM. Se la modifica ha esito positivo, restituire l'esito positivo. In caso contrario, restituisce un errore.

Turni chiama questo endpoint per ogni modifica (incluse le modifiche avviate dal sistema del connettore/WFM). Se il connettore ha inviato un aggiornamento a Turni usando API Graph e ha aggiunto l'intestazioneX-MS-WFMPassthrough: workforceIntegratonId, la richiesta che arriva a questo endpoint avrà la stessa intestazione, che consente di identificare e gestire queste richieste in modo appropriato. Ad esempio, restituire l'esito positivo senza apportare la stessa modifica nel sistema WFM che sarebbe ridondante e può causare il blocco del connettore in un ciclo infinito.

Il diagramma seguente mostra il flusso di dati.

Diagramma che mostra il flusso per gli aggiornamenti da Turni al sistema WFM.

Nota

Per altre informazioni sui modelli di richiesta e risposta, vedere WfiRequest nella sezione di riferimento sugli endpoint di questo articolo.

Restituire il codice di risposta
Qualsiasi risposta dall'integrazione, incluso un errore, deve avere un codice 200 OKdi risposta HTTP. Il corpo della risposta deve avere lo stato e il messaggio di errore che riflette lo stato di errore della sottochiamata appropriato. Qualsiasi risposta dall'integrazione diversa 200 OK da viene considerata come un errore e restituita al chiamante (client o Microsoft Graph).

Se si vuole configurare una sincronizzazione unidirezionale, impostare Turni di sola lettura

Per una sincronizzazione unidirezionale, è necessario rendere turni di sola lettura in modo che gli utenti non possano apportare modifiche in Turni. Per rendere turni di sola lettura, restituire una risposta di errore per tutte le richieste provenienti da Turni.

Ad esempio, per impedire agli utenti di apportare modifiche ai turni nella pianificazione, questo endpoint deve restituire una risposta di errore ogni volta che riceve una richiesta relativa a un'entità shift .

Esempio

Richiesta
WfiRequestContainer

Nell'esempio seguente viene illustrata una richiesta di Turni che chiede se un turno, il cui ID è SHFT_12345678-1234-1234-1234-1234567890ab e con le proprietà elencate nel corpo, può essere salvato in Turni. Questa richiesta è stata attivata quando un utente crea uno spostamento in Turni.

{
  "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"
      }
    }
  ]
}

Risposta
WfiResponse

Operazione riuscita: restituisce HTTP 200 OK

Questo esempio mostra la risposta restituita se l'endpoint ha approvato la richiesta. In questo scenario, il turno viene salvato in Turni e l'utente può visualizzare lo spostamento nella pianificazione.

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

Errore: restituisce HTTP 200 OK

Questo esempio mostra la risposta restituita se l'endpoint ha negato la richiesta. In questo scenario, l'utente riceve un messaggio di errore "Impossibile aggiungere lo spostamento" in Turni.

{
    "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

Questo endpoint gestisce le richieste di Turni per recuperare i motivi di time off idonei o i turni idonei per le richieste di scambio per un utente.

Nota

A partire da ottobre 2024, questo endpoint è supportato solo nella versione beta di Microsoft API Graph. È anche necessario specificare i valori per la proprietà eligibilityFilteringEnabledEntities quando si registra l'integrazione della forza lavoro.

Il diagramma seguente mostra il flusso di dati.

Diagramma che mostra il flusso per le richieste di filtro di idoneità.

Restituire il codice di risposta
Qualsiasi risposta dall'integrazione, incluso un errore, deve avere un codice 200 OKdi risposta HTTP. Il corpo della risposta deve includere lo stato e il messaggio di errore che riflette lo stato di errore della sottochiamata appropriato. Qualsiasi risposta dall'integrazione diversa 200 OK da viene considerata come un errore e restituita al chiamante (client o Microsoft Graph).

Esempio: TimeOffReason

Richiesta

Nell'esempio seguente viene illustrata una richiesta di Turni che chiede per quali motivi di time off un utente (ID utente aa162a04-bec6-4b81-ba99-96caa7b2b24d) è idoneo. Questa richiesta è stata attivata quando l'utente richiede il time off in Turni.

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

Risposta
Operazione riuscita: restituisce HTTP 200 OK

La risposta seguente mostra che gli ID motivo di time off idonei per l'utente sono "TOR_29f4a110-ae53-458b-83d6-00c910fe2fbc" e "TOR_8c0e8d07-ac1a-48dc-b3af-7bc71a62ff7d". In questo scenario, l'utente visualizza i motivi di time off corrispondenti tra cui scegliere in Turni.

{
    "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 
          } 
        }
    ]
}

Errore: restituisce HTTP 200 OK

In questo esempio viene restituita una risposta di errore perché il connettore non è riuscito a raggiungere il sistema WFM per recuperare i motivi di time off per l'utente.

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

Richiesta

L'esempio seguente mostra una richiesta di Turni che chiede quali turni sono idonei per uno scambio con il turno il cui ID è SHFT_5e2b51ac-dc47-4a66-83ea-1bbbf81ac029 tra il 2024-10-01T04:00:00.0000000Z e 2024-11-01T03:59:59.99900000Z.

{
  "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"
    }
  ]
}

Risposta
Operazione riuscita: restituisce HTTP 200 OK

La risposta seguente mostra che lo spostamento può essere scambiato con il turno il cui ID è 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, 
      } 
    }
  ]
}

Errore: restituisce HTTP 200 OK

In questo esempio viene restituita una risposta di errore perché il connettore non è riuscito a raggiungere il sistema WFM per recuperare i turni idonei per una richiesta di scambio per l'utente.

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

Passaggio 1b: Sincronizzare i dati dal sistema WFM ai turni

Usare le API Turni in Microsoft Graph per leggere i dati di pianificazione dal sistema WFM e scrivere i dati in Turni.

Ad esempio, per aggiungere un turno a Turni, usare l'API Crea turno .

Vedere le informazioni di riferimento su Microsoft API Graph v1.0 per le API Turni, elencate in Gestione turni.

Nota

L'intestazione MS-APP-ACTS-AS è necessaria nelle richieste e deve contenere l'ID (GUID) dell'utente di cui l'app opera per conto dell'utente. È consigliabile usare l'ID utente di un proprietario del team durante l'aggiornamento della pianificazione.

Il diagramma seguente mostra il flusso di dati.

Diagramma che mostra il flusso per la sincronizzazione dei dati dal sistema WFM a Turni.

Sincronizzazione iniziale

Per la prima sincronizzazione, il connettore deve leggere i dati nel sistema WFM e scrivere i dati in Turni. È consigliabile sincronizzare due settimane di dati futuri.

Dopo la sincronizzazione iniziale

Dopo la prima sincronizzazione, è possibile scegliere di:

  • Aggiornare i turni in modo sincrono con le modifiche apportate al sistema WFM: inviare un aggiornamento a Turni per ogni modifica apportata nel sistema WFM.

  • Aggiornare in modo asincrono turni con modifiche nel sistema WFM: eseguire una sincronizzazione periodica scrivendo tutte le modifiche che si sono verificate nel sistema WFM entro un determinato intervallo di tempo (ad esempio, 10 minuti) in Turni.

    Tutte le operazioni di scrittura in Turni, incluse le operazioni di scrittura avviate dal connettore, attivano una chiamata all'endpoint /update del connettore. È consigliabile includere l'intestazione X-MS-WFMPassthrough: workforceIntegratonId in tutte le chiamate di scrittura in modo che il connettore possa identificarle e gestirle in modo appropriato. Ad esempio, se il sistema WFM ha avviato la modifica, approvarla senza applicare un aggiornamento al sistema WFM.

    Nota

    Se si sta configurando il connettore per una sincronizzazione bidirezionale dei dati tra il sistema WFM e Turni, escludere le modifiche avviate da Turni nella sincronizzazione periodica. Queste modifiche sono già scritte in Turni.

Passaggio 2: Registrare un'app nel Interfaccia di amministrazione di Microsoft Entra

Seguire questa procedura per registrare un'app per il connettore nel Microsoft Identity Platform, configurare le autorizzazioni per l'app per l'accesso a Microsoft Graph e ottenere un token di accesso.

  1. Accedere al Interfaccia di amministrazione di Microsoft Entra almeno come amministratore di applicazioni cloud.

  2. Registrare l'app. Per i passaggi, vedere Registrare un'applicazione con il Microsoft Identity Platform.

  3. Assegnare le autorizzazioni dell'applicazioneSchedule.ReadWrite.All all'app per l'accesso solo app e ottenere un token di accesso.

    Per istruzioni dettagliate, vedere Ottenere l'accesso senza un utente.

    Il token di accesso verifica che l'app sia autorizzata a chiamare Microsoft Graph usando la propria identità usando l'autorizzazione Schedule.ReadWrite.All . Deve essere incluso nell'intestazione Authorization delle richieste.

Passaggio 3: Creare team e pianificazioni per la sincronizzazione

Configurare i team in Teams da sincronizzare. È possibile usare i team esistenti o creare nuovi team.

  1. Configurare i team in Teams in modo che corrispondano ai team e alle posizioni nel sistema WFM. Assicurarsi di aggiungere le persone seguenti a ogni team:

    • Manager in prima linea come proprietari del team. Assicurarsi di aggiungere l'utente nell'intestazione MS-APP-ACTS-AS come proprietario del team di ogni rispettivo team.
    • Ruoli di lavoro in prima linea come membri del team.
  2. Creare una pianificazione in Turni per ogni team. Per altre informazioni, vedere Creare o sostituire la pianificazione.

  3. Aggiungere gruppi di pianificazione alla pianificazione in ogni team. I gruppi di pianificazione vengono usati per raggruppare i dipendenti in base alle caratteristiche comuni all'interno di un team. Ad esempio, i gruppi di pianificazione possono essere reparti o tipi di processo. Per altre informazioni, vedere pianificazioneTipo di risorsa gruppo.

  4. Aggiungere dipendenti a ogni gruppo di pianificazione. Per altre informazioni, vedere Sostituire schedulingGroup.

Nota

È anche possibile usare l'interfaccia di amministrazione di Teams per configurare i team e distribuire Turni nei team. Per altre informazioni, vedere:

Passaggio 4: Registrare e abilitare l'integrazione della forza lavoro

Un'integrazione della forza lavoro definisce le impostazioni di crittografia per la comunicazione tra turni e connettore, l'URL per i callback dai turni e i tipi di entità da sincronizzare.

Per registrare e abilitare l'integrazione della forza lavoro, seguire questa procedura:

Passaggio 4a: Registrare l'integrazione della forza lavoro nel tenant

Per eseguire questo passaggio, è necessario essere un amministratore globale.

Usare l'API Create workforceIntegration per registrare l'integrazione della forza lavoro nel tenant.

Ecco un esempio di richiesta.

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”,
}

Per informazioni dettagliate, vedere la tabella seguente. Per altre informazioni, vedere workforceIntegration resource type (Tipo di risorsa di integrazione).

Proprietà Ulteriori informazioni
apiVersion Versione dell'API per l'URL di callback. L'URL di base è costituito dalla proprietà url e da questa proprietà.
crittografia Impostare il protocollo su sharedSecret. Il valore del segreto deve essere esattamente di 64 caratteri.

Usare il segreto per decrittografare i payload JSON crittografati inviati all'endpoint del connettore da Turni. Il payload viene crittografato usando AES-256-CBC-HMAC-SHA256. L'app deve rendere sicuro questo segreto. Ad esempio, in un insieme di credenziali delle chiavi.
supportedEntities Specificare le entità Turni che il connettore deve supportare per la sincronizzazione. Turni chiama l'endpoint /update del connettore quando una di queste entità cambia in modo che sia possibile approvare o rifiutare la modifica. Per l'elenco dei valori possibili, vedere workforceIntegration resource type

Nota Questo elenco è un'enumerazione evolvable. È necessario usare l'intestazione della Prefer: include-unknown-enum-members richiesta per ottenere tutti i valori.
eligibilityFilteringEnabledEntities Nota: a partire da ottobre 2024, questo endpoint è supportato solo nella versione beta di Microsoft API Graph.

Specificare le entità turni che si desidera connettore supportare per il filtro di idoneità. I valori possibili sono:
  • none: elenco vuoto
  • SwapRequests: turni chiama l'endpoint /read del connettore per ottenere un elenco filtrato di turni tra cui un utente può scegliere per una richiesta di scambio.
  • TimeOffReasons: turni chiama l'endpoint /read del connettore per ottenere un elenco filtrato dei motivi di time off tra cui un utente può scegliere quando richiede il time off.
Nota Questo elenco è un'enumerazione evolvable. È necessario usare l'intestazione della Prefer: include-unknown-enum-members richiesta per ottenere tutti i valori.
URL URL di integrazione della forza lavoro per i callback da Turni. L'URL di base è costituito da questa proprietà e dalla proprietà apiVerson.

Passaggio 4b: Abilitare l'integrazione della forza lavoro per le pianificazioni del team

Abilitare l'integrazione della forza lavoro nelle pianificazioni da gestire. A tale scopo, usare l'API Crea o sostituisci pianificazione per creare o aggiornare la pianificazione per i team.

Ecco un esempio di richiesta.

POST https://graph.microsoft.com/v1.0/teams/{teamId}/schedule
{
  enabled: true,
  timezone: “America/New_York”,
  workforceIntegrationIds: [ “workforceIntegrationId”]
}
  • Specificare il workforceIntegrationId generato quando è stata registrata l'integrazione della forza lavoro.
  • È possibile abilitare un massimo di un'integrazione della forza lavoro in base a una pianificazione. Se si includono più elementi workforceIntegrationId nella richiesta, viene usato il primo.

Risoluzione dei problemi

Connettore

Quando il connettore risponde a una richiesta di Turni, cosa accade se restituisce un codice di risposta diverso da 200? Fa la differenza se restituisce uno stato diverso da 200 nel corpo della risposta?

Esiste una differenza tra questi due scenari.

  • Se il connettore restituisce un codice di risposta diverso da 200, Turni tenta di ripetere più volte gli endpoint /read e /update. Alla fine, Turni visualizza un messaggio "Qualcosa è andato storto. La configurazione dell'integrazione della forza lavoro nel team ha risposto con dati non validi." messaggio di errore.
  • Se il connettore restituisce uno stato diverso da 200 nel corpo della risposta, Turni visualizza un messaggio "Qualcosa è andato storto. Non è stato possibile completare la modifica", messaggio di errore e smette di ritentare gli endpoint.

Cosa accade se il connettore restituisce dati non validi nel corpo della risposta?

Turni tenta di ripetere più volte gli endpoint /read e /update. Alla fine, Turni visualizza un messaggio "Qualcosa è andato storto. L'integrazione della forza lavoro configurata nel team ha risposto con dati non validi." messaggio di errore.

Ricerca per categorie identificare se la richiesta è stata originariamente effettuata in Turni o nel sistema WFM per evitare un ciclo infinito?

Aggiungere l'intestazione X-MS-WFMPassthrough: workforceIntegratonId a tutte le chiamate di scrittura e aggiornamento per identificare/ignorare le modifiche attivate dal connettore. Questa intestazione viene usata per indicare che la richiesta viene eseguita a causa di una chiamata precedente effettuata dal connettore per API Graph per sincronizzare i dati dal sistema WFM a Turni.

Registrazione dell'integrazione della forza lavoro

Ho registrato l'integrazione della forza lavoro e ho specificato "eligibilityFilteringEnabledEntities" tra cui "SwapRequest, OfferShiftRequest e TimeOffReason", ma il corpo della risposta non mostra l'elenco "eligibilityFilteringEnabledEntities".

Il filtro di idoneità è attualmente supportato tramite l'endpoint https://graph.microsoft.com/beta , non l'endpoint https://graph.microsoft.com/v1 .

Ho registrato l'integrazione della forza lavoro e aggiunto "supportedEntities", ma ho ricevuto una risposta di 400 richieste non valide e un "payload non valido: valore richiesto 'shift, ....' non è stato trovato." messaggio

Assicurarsi che ogni entità Turni nel corpo della supportedEntities richiesta elenco inizi con una lettera maiuscola. Ad esempio, "supportedEntities":"Shift,SwapRequest,OpenShift".

È stata registrata l'integrazione della forza lavoro e sono stati implementati gli endpoint /connect, /update e /read, ma il webhook non funziona.

Assicurarsi che l'integrazione della forza lavoro sia abilitata per la pianificazione del team. Verificare inoltre che le proprietà url e apiVersion siano corrette.

Riferimento all'endpoint

Richiesta

ConnectRequest

Proprietà Tipo Descrizione
tenantId Stringa ID del tenant per l'integrazione della forza lavoro
userId Stringa ID dell'utente per l'integrazione della forza lavoro
{
  "tenantId": "string",
  "userId": "string"
}

WfiRequestContainer

Proprietà Tipo Descrizione
Richieste Raccolta WfiRequest Elenco di WfiRequest
{
  "requests": [
    {
      "id": "string",
      "method": "string",
      "url": "string",
      "headers": {
        "X-MS-Transaction-ID": "string",
        "X-MS-Expires": "string (DateTime)"
      },
      "body": "ShiftsEntity"
    }
  ]
}

Numero di elementi in una richiesta:

  • Nella maggior parte dei casi, una richiesta ha un elemento.
  • Alcune richieste, ad esempio le approvazioni delle richieste di cambio di turno, hanno cinque elementi: una richiesta di scambio PUT, due turni DELETE (turni esistenti) e due turni POST (nuovi turni).

WfiRequest

Proprietà Tipo Descrizione
id Stringa ID dell'entità
metodo Stringa Metodo richiamato sull'elemento. Ad esempio, POST, PUT, GET, DELETE.
URL Stringa Indica il tipo di entità e i dettagli dell'operazione.
Intestazioni WfiRequestHeader Intestazioni
corpo TurniEntità Corpo dell'entità correlata alla richiesta.
Per POST /teams/{teamId}/update
Proprietà Tipo Descrizione
id Stringa ID dell'entità
metodo Stringa POST per creare un'entità, PUT per aggiornare un'entità, DELETE per eliminare un'entità.
URL Stringa Il formato è /{EntityType}/{EntityId}. I valori possibili per {EntityType} sono shifts, swapRequests, timeoffReasons, openshifts, offershiftrequestsopenshiftrequests, , timesoff, timeOffRequests. Ad esempio, /shifts/SHFT_12345678-1234-1234-1234-1234567890ab.
intestazione WfiRequestHeader Intestazione
corpo TurniEntità Deve corrispondere {EntityType} alla proprietà url . Usa uno di shift, swapShiftsChangeRequest, timeOffReason, openshift, openShiftChangeRequest, offerShiftRequests, timeOff, timeOffRequest. Ad esempio, /shifts/SHFT_12345678-1234-1234-1234-1234567890ab.
Per POST /teams/{teamsId}/read
Proprietà Tipo Descrizione
id Stringa ID dell'entità
metodo Stringa È sempre GET.
URL Stringa
  • TimeOffReasons: il formato è /users/{userId}/timeOffReasons?requestType=TimeOffReason. Ad esempio, /users/aa162a04-bec6-4b81-ba99-96caa7b2b24d/timeOffReasons?requestType=TimeOffReason.
  • SwapRequest: il formato è /shifts/{ShiftsId}/requestableShifts?requestType=SwapRequest\u0026startTime={startTime}\u0026endTime={endTime}. Ad esempio, shifts/SHFT_1132430e-365e-4dc5-b8b0-b800592a81a8/requestableShifts?requestType=SwapRequest\u0026startTime=2024-10-01T07:00:00.0000000Z\u0026endTime=2024-11-01T06:59:59.9990000Z.
intestazione WfiRequestHeader Intestazione
corpo TurniEntità È sempre null.

WfiRequestHeader

Proprietà Tipo Descrizione
X-MS-Transaction-ID Stringa ID transazione
X-MS-Expires String (DateTime) Data di scadenza della transazione DateTime

X-MS-WFMPassthrough: workforceIntegratonId non verrà incluso in WfiRequestHeader. Deve essere estratto da HttpRequest.

Risposta

WfiResponseContainer

Proprietà Tipo Descrizione
Risposte Raccolta WfiResponse Elenco di WfiResponses
{
  "responses": [
    {
      "id": "string",
      "status": "string",
      "body": {
        "eTag": "string",
        "error": {
          "code": "string",
          "message": "string"
        },
        "data": ["string1", "string2"]
      }
    }
  ]
}

WfiResponse

Proprietà Tipo Descrizione
id Stringa ID dell'entità
stato Stringa Risultato dell'operazione
corpo WfiResponseBody WfiResponseBody

WfiResponseBody

Proprietà Tipo Descrizione
eTag Stringa eTag
errore WfiResponseError Dettagli sull'errore
dati Stringa Dati richiesti (per le richieste di lettura)

WfiResponseError

Proprietà Tipo Descrizione
code Stringa Codice errore
messaggio Stringa Messaggio di errore