

Avviso di fine del supporto: il 31 marzo 2027, AWS terminerà il supporto per Amazon WorkMail. Dopo il 31 marzo 2027, non potrai più accedere alla WorkMail console Amazon o alle WorkMail risorse Amazon. Per ulteriori informazioni, consulta la pagina [di WorkMail fine del supporto di Amazon](https://docs.aws.amazon.com/workmail/latest/adminguide/workmail-end-of-support.html). 

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di una funzione Lambda del Custom Availability Provider
<a name="building_cap"></a>

I Custom Availability Provider (CAPs) sono configurati con un protocollo di richiesta e risposta basato su JSON scritto in uno schema JSON ben definito. Una funzione Lambda analizzerà la richiesta e fornirà una risposta valida.

**Topics**
+ [Elementi di richiesta e risposta](#cap_request_response_elements)
+ [Concessione dell'accesso per](#granting_access)
+ [Esempio di WorkMail utilizzo di una funzione CAP Lambda da parte di Amazon](#cap_example_github)

## Elementi di richiesta e risposta
<a name="cap_request_response_elements"></a>

### Elementi della richiesta
<a name="cap_request"></a>

Di seguito è riportato un esempio di richiesta utilizzata per configurare un CAP per un WorkMail utente Amazon: 

```
{
    "requester": {
        "email": "user1@internal.example.com",
        "userName": "user1",
        "organization": "m-0123456789abcdef0123456789abcdef",
        "userId": "S-1-5-18",
        "origin": "127.0.0.1"
    },
    "mailboxes": [
        "user2@external.example.com",
        "unknown@internal.example.com"
    ],
    "window": {
        "startDate": "2021-05-04T00:00:00.000Z",
        "endDate": "2021-05-06T00:00:00.000Z"
    }
}
```

**Una richiesta è composta da tre sezioni: **requester**, **mailboxes** e window.** Queste sono descritte nelle [Window](#cap_request_window) sezioni seguenti [Richiedente](#cap_request_requester) e di questa guida. [Caselle di posta](#cap_request_mailboxes)

#### Richiedente
<a name="cap_request_requester"></a>

La sezione *richiedente* fornisce informazioni sull'utente che ha effettuato la richiesta originale ad Amazon WorkMail. CAPs usa queste informazioni per modificare il comportamento del provider. Ad esempio, questi dati possono essere utilizzati per impersonare lo stesso utente sul provider di disponibilità del backend oppure alcuni dettagli possono essere omessi dalla risposta.


| Campo | Description | Richiesto | 
| --- | --- | --- | 
|  `Email`  |  L'indirizzo email principale del richiedente.  |  Sì  | 
|  `Username`  |  Il nome utente del richiedente.  |  Sì  | 
|  `Organization`  |  L'ID dell'organizzazione del richiedente.  |  Sì  | 
|  `UserID`  |  L'ID del richiedente.  |  Sì  | 
|  `Origin`  |  L'indirizzo remoto della richiesta.  |  No  | 
|  `Bearer`  |  Riservato per uso futuro.  |  No  | 

#### Caselle di posta
<a name="cap_request_mailboxes"></a>

La sezione delle *caselle di posta* contiene un elenco separato da virgole di indirizzi e-mail degli utenti per i quali vengono richieste informazioni sulla disponibilità.

#### Window
<a name="cap_request_window"></a>

La sezione *finestra* contiene la finestra temporale per la quale vengono richieste le informazioni sulla disponibilità. Entrambi `startDate` `endDate` sono specificati in UTC e sono formattati secondo [RFC](https://www.rfc-editor.org/rfc/rfc3339) 3339. Non è previsto che gli eventi vengano troncati. In altre parole, se un evento inizia prima del definito`StartDate`, verrà utilizzato l'inizio originale.

### Elementi di risposta
<a name="cap_response"></a>

Amazon WorkMail aspetterà 25 secondi per ricevere una risposta dalla funzione CAP Lambda. Dopo 25 secondi, Amazon WorkMail presumerà che la funzione non sia riuscita e genererà errori per le caselle di posta associate nella risposta EWS GetUserAvailability. Ciò non causerà il fallimento dell'intera GetUserAvailability operazione.

Di seguito è riportato un esempio di risposta tratto dalla configurazione definita all'inizio di questa sezione: 

```
{
    "mailboxes": [{
        "mailbox": "user2@external.example.com",
        "events": [{
            "startTime": "2021-05-03T23:00:00.000Z",
            "endTime": "2021-05-04T03:00:00.000Z",
            "busyType": "BUSY"|"FREE"|"TENTATIVE",
            "details": {  // optional
                "subject": "Late meeting",
                "location": "Chime",
                "instanceType": "SINGLE_INSTANCE"|"RECURRING_INSTANCE"|"EXCEPTION",
                "isMeeting": true,
                "isReminderSet": true,
                "isPrivate": false
            }
        }],
        "workingHours": {
            "timezone": {
                "name": "W. Europe Standard Time"
                "bias": 60,
                "standardTime": {  // optional (not needed for fixed offsets)
                    "offset": 60,
                    "time": "02:00:00",
                    "month": "JAN"|"FEB"|"MAR"|"APR"|"JUN"|"JUL"|"AUG"|"SEP"|"OCT"|"NOV"|"DEC",
                    "week": "FIRST"|"SECOND"|"THIRD"|"FOURTH"|"LAST",
                    "dayOfWeek": "SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"
                },
                "daylightTime": {  // optional (not needed for fixed offsets)
                    "offset": 0,
                    "time": "03:00:00",
                    "month": "JAN"|"FEB"|"MAR"|"APR"|"JUN"|"JUL"|"AUG"|"SEP"|"OCT"|"NOV"|"DEC",
                    "week": "FIRST"|"SECOND"|"THIRD"|"FOURTH"|"LAST",
                    "dayOfWeek": "SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"
                },                
            },
            "workingPeriods":[{
                "startMinutes": 480,
                "endMinutes": 1040,
                "days": ["SUN"|"MON"|"TUE"|"WED"|"THU"|"FRI"|"SAT"]
            }]
        }
    },{
        "mailbox": "unknown@internal.example.com",
        "error": "MailboxNotFound"
    }]
}
```

Una risposta è composta da una singola sezione di *caselle di posta* che consiste in un elenco di cassette postali. *Ogni cassetta postale per la quale è stata ottenuta correttamente la disponibilità è composta da tre sezioni: *cassetta postale*, *eventi* e orari di lavoro.* **Se il provider di disponibilità non è riuscito a ottenere le informazioni sulla disponibilità di una cassetta postale, la sezione è composta da due sezioni: casella di posta ed errore.** Queste sono descritte nelle seguenti [Errore](#cap_response_error) sezioni [Cassetta postale](#cap_response_mailbox)[Eventi](#cap_response_events),[Ore lavorative](#cap_response_workinghours), [Fuso orario](#cap_response_timezone)[Periodi lavorativi](#cap_response_workingperiods), e di questa guida.

#### Cassetta postale
<a name="cap_response_mailbox"></a>

La sezione *mailbox* è l'indirizzo e-mail dell'utente che si trova nella sezione delle *caselle di posta* della richiesta.

#### Eventi
<a name="cap_response_events"></a>

La sezione *eventi* è un elenco di eventi che si verificano nella finestra richiesta. Ogni evento è definito con i seguenti parametri:


| Campo | Description | Richiesto | 
| --- | --- | --- | 
|  `startTime`  |  L'ora di inizio dell'evento in UTC e formattata secondo [RFC](https://www.rfc-editor.org/rfc/rfc3339) 3339.  |  Sì  | 
|  `endTime`  |  [L'ora di fine dell'evento in UTC e formattata secondo RFC 3339.](https://www.rfc-editor.org/rfc/rfc3339)  |  Sì  | 
|  `busyType`  |  Il tipo di evento occupato. Può essere `Busy`, `Free` o `Tentative`.  |  Sì  | 
|  `details`  |  I dettagli dell'evento.  |  No  | 
|  `details.subject`  |  L'oggetto dell'evento.  |  Sì  | 
|  `details.location`  |  Il luogo dell'evento.  |  Sì  | 
|  `details.instanceType`  |  Il tipo di istanza dell'evento. Può essere `Single_Instance`, `Recurring_Instance` o `Exception`.  |  Sì  | 
|  `details.isMeeting`  |  Un valore booleano per indicare se l'evento ha partecipanti.  |  Sì  | 
|  `details.isReminderSet`  |  Un valore booleano per indicare se l'evento ha un promemoria impostato.  |  Sì  | 
|  `details.isPrivate`  |  Un valore booleano per indicare se l'evento è impostato come privato.  |  Sì  | 

#### Ore lavorative
<a name="cap_response_workinghours"></a>

La sezione *WorkingHours* contiene informazioni sull'orario di lavoro del proprietario della casella di posta. *Contiene due sezioni: *fuso orario* e WorkingPeriods.* 

#### Fuso orario
<a name="cap_response_timezone"></a>

La sottosezione *timezone* descrive il fuso orario del proprietario della cassetta postale. È importante visualizzare correttamente l'orario di lavoro dell'utente quando il richiedente lavora in un fuso orario diverso. Il fornitore di disponibilità è tenuto a descrivere esplicitamente il fuso orario, anziché utilizzare un nome. L'utilizzo della descrizione standardizzata del fuso orario aiuta a evitare le discrepanze del fuso orario.


| Campo | Description | Richiesto | 
| --- | --- | --- | 
|  `name`  |  Il nome del fuso orario.  |  Sì  | 
|  `bias`  |  L'offset predefinito dal GMT in minuti.  |  Sì  | 
|  `standardTime`  |  L'inizio dell'ora solare per il fuso orario specificato.  |  No  | 
|  `daylightTime`  |  L'inizio dell'ora legale per il fuso orario specificato.  |  No  | 

È necessario definire entrambi `standardTime` o ometterli entrambi. `daylightTime` I campi nell'`daylightTime`oggetto `standardTime` and sono:


| Campo | Description | Valori consentiti | 
| --- | --- | --- | 
|  `offset`  |  L'offset rispetto all'offset predefinito in minuti.  |  N/A  | 
|  `time`  |  L'ora in cui avviene la transizione tra l'ora solare e l'ora legale, specificata come. `hh:mm:ss`  |  N/A  | 
|  `month`  |  Il mese in cui avviene il passaggio dall'ora solare all'ora legale.  |  `JAN`,`FEB`, `MAR`, `APR`, `JUN`, `JUL`, `AUG`, `SEP`, `OCT`, `NOV`, `DEC`  | 
|  `week`  |  La settimana all'interno del mese specificato in cui avviene il passaggio dall'ora solare all'ora legale.  |  `FIRST`, `SECOND`, `THIRD`, `FOURTH`, `LAST`  | 
|  `dayOfWeek`  |  Il giorno della settimana specificata in cui avviene il passaggio dall'ora solare all'ora legale.  |  `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT`  | 

#### Periodi lavorativi
<a name="cap_response_workingperiods"></a>

La sezione *WorkingPeriods* contiene uno o più oggetti del periodo di lavoro. Ogni periodo definisce un inizio e una fine del giorno lavorativo per uno o più giorni. 


| Campo | Description | Valori consentiti | 
| --- | --- | --- | 
|  `startMinutes`  |  L'inizio della giornata lavorativa in minuti a partire dalla mezzanotte.  |  N/A  | 
|  `endMinutes`  |  Fine della giornata lavorativa, in minuti a partire dalla mezzanotte.  |  N/A  | 
|  `days`  |  I giorni a cui si applica questo periodo.  |  `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT`  | 

#### Errore
<a name="cap_response_error"></a>

Il campo *di errore* può contenere messaggi di errore arbitrari. La tabella seguente elenca una mappatura di codici noti su codici di errore EWS. Tutti gli altri messaggi verranno mappati su. `ERROR_FREE_BUSY_GENERATION_FAILED` 


| Valore | Codice di errore EWS | 
| --- | --- | 
|  `MailboxNotFound`  |  `ERROR_MAIL_RECIPIENT_NOT_FOUND`  | 
|  `ErrorAvailabilityConfigNotFound`  |  `ERROR_AVAILABILITY_CONFIG_NOT_FOUND`  | 
|  `ErrorServerBusy`  |  `ERROR_SERVER_BUSY`  | 
|  `ErrorTimeoutExpired`  |  `ERROR_TIMEOUT_EXPIRED`  | 
|  `ErrorFreeBusyGenerationFailed`  |  `ERROR_FREE_BUSY_GENERATION_FAILED`  | 
|  `ErrorResponseSchemaValidation`  |  `ERROR_RESPONSE_SCHEMA_VALIDATION`  | 

## Concessione dell'accesso per
<a name="granting_access"></a>

Esegui il seguente comando Lambda da AWS Command Line Interface ()AWS CLI. Questo comando aggiunge una politica delle risorse alla funzione Lambda che analizza il CAP. Questa funzione consente al servizio di WorkMail disponibilità Amazon di richiamare la tua funzione Lambda.

```
aws lambda add-permission \
    --region LAMBDA_REGION \
    --function-name CAP_FUNCTION_NAME \
    --statement-id AllowWorkMail \
    --action "lambda:InvokeFunction" \
    --principal availability.workmail.WM_REGION.amazonaws.com \
    --source-account WM_ACCOUNT_ID \
    --source-arn arn:aws:workmail:WM_REGION:WM_ACCOUNT_ID:organization/ORGANIZATION_ID
```

Nel comando, aggiungi i seguenti parametri dove indicato:
+ *LAMBDA\$1REGION*— Nome della regione in cui viene distribuito CAP Lambda. Ad esempio, `us-east-1`.
+ *CAP\$1FUNCTION\$1NAME*— Nome della funzione CAP Lambda. 
**Nota**  
Può essere il nome, l'alias o l'ARN parziale o completo della funzione CAP Lambda.
+ *WM\$1REGION*— Nome della regione in cui l' WorkMail organizzazione Amazon richiama la funzione Lambda. 
**Nota**  
Solo le seguenti regioni sono disponibili per l'uso con CAP:  
Stati Uniti orientali (Virginia settentrionale)
Stati Uniti occidentali (Oregon)
Europa (Irlanda)
+ *WM\$1ACCOUNT\$1ID*— L'ID dell'account dell'organizzazione.
+ *ORGANIZATION\$1ID*— L'ID dell'organizzazione che richiama il CAP Lambda. Ad esempio, Org ID: m-934ebb9eb57145d0a6cab566ca81a21f.

**Nota**  
*LAMBDA\$1REGION**WM\$1REGION*e sarà diverso solo se sono necessarie chiamate interregionali. Se le chiamate interregionali non sono necessarie, saranno le stesse.

## Esempio di WorkMail utilizzo di una funzione CAP Lambda da parte di Amazon
<a name="cap_example_github"></a>

Per un esempio di WorkMail utilizzo da parte di Amazon di una funzione CAP Lambda per interrogare un endpoint EWS, consulta questa [applicazione di AWS esempio](https://github.com/aws-samples/amazon-workmail-lambda-templates/tree/master/workmail-cap-exchange) nel repository *Serverless applications* for Amazon. WorkMail GitHub 