

Aviso de fim do suporte: em 31 de março de 2027, AWS encerrará o suporte para a Amazon WorkMail. Depois de 31 de março de 2027, você não poderá mais acessar o WorkMail console da Amazon ou os WorkMail recursos da Amazon. Para obter mais informações, consulte [ WorkMail Fim do suporte da Amazon](https://docs.aws.amazon.com/workmail/latest/adminguide/workmail-end-of-support.html). 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Para criar uma função do Lambda do Provedor de disponibilidade personalizada
<a name="building_cap"></a>

Os provedores de disponibilidade personalizados (CAPs) são configurados com um protocolo de JSON-based solicitação e resposta escrito em um esquema JSON bem definido. Uma função do Lambda analisará a solicitação e fornecerá uma resposta válida.

**Topics**
+ [Elementos de solicitações e respostas](#cap_request_response_elements)
+ [Como conceder acesso ao](#granting_access)
+ [Exemplo de Amazon WorkMail usando uma função CAP Lambda](#cap_example_github)

## Elementos de solicitações e respostas
<a name="cap_request_response_elements"></a>

### Elementos da solicitação
<a name="cap_request"></a>

Veja a seguir um exemplo de solicitação usada para configurar um CAP para um WorkMail usuário da 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"
    }
}
```

Uma solicitação é composta por três seções: **solicitante**, **caixas de correio** e **janela**. Elas são descritas nas seguintes seções [Solicitante](#cap_request_requester), [Caixas de correio](#cap_request_mailboxes) e [Window](#cap_request_window) deste guia.

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

A seção do *solicitante* fornece informações sobre o usuário que fez a solicitação original para a Amazon WorkMail. Os CAPs usam essas informações para mudar o comportamento do provedor. Por exemplo, esses dados podem ser usados para representar o mesmo usuário no provedor de disponibilidade de back-end ou certos detalhes podem ser omitidos da resposta.


| Campo | Description | Obrigatório | 
| --- | --- | --- | 
| `Email` | O endereço de e-mail principal do solicitante. | Sim | 
| `Username` | O nome de usuário do solicitante. | Sim | 
| `Organization` | O ID da organização do solicitante. | Sim | 
| `UserID` | O ID do solicitante. | Sim | 
| `Origin` | O endereço remoto do solicitante. | Não | 
| `Bearer` | Reservado para uso futuro. | Não | 

#### Caixas de correio
<a name="cap_request_mailboxes"></a>

A seção de *caixas de correio* contém uma lista separada por vírgulas dos endereços de e-mail dos usuários para os quais as informações de disponibilidade são solicitadas.

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

A seção da *janela* contém a janela de tempo para a qual as informações de disponibilidade são solicitadas. Ambos `startDate` e `endDate` são especificados em UTC e são formatados de acordo com a [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339). Não se espera que eventos sejam truncados. Em outras palavras, se um evento começar antes do `StartDate` definido, será usado o início original.

### Elementos de resposta
<a name="cap_response"></a>

A Amazon WorkMail aguardará 25 segundos para obter uma resposta da função CAP Lambda. Depois de 25 segundos, a Amazon WorkMail presumirá que a função falhou e gerará falhas para as caixas de correio associadas na resposta do EWS GetUserAvailability. Isso não fará com que toda a GetUserAvailability operação falhe.

Veja a seguir um exemplo de resposta da configuração definida no início desta seção: 

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

Uma resposta é composta por uma única seção de *caixas de correio* que consiste em uma lista de caixas de correio. Cada caixa de correio para a qual a disponibilidade é obtida com sucesso é composta por três seções: *caixa de correio*, *eventos* e *horas de trabalho*. Se o provedor de disponibilidade não conseguiu obter as informações de disponibilidade de uma caixa de correio, a seção será composta por duas seções: *caixa de correio* e *erro*. Elas são descritas nas seguintes seções [Caixa de correio](#cap_response_mailbox), [Eventos](#cap_response_events), [Horário de trabalho](#cap_response_workinghours), [Fuso horário](#cap_response_timezone), [Períodos de trabalho](#cap_response_workingperiods) e [Erro](#cap_response_error) deste guia.

#### Caixa de correio
<a name="cap_response_mailbox"></a>

A seção *caixa de correio* é o endereço de e-mail do usuário encontrado na seção *caixas de correio* da solicitação.

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

A seção *eventos* é uma lista de eventos que ocorrem na janela solicitada. Cada evento é definido com os seguintes parâmetros:


| Campo | Description | Obrigatório | 
| --- | --- | --- | 
| `startTime` | A hora de início do evento em UTC e formatada de acordo com a [RFC3339](https://www.rfc-editor.org/rfc/rfc3339). | Sim | 
| `endTime` | A hora de término do evento em UTC e formatada de acordo com a [RFC3339](https://www.rfc-editor.org/rfc/rfc3339). | Sim | 
| `busyType` | O tipo de disponibilidade do evento. Pode ser `Busy`, `Free`, ou `Tentative`. | Sim | 
| `details` | Os detalhes do evento. | Não | 
| `details.subject` | O tema do evento. | Sim | 
| `details.location` | A localização do evento. | Sim | 
| `details.instanceType` | O tipo de instância do evento. Pode ser `Single_Instance`, `Recurring_Instance`, ou `Exception`. | Sim | 
| `details.isMeeting` | Um booleano para indicar se o evento tem participantes. | Sim | 
| `details.isReminderSet` | Um booleano para indicar se o evento tem definição de lembretes. | Sim | 
| `details.isPrivate` | Um booleano para indicar se o evento está definido como privado. | Sim | 

#### Horário de trabalho
<a name="cap_response_workinghours"></a>

A seção *Horas de trabalho* contém informações sobre o horário de trabalho do proprietário da caixa de correio. Ele contém duas seções: *fuso horário* e *Períodos de trabalho*. 

#### Fuso horário
<a name="cap_response_timezone"></a>

A subseção *fuso horário* descreve o fuso horário do proprietário da caixa de correio. É importante renderizar corretamente o horário de trabalho do usuário quando o solicitante trabalha em um fuso horário diferente. O provedor de disponibilidade precisa descrever explicitamente o fuso horário, em vez de usar um nome. Usar a descrição padronizada do fuso horário ajuda a evitar incompatibilidades de fuso horário.


| Campo | Description | Obrigatório | 
| --- | --- | --- | 
| `name` | O nome do fuso horário. | Sim | 
| `bias` | O deslocamento padrão do GMT em minutos. | Sim | 
| `standardTime` | O início do horário padrão para o fuso horário especificado. | Não | 
| `daylightTime` | O início do horário de verão para o fuso horário especificado. | Não | 

Você deve definir ou omitir ambos `standardTime` e `daylightTime`. Os campos nos objetos `standardTime` e `daylightTime` são:


| Campo | Description | Valores permitidos | 
| --- | --- | --- | 
| `offset` | O deslocamento em relação ao deslocamento padrão em minutos. | NA | 
| `time` | O horário em que ocorre a transição entre o horário padrão e o horário de verão, especificado como `hh:mm:ss`. | NA | 
| `month` | O mês em que ocorre a transição entre o horário padrão e o horário de verão. | `JAN`,`FEB`, `MAR`, `APR`, `JUN`, `JUL`, `AUG`, `SEP`, `OCT`, `NOV`, `DEC` | 
| `week` | A semana do mês específico em que ocorre a transição entre o horário padrão e o horário de verão. | `FIRST`, `SECOND`, `THIRD`, `FOURTH`, `LAST` | 
| `dayOfWeek` | O dia da semana específica em que ocorre a transição entre o horário padrão e o horário de verão. | `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` | 

#### Períodos de trabalho
<a name="cap_response_workingperiods"></a>

A seção *Períodos de trabalho* contém um ou mais objetos de período de trabalho. Cada período define o início e o fim do dia de trabalho para um ou mais dias. 


| Campo | Description | Valores permitidos | 
| --- | --- | --- | 
| `startMinutes` | O início do dia de trabalho em minutos a partir da meia-noite. | NA | 
| `endMinutes` | O fim do dia de trabalho em minutos a partir da meia-noite. | NA | 
| `days` | Os dias aos quais esse período se aplica. | `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` | 

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

O campo *erro* pode conter mensagens de erro arbitrárias. A tabela a seguir lista um mapeamento de códigos conhecidos para códigos de erro do EWS. Todas as outras mensagens serão mapeadas para `ERROR_FREE_BUSY_GENERATION_FAILED`. 


| Valor | Código de erro 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` | 

## Como conceder acesso ao
<a name="granting_access"></a>

Execute o seguinte comando Lambda a partir do AWS Command Line Interface ()AWS CLI. Esse comando adiciona uma política de recursos à função do Lambda que analisa o CAP. Essa função permite que o serviço de WorkMail disponibilidade da Amazon invoque sua função 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}}
```

No comando, adicione os seguintes parâmetros onde indicado:
+ {{LAMBDA\_REGION}}— Nome da região onde o CAP Lambda é implantado. Por exemplo, .`us-east-1`
+ {{CAP\_FUNCTION\_NAME}}— Nome da função CAP Lambda. 
**nota**  
Isso pode ser o nome, o alias ou o ARN parcial ou completo da função CAP do Lambda.
+ {{WM\_REGION}}— Nome da região em que a WorkMail organização Amazon invoca a função Lambda. 
**nota**  
Somente as regiões a seguir estão disponíveis para uso com CAP:  
Leste dos EUA (N. da Virgínia)
Oeste dos EUA (Oregon)
Europa (Irlanda)
+ {{WM\_ACCOUNT\_ID}}— O ID da conta da organização.
+ {{ORGANIZATION\_ID}}— O ID da organização que invoca o CAP Lambda. Por exemplo, ID de organização: m-934ebb9eb57145d0a6cab566ca81a21f.

**nota**  
{{LAMBDA\_REGION}}e {{WM\_REGION}} será diferente somente se forem necessárias chamadas entre regiões. Se as chamadas entre regiões não forem necessárias, elas serão iguais.

## Exemplo de Amazon WorkMail usando uma função CAP Lambda
<a name="cap_example_github"></a>

Para ver um exemplo da Amazon WorkMail usando uma função CAP Lambda para consultar um endpoint do EWS, consulte este [AWS exemplo de aplicativo](https://github.com/aws-samples/amazon-workmail-lambda-templates/tree/master/workmail-cap-exchange) no repositório de aplicativos *Serverless* for Amazon. WorkMail GitHub 