

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á.

# Invocar funções do Lambda
<a name="lambda-invoke-functions"></a>

## Etapa 1: criar uma função do Lambda
<a name="lambda-create-function"></a>

Durante a execução da campanha, as campanhas externas invocarão sua função do Lambda com um lote de perfis e esperam uma resposta contendo resultados para cada um.

### Carga útil da solicitação
<a name="lambda-request-payload"></a>

Quando sua função do Lambda for invocada, ela receberá uma carga JSON com a seguinte estrutura:

#### Estrutura de carga útil
<a name="lambda-payload-structure"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "string",
      "RunId": "string",
      "ActionId": "string",
      "CampaignName": "string"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "string",
        "CustomerData": "string",
        "IdempotencyToken": "string"
      }
    ]
  }
}
```

#### Descrições de campo
<a name="lambda-field-descriptions"></a>

##### InvocationMetadata
<a name="lambda-invocation-metadata"></a>
+ **CampaignContext**: contém metadados sobre a execução da campanha
+ **CampaignId**: identificador exclusivo para a campanha
+ **RunId**: identificador exclusivo para essa campanha específica
+ **ActionId**: O identificador da ação de fluxo que está sendo executada pelas campanhas externas
+ **CampaignName**: Human-readable nome da campanha

##### Itens
<a name="lambda-items"></a>
+ **CustomerProfiles**: Conjunto de perfis de clientes para processar (agrupados para maior eficiência)
+ **ProfileId**: identificador exclusivo para o perfil do cliente
+ **CustomerData**: string JSON do perfil do cliente
+ **IdempotencyToken**: Token exclusivo para essa invocação específica para garantir um processamento idempotente

#### Exemplo de carga útil de solicitação
<a name="lambda-example-request"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "campaign-12345",
      "RunId": "run-67890",
      "ActionId": "activity-abc123",
      "CampaignName": "Welcome Campaign"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "customer-001",
        "CustomerData": "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"email\":\"john.doe@example.com\"}",
        "IdempotencyToken": "token-xyz789"
      },
      {
        "ProfileId": "customer-002",
        "CustomerData": "{\"firstName\":\"Jane\",\"lastName\":\"Smith\",\"email\":\"jane.smith@example.com\"}",
        "IdempotencyToken": "token-abc456"
      }
    ]
  }
}
```

### Carga útil de resposta esperada
<a name="lambda-response-payload"></a>

Sua função do Lambda deve retornar uma resposta JSON com a seguinte estrutura:

#### Estrutura de respostas
<a name="lambda-response-structure"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "string",
        "ResultData": {}
      }
    ]
  }
}
```

#### Descrições de campo
<a name="lambda-response-field-descriptions"></a>

##### Itens
<a name="lambda-response-items"></a>
+ **CustomerProfiles**: matriz de resultados correspondente a cada perfil de cliente na solicitação
+ **ID**: Deve corresponder ao `ProfileId` da solicitação
+ **ResultData**: objeto JSON personalizado contendo seus resultados de processamento (opcional)

#### Exemplo de carga útil de resposta
<a name="lambda-example-response"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "customer-001",
        "ResultData": {
          "recommendedProduct": "Premium Plan",
          "score": 85,
          "nextAction": "send_email"
        }
      },
      {
        "Id": "customer-002",
        "ResultData": {
          "error": "Invalid customer data",
          "errorCode": "VALIDATION_ERROR"
        }
      }
    ]
  }
}
```

## Restrições importantes
<a name="lambda-constraints"></a>

### Limites de tamanho de carga
<a name="lambda-payload-size-limits"></a>
+ **Tamanho máximo da carga de resposta**: 32 KB por perfil de cliente
+ Se você `ResultData` exceder esse limite, a invocação será marcada como inválida

### Requisitos de resposta
<a name="lambda-response-requirements"></a>
+ Você deve fornecer uma resposta para cada item `ProfileId` incluído na solicitação
+ As respostas ausentes serão tratadas como erros
+ O `Id` campo na resposta deve corresponder exatamente ao `ProfileId` da solicitação

### Tratamento de erros
<a name="lambda-error-handling"></a>
+ Se sua função do Lambda gerar uma exceção, todos os perfis no lote serão marcados como falhados
+ Inclua detalhes do erro `ResultData` para fins de depuração

### Tipo de invocação
<a name="lambda-invocation-type"></a>
+ **Tipo de invocação**: `REQUEST_RESPONSE` (síncrono)
+ Sua função deve retornar resultados em 30 segundos, em vez de processar de forma assíncrona. As respostas que demorarem mais de 30 segundos resultarão em falha na ação

## Etapa 2: conceda às campanhas externas acesso à sua função do Lambda
<a name="lambda-grant-access"></a>

1. Abra o console do Amazon Connect em [ https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. Na página Instâncias, escolha o nome da instância na coluna **Alias da instância**. Esse nome da instância aparece no URL que você usa para acessar o Amazon Connect.

1. No painel de navegação, em ** Canais e comunicações**, escolha Campanhas ** externas. **

1. Na ** seção ** Configurar ações personalizadas, use a caixa ** suspensa de funções do ** Lambda para selecionar a função a ser adicionada à sua instância de campanhas externas.

1. Escolha **Adicionar função do Lambda**. Confirme se o ARN da função é adicionado em **Lambda Functions (Funções Lambda)**.

**Importante**  
O procedimento anterior do console adiciona automaticamente a política baseada em recursos necessária à função do Lambda. Se você usa a AWS CLI ou o SDK, pode chamar a [ PutConnectInstanceIntegration ](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-outbound-campaigns-v2_PutConnectInstanceIntegration.html) API com a configuração de `lambda` integração. Essa API adiciona automaticamente a política baseada em recursos necessária à sua função do Lambda, assim como o console.  
Se você precisar adicionar manualmente a política baseada em recursos (por exemplo, para invocações entre contas), adicione uma declaração de política que conceda ao principal do `connect-campaigns.amazonaws.com` serviço permissão para invocar sua função. Opcionalmente, você pode adicionar um `Condition` elemento com `AWS:SourceAccount` e restringir `AWS:SourceArn` o acesso à sua conta e à instância do Connect Customer. Recomendamos incluir as duas condições. O exemplo a seguir mostra a declaração de política necessária.  

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "connect-campaigns.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:{{region}}:{{account-id}}:function:{{function-name}}",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "{{account-id}}"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:connect:{{region}}:{{account-id}}:instance/{{instance-id}}"
        }
      }
    }
  ]
}
```
Para obter mais informações sobre políticas baseadas em recursos, consulte [ Usando políticas baseadas em recursos para o Lambda ](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) no Guia do desenvolvedor do Lambda. * *

## Etapa 3: invocar um Lambda a partir de uma campanha
<a name="lambda-invoke-from-journey"></a>

1. Abra ou crie um ** fluxo de ** viagem.

1. Adicione um ** bloco de ação ** personalizado (no ** grupo ** Integrar) à grade. Conecte as ramificações ao bloco e vice-versa.

1. Escolha o título do ** bloco de ações ** personalizadas para abrir sua página de propriedades.

1. Em ** Função ARN**, escolha na lista de funções que você adicionou à sua instância de campanhas externas.

## Etapa 4: Consumir a resposta da função Lambda
<a name="lambda-consume-response"></a>

### Acessar variáveis diretamente
<a name="lambda-access-variables"></a>

Para acessar essas variáveis diretamente em um bloco de fluxo, adicione o bloco após o ** bloco de ação ** personalizada e, em seguida, faça referência aos atributos conforme mostrado no exemplo a seguir:

```
RecommendedProduct - $.LambdaInvocation.ResultData.recommendedProduct
Score - $.LambdaInvocation.ResultData.score
```

Certifique-se de que o nome especificado para o atributo de origem corresponda ao nome da chave `ResultData` retornado pelo Lambda.