

**Aviso de fim do suporte:** em 30 de outubro de 2026, AWS encerrará o suporte para o Amazon Pinpoint. Após 30 de outubro de 2026, você não poderá mais acessar o console do Amazon Pinpoint nem seus recursos (endpoints, segmentos, campanhas, jornadas e analytics). Para obter mais informações, consulte [Fim do suporte do Amazon Pinpoint](https://docs.aws.amazon.com/console/pinpoint/migration-guide). **Observação:** APIs relacionados a SMS, voz, push móvel, OTP e validação de número de telefone não são afetados por essa alteração e são compatíveis com o AWS End User Messaging.

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

# Criar ou importar segmentos no Amazon Pinpoint
<a name="segments"></a>

Um *segmento* de usuário representa um subconjunto de usuários com base em características compartilhadas, tais como os usuários que acessaram o seu aplicativo ou que plataforma de dispositivo usam. Um segmento designa que usuários receberão as mensagens entregues por uma campanha. Defina segmentos para que você possa alcançar o público correto quando desejar convidar usuários de volta para seu aplicativo, fazer ofertas especiais, ou aumentar o envolvimento dos usuários e as aquisições.

Depois de criar um segmento, você pode usá-lo em uma ou mais campanhas. A campanha oferece mensagens personalizadas para os usuários no segmento.

Para mais informações, leia [Segmentos](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-segments.html).

**Topics**
+ [Criar segmentos no Amazon Pinpoint](segments-dimensional.md)
+ [Importar segmentos no Amazon Pinpoint](segments-importing.md)
+ [Personalize segmentos do Amazon Pinpoint usando uma função AWS Lambda](segments-dynamic.md)

# Criar segmentos no Amazon Pinpoint
<a name="segments-dimensional"></a>

Para chegar ao público-alvo de uma campanha, crie um segmento baseado nos dados relatados pelo aplicativo. Por exemplo, para entrar em contato com usuários que não usaram o aplicativo recentemente, você pode definir um segmento para aqueles que não o acessaram nos últimos 30 dias.

Para ver mais exemplos de código, consulte [Exemplos de código](https://docs.aws.amazon.com/pinpoint/latest/developerguide/service_code_examples.html).

## Crie segmentos com o AWS SDK para Java
<a name="segments-dimensional-example-java"></a>

O exemplo a seguir demonstra como criar um segmento com o AWS SDK para Java. O exemplo cria um segmento de usuários cuja equipe é a `Lakers` e esteve ativa nos últimos 30 dias. Depois que o segmento for criado, você poderá usá-lo como parte de uma campanha ou jornada. Para ver um exemplo de uso de um segmento com uma campanha, consulte [Criar campanhas do Amazon Pinpoint de forma programática](campaigns.md). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.pinpoint.PinpointClient;
import software.amazon.awssdk.services.pinpoint.model.AttributeDimension;
import software.amazon.awssdk.services.pinpoint.model.SegmentResponse;
import software.amazon.awssdk.services.pinpoint.model.AttributeType;
import software.amazon.awssdk.services.pinpoint.model.RecencyDimension;
import software.amazon.awssdk.services.pinpoint.model.SegmentBehaviors;
import software.amazon.awssdk.services.pinpoint.model.SegmentDemographics;
import software.amazon.awssdk.services.pinpoint.model.SegmentLocation;
import software.amazon.awssdk.services.pinpoint.model.SegmentDimensions;
import software.amazon.awssdk.services.pinpoint.model.WriteSegmentRequest;
import software.amazon.awssdk.services.pinpoint.model.CreateSegmentRequest;
import software.amazon.awssdk.services.pinpoint.model.CreateSegmentResponse;
import software.amazon.awssdk.services.pinpoint.model.PinpointException;
import java.util.HashMap;
import java.util.Map;
```

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.pinpoint.PinpointClient;
import software.amazon.awssdk.services.pinpoint.model.AttributeDimension;
import software.amazon.awssdk.services.pinpoint.model.SegmentResponse;
import software.amazon.awssdk.services.pinpoint.model.AttributeType;
import software.amazon.awssdk.services.pinpoint.model.RecencyDimension;
import software.amazon.awssdk.services.pinpoint.model.SegmentBehaviors;
import software.amazon.awssdk.services.pinpoint.model.SegmentDemographics;
import software.amazon.awssdk.services.pinpoint.model.SegmentLocation;
import software.amazon.awssdk.services.pinpoint.model.SegmentDimensions;
import software.amazon.awssdk.services.pinpoint.model.WriteSegmentRequest;
import software.amazon.awssdk.services.pinpoint.model.CreateSegmentRequest;
import software.amazon.awssdk.services.pinpoint.model.CreateSegmentResponse;
import software.amazon.awssdk.services.pinpoint.model.PinpointException;
import java.util.HashMap;
import java.util.Map;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CreateSegment {
        public static void main(String[] args) {
                final String usage = """

                                Usage:   <appId>

                                Where:
                                  appId - The application ID to create a segment for.

                                """;

                if (args.length != 1) {
                        System.out.println(usage);
                        System.exit(1);
                }

                String appId = args[0];
                PinpointClient pinpoint = PinpointClient.builder()
                                .region(Region.US_EAST_1)
                                .build();

                SegmentResponse result = createSegment(pinpoint, appId);
                System.out.println("Segment " + result.name() + " created.");
                System.out.println(result.segmentType());
                pinpoint.close();
        }

        public static SegmentResponse createSegment(PinpointClient client, String appId) {
                try {
                        Map<String, AttributeDimension> segmentAttributes = new HashMap<>();
                        segmentAttributes.put("Team", AttributeDimension.builder()
                                        .attributeType(AttributeType.INCLUSIVE)
                                        .values("Lakers")
                                        .build());

                        RecencyDimension recencyDimension = RecencyDimension.builder()
                                        .duration("DAY_30")
                                        .recencyType("ACTIVE")
                                        .build();

                        SegmentBehaviors segmentBehaviors = SegmentBehaviors.builder()
                                        .recency(recencyDimension)
                                        .build();

                        SegmentDemographics segmentDemographics = SegmentDemographics
                                        .builder()
                                        .build();

                        SegmentLocation segmentLocation = SegmentLocation
                                        .builder()
                                        .build();

                        SegmentDimensions dimensions = SegmentDimensions
                                        .builder()
                                        .attributes(segmentAttributes)
                                        .behavior(segmentBehaviors)
                                        .demographic(segmentDemographics)
                                        .location(segmentLocation)
                                        .build();

                        WriteSegmentRequest writeSegmentRequest = WriteSegmentRequest.builder()
                                        .name("MySegment")
                                        .dimensions(dimensions)
                                        .build();

                        CreateSegmentRequest createSegmentRequest = CreateSegmentRequest.builder()
                                        .applicationId(appId)
                                        .writeSegmentRequest(writeSegmentRequest)
                                        .build();

                        CreateSegmentResponse createSegmentResult = client.createSegment(createSegmentRequest);
                        System.out.println("Segment ID: " + createSegmentResult.segmentResponse().id());
                        System.out.println("Done");
                        return createSegmentResult.segmentResponse();

                } catch (PinpointException e) {
                        System.err.println(e.awsErrorDetails().errorMessage());
                        System.exit(1);
                }
                return null;
        }
}
```

Quando você executa este exemplo, o conteúdo abaixo é impresso na janela do console do seu IDE:

```
Segment ID: 09cb2967a82b4a2fbab38fead8d1f4c4
```

Para ver o exemplo completo do SDK, consulte [CreateSegment.java on. [GitHub](https://github.com/)](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/pinpoint/src/main/java/com/example/pinpoint/CreateSegment.java)

# Importar segmentos no Amazon Pinpoint
<a name="segments-importing"></a>

Com o Amazon Pinpoint, você pode definir um segmento de usuário importando informações sobre os endpoints que pertencem ao segmento. Um *endpoint* é um destino de mensagens único, como um token de push para dispositivos móveis, um número de celular ou um endereço de e-mail.

A importação de segmentos é útil se você já criou segmentos de usuários fora do Amazon Pinpoint, mas deseja envolver os usuários em campanhas do Amazon Pinpoint.

Quando você importa um segmento, o Amazon Pinpoint obtém os endpoints do segmento do Amazon Simple Storage Service (Amazon S3). Antes de importar, adicione os endpoints ao Amazon S3 e crie um perfil do IAM que conceda ao Amazon Pinpoint acesso ao Amazon S3. Em seguida, você informa a ao Amazon Pinpoint o local de armazenamento dos endpoints do Amazon S3, e o Amazon Pinpoint adiciona cada endpoint ao segmento.

Para criar o perfil do IAM, consulte [Perfil do IAM para importação de endpoints ou segmentos](permissions-import-segment.md). Para obter informações sobre a importação de um segmento usando o console do Amazon Pinpoint, consulte [Importar segmentos](https://docs.aws.amazon.com/pinpoint/latest/userguide/segments-importing.html) no *Guia do usuário do Amazon Pinpoint*.

Para ver mais exemplos de código, consulte [Exemplos de código](https://docs.aws.amazon.com/pinpoint/latest/developerguide/service_code_examples.html).

## Importar um segmento com o AWS SDK para Java
<a name="segments-importing-example-java"></a>

O exemplo a seguir demonstra como importar um segmento usando o AWS SDK para Java.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.pinpoint.PinpointClient;
import software.amazon.awssdk.services.pinpoint.model.CreateImportJobRequest;
import software.amazon.awssdk.services.pinpoint.model.ImportJobResponse;
import software.amazon.awssdk.services.pinpoint.model.ImportJobRequest;
import software.amazon.awssdk.services.pinpoint.model.Format;
import software.amazon.awssdk.services.pinpoint.model.CreateImportJobResponse;
import software.amazon.awssdk.services.pinpoint.model.PinpointException;
```

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.pinpoint.PinpointClient;
import software.amazon.awssdk.services.pinpoint.model.CreateImportJobRequest;
import software.amazon.awssdk.services.pinpoint.model.ImportJobResponse;
import software.amazon.awssdk.services.pinpoint.model.ImportJobRequest;
import software.amazon.awssdk.services.pinpoint.model.Format;
import software.amazon.awssdk.services.pinpoint.model.CreateImportJobResponse;
import software.amazon.awssdk.services.pinpoint.model.PinpointException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ImportSegment {
    public static void main(String[] args) {
        final String usage = """

                Usage:   <appId> <bucket> <key> <roleArn>\s

                Where:
                  appId - The application ID to create a segment for.
                  bucket - The name of the Amazon S3 bucket that contains the segment definitons.
                  key - The key of the S3 object.
                  roleArn - ARN of the role that allows Amazon Pinpoint to access S3. You need to set trust management for this to work. See https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html
                  """;

        if (args.length != 4) {
            System.out.println(usage);
            System.exit(1);
        }

        String appId = args[0];
        String bucket = args[1];
        String key = args[2];
        String roleArn = args[3];

        PinpointClient pinpoint = PinpointClient.builder()
                .region(Region.US_EAST_1)
                .build();

        ImportJobResponse response = createImportSegment(pinpoint, appId, bucket, key, roleArn);
        System.out.println("Import job for " + bucket + " submitted.");
        System.out.println("See application " + response.applicationId() + " for import job status.");
        System.out.println("See application " + response.jobStatus() + " for import job status.");
        pinpoint.close();
    }

    public static ImportJobResponse createImportSegment(PinpointClient client,
            String appId,
            String bucket,
            String key,
            String roleArn) {

        try {
            ImportJobRequest importRequest = ImportJobRequest.builder()
                    .defineSegment(true)
                    .registerEndpoints(true)
                    .roleArn(roleArn)
                    .format(Format.JSON)
                    .s3Url("s3://" + bucket + "/" + key)
                    .build();

            CreateImportJobRequest jobRequest = CreateImportJobRequest.builder()
                    .importJobRequest(importRequest)
                    .applicationId(appId)
                    .build();

            CreateImportJobResponse jobResponse = client.createImportJob(jobRequest);
            return jobResponse.importJobResponse();

        } catch (PinpointException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return null;
    }
}
```

Para ver o exemplo completo do SDK, consulte [ImportingSegments.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/pinpoint/src/main/java/com/example/pinpoint/ImportSegment.java/) no [GitHub](https://github.com/).

# Personalize segmentos do Amazon Pinpoint usando uma função AWS Lambda
<a name="segments-dynamic"></a>


|  | 
| --- |
| Essa documentação é de pré-lançamento para um atributo em versão beta pública. Está sujeita a alteração. | 

Você pode usar AWS Lambda para personalizar a forma como uma campanha do Amazon Pinpoint envolve seu público-alvo. Com AWS Lambda, você pode modificar o segmento da campanha no momento em que o Amazon Pinpoint envia a mensagem da campanha.

AWS Lambda é um serviço de computação que você pode usar para executar código sem provisionar ou gerenciar servidores. Você empacota seu código e faz upload no Lambda como *funções do Lambda*. O Lambda executa uma função quando ela é invocada, o que pode ser feito manualmente por você ou automaticamente em resposta a eventos. Para obter mais informações, consulte o [Guia do desenvolvedor do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html).

Para atribuir uma função do Lambda a uma campanha, defina as configurações `CampaignHook` da campanha usando o recurso [Campanha](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-campaigns-campaign-id.html) na API do Amazon Pinpoint. Essas configurações incluem o nome da função do Lambda. Elas também incluem o modo `CampaignHook` que define se o Amazon Pinpoint recebe um valor de retorno da função.

Uma função do Lambda que você atribui a uma campanha é referida como uma *extensão* do Amazon Pinpoint.

Com as configurações de `CampaignHook` definidas, o Amazon Pinpoint invoca automaticamente a função do Lambda ao executar a campanha, antes de enviar a mensagem da campanha. Quando o Amazon Pinpoint invoca a função, ele fornece *dados de eventos* sobre a entrega da mensagem. Esses dados incluem o segmento da campanha, que é a lista de endpoints aos quais o Amazon Pinpoint envia a mensagem.

Se o modo `CampaignHook` estiver definido como `FILTER`, o Amazon Pinpoint permite que a função modifique e retorne o segmento antes de enviar a mensagem. Por exemplo, a função pode atualizar as definições de endpoint com atributos que contenham dados de uma origem externa ao Amazon Pinpoint. Ou a função pode filtrar o segmento removendo determinados endpoints, com base em condições no código da função. Depois de o Amazon Pinpoint receber o segmento modificado da função, ele envia a mensagem para cada um dos endpoints do segmento usando o canal de entrega da campanha.

Ao processar seus segmentos com AWS Lambda, você tem mais controle sobre para quem envia mensagens e o que essas mensagens contêm. Você pode personalizar suas campanhas em tempo real, no momento em que as mensagens da campanha são enviadas. A filtragem de segmentos permite que você envolva subconjuntos de segmentos definidos de maneira mais restrita. Adicionar ou atualizar os atributos do endpoint permite que você disponibilize novos dados para variáveis de mensagens.

**nota**  
Você também pode usar as configurações de `CampaignHook` para atribuir uma função do Lambda que lide com a entrega de mensagens. Esse tipo de função é útil para a entrega de mensagens por meio de canais personalizados aos quais o Amazon Pinpoint não oferece suporte, como plataformas de mídia social. Para obter mais informações, consulte [Criar um canal personalizado no Amazon Pinpoint usando um webhook ou uma função do Lambda](channels-custom.md).  
Ao invocar um hook do Lambda usando o Amazon Pinpoint, a função do Lambda também deve estar na mesma região do projeto do Amazon Pinpoint. 

Para modificar segmentos de campanha com AWS Lambda, primeiro crie uma função que processe os dados do evento enviados pelo Amazon Pinpoint e retorne um segmento modificado. Em seguida, autorize o Amazon Pinpoint a invocar a função atribuindo uma política de função do Lambda. Por fim, atribua a função a uma ou mais campanhas, definindo as configurações `CampaignHook`.

Para ver mais exemplos de código, consulte [Exemplos de código](https://docs.aws.amazon.com/pinpoint/latest/developerguide/service_code_examples.html).

## Dados de eventos
<a name="segments-dynamic-payload"></a>

Quando o Amazon Pinpoint invoca a função do Lambda, ele fornece a carga a seguir como dados de eventos:

```
{
  "MessageConfiguration": {Message configuration}
  "ApplicationId": ApplicationId,
  "CampaignId": CampaignId,
  "TreatmentId": TreatmentId,
  "ActivityId": ActivityId,
  "ScheduledTime": Scheduled Time,
  "Endpoints": {
    EndpointId: {Endpoint definition}
    . . .
  }
}
```

AWS Lambda passa os dados do evento para o código da função. Os dados de eventos fornecem os seguintes atributos:
+ `MessageConfiguration`: tem a mesma estrutura do objeto `DirectMessageConfiguration` do recurso [Mensagens](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html) na API do Amazon Pinpoint. 
+ `ApplicationId`: o ID do projeto do Amazon Pinpoint ao qual a campanha pertence.
+ `CampaignId`: o ID da campanha do Amazon Pinpoint para o qual a função é invocada.
+ `TreatmentId`— O ID de uma variação da campanha usada para A/B testes.
+ `ActivityId`: o ID da atividade sendo executada pela campanha.
+ `ScheduledTime`: a data e o horário, em formato ISO 8601, em que as mensagens da campanha serão entregues.
+ `Endpoints`— Um mapa que associa o endpoint às definições do endpoint IDs . Cada carga de dados de eventos contém até 50 endpoints. Se o segmento da campanha contiver mais de 50 endpoints, o Amazon Pinpoint invocará a função repetidamente, com até 50 endpoints por vez, até que todos os endpoints sejam processados. 

## Criar uma função do Lambda
<a name="segments-dynamic-lambda-create"></a>

Para saber como criar uma função do Lambda, consulte [Conceitos básicos](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) no *Guia do desenvolvedor do AWS Lambda *. Ao criar a função, lembre-se de que a entrega de mensagens falha nas seguintes condições:
+ A função do Lambda leva mais de 15 segundos para retornar o segmento modificado.
+ O Amazon Pinpoint não consegue decodificar o valor de retorno da função.
+ A função requer mais de 3 tentativas do Amazon Pinpoint para invocá-lo com êxito.

O Amazon Pinpoint só aceita definições de endpoint no valor de retorno da função. A função não consegue modificar outros elementos nos dados de eventos.

### Exemplo de função do Lambda
<a name="segments-dynamic-lambda-example"></a>

Sua função do Lambda processa os dados de eventos enviados pelo Amazon Pinpoint e retorna os endpoints modificados, conforme mostrado pelo seguinte handler de exemplo, escrito em Node.js:

```
'use strict';
 
exports.handler = (event, context, callback) => {
    for (var key in event.Endpoints) {
        if (event.Endpoints.hasOwnProperty(key)) {
            var endpoint = event.Endpoints[key];
            var attr = endpoint.Attributes;
            if (!attr) {
                attr = {};
                endpoint.Attributes = attr;
            }
            attr["CreditScore"] = [ Math.floor(Math.random() * 200) + 650];
        }
    }
    console.log("Received event:", JSON.stringify(event, null, 2));
    callback(null, event.Endpoints);
};
```

O Lambda passa os dados de eventos para o handler como o parâmetro `event`.

Neste exemplo, o handler percorre cada endpoint no objeto `event.Endpoints` e adiciona um novo atributo, `CreditScore`, ao endpoint. O valor do atributo `CreditScore` é simplesmente um número aleatório.

A `console.log()` declaração registra o evento em CloudWatch Logs.

A instrução `callback()` retorna os endpoints modificados ao Amazon Pinpoint. Normalmente, o parâmetro `callback` é opcional em funções do Lambda Node.js, mas é necessário neste contexto porque a função deve retornar os endpoints atualizados ao Amazon Pinpoint.

Sua função deve retornar endpoints no mesmo formato fornecido pelos dados do evento, que é um mapa que associa o endpoint às definições do endpoint IDs , como no exemplo a seguir:

```
{
    "eqmj8wpxszeqy/b3vch04sn41yw": {
        "ChannelType": "GCM",
        "Address": "4d5e6f1a2b3c4d5e6f7g8h9i0j1a2b3c",
        "EndpointStatus": "ACTIVE",
        "OptOut": "NONE",
        "Demographic": {
            "Make": "android"
        },
        "EffectiveDate": "2017-11-02T21:26:48.598Z",
        "User": {}
    },
    "idrexqqtn8sbwfex0ouscod0yto": {
        "ChannelType": "APNS",
        "Address": "1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f",
        "EndpointStatus": "ACTIVE",
        "OptOut": "NONE",
        "Demographic": {
            "Make": "apple"
        },
        "EffectiveDate": "2017-11-02T21:26:48.598Z",
        "User": {}
    }
}
```

A função de exemplo modifica e retorna o objeto `event.Endpoints` que recebeu nos dados do evento.

Opcionalmente, você pode incluir os atributos `BodyOverride` e `TitleOverride` nas definições de endpoint que retorna.

**nota**  
Quando você usa essa solução para enviar mensagens, o Amazon Pinpoint respeita os atributos `TitleOverride` e `BodyOverride` apenas para endpoints em que o valor do atributo `ChannelType` é um dos seguintes: `ADM`, `APNS`, `APNS_SANDBOX`, `APNS_VOIP`, `APNS_VOIP_SANDBOX`, `BAIDU`, `GCM` ou `SMS`.  
O Amazon Pinpoint **não** respeita esses atributos para endpoints em que o valor do atributo `ChannelType` é `EMAIL`.

## Atribuir uma política de função do Lambda
<a name="segments-dynamic-lambda-trust-policy"></a>

Para usar a função do Lambda para processar endpoints, você deve primeiro autorizar o Amazon Pinpoint a invocar essa função. Para conceder permissão de invocação, atribua uma *política de função do Lambda * à função. A política de função do Lambda é uma política de permissões com base em recursos que designa as entidades que podem usar sua função e que ações essas entidades podem executar.

Para mais informações, consulte [ Uso de políticas com base em recursos para o AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) no *Guia do usuário do AWS Lambda *.

### Exemplo de política de função
<a name="segments-dynamic-lambda-trust-policy-example"></a>

A política a seguir concede permissão ao diretor do serviço Amazon Pinpoint para usar a `lambda:InvokeFunction` ação para uma campanha específica ()*campaign-id*:

```
{
  "Sid": "sid",
  "Effect": "Allow",
  "Principal": {
    "Service": "pinpoint.us-east-1.amazonaws.com"
  },
  "Action": "lambda:InvokeFunction",
  "Resource": "{arn:aws:lambda:us-east-1:account-id:function:function-name}",
  "Condition": {
    "StringEquals": {
      "AWS:SourceAccount": "111122223333"
    },
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/campaign-id"
    }
  }
}
```

Sua política de função requer um bloco `Condition` que inclua uma chave `AWS:SourceArn`. Esse código informa que a campanha do Amazon Pinpoint tem permissão para invocar a função. Neste exemplo, a política concede permissão apenas a uma única campanha. O `Condition` bloco também deve incluir uma `AWS:SourceAccount` chave, que controla qual AWS conta pode invocar a ação.

Para escrever uma política mais genérica, use um curinga que corresponda a vários caracteres (\$1). Por exemplo, você pode usar o seguinte `Condition` bloco para permitir que qualquer campanha em um projeto específico do Amazon Pinpoint (*application-id*) invoque a função:

```
...
"Condition": {
  "StringEquals": {
    "AWS:SourceAccount": "111122223333"
  },
  "ArnLike": {
    "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/*"
  }
}
...
```

Para que a função do Lambda seja a função padrão usada por todas as campanhas de um projeto, recomendamos configurar o bloco `Condition` para a política da maneira anterior. Para obter informações sobre como definir uma função do Lambda como padrão para todas as campanhas em um projeto, consulte [Atribuir uma função do Lambda a uma campanha](#segments-dynamic-assign).

### Conceder permissão de invocação ao Amazon Pinpoint
<a name="segments-dynamic-lambda-trust-policy-assign"></a>

Você pode usar o AWS Command Line Interface (AWS CLI) para adicionar permissões à política de função do Lambda atribuída à sua função do Lambda. Para permitir que o Amazon Pinpoint invoque uma função para uma campanha específica, use o comando do Lambda [https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html), conforme mostrado no exemplo a seguir:

```
$ aws lambda add-permission \
> --function-name function-name \
> --statement-id sid \
> --action lambda:InvokeFunction \
> --principal pinpoint.us-east-1.amazonaws.com \
> --source-account 111122223333
> --source-arn arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/campaign-id
```

Você pode pesquisar sua campanha IDs usando o comando [get-campaign](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/get-campaigns.html) no. AWS CLI Você também pode pesquisar o ID do seu aplicativo usando o comando [get-apps](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/get-apps.html).

Ao executar o comando `add-permission` do Lambda, o Lambda retornará o seguinte resultado:

```
{
  "Statement": "{\"Sid\":\"sid\",
    \"Effect\":\"Allow\",
    \"Principal\":{\"Service\":\"pinpoint.us-east-1.amazonaws.com\"},
    \"Action\":\"lambda:InvokeFunction\",
    \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:function-name\",
    \"Condition\":
      {\"ArnLike\":
        {\"AWS:SourceArn\":
         \"arn:aws:mobiletargeting:us-east-1:111122223333:apps/application-id/campaigns/campaign-id\"}}
      {\"StringEquals\": 
        {\"AWS:SourceAccount\": 
          \"111122223333\"}}}
}
```

O valor de `Statement` é uma versão da cadeia de caracteres JSON da instrução adicionada à política da função do Lambda.

## Atribuir uma função do Lambda a uma campanha
<a name="segments-dynamic-assign"></a>

Você pode atribuir uma função do Lambda a uma campanha do Amazon Pinpoint específica. Ou é possível definir a função do Lambda como o padrão usado por todas as campanhas de um projeto, exceto nas campanhas para as quais você atribui uma função individualmente.

Para atribuir uma função do Lambda a uma campanha específica, use a API do Amazon Pinpoint para criar ou atualizar um objeto [https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-campaigns.html](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-campaigns.html) e definir seu atributo `CampaignHook`. Para definir uma função do Lambda como padrão para todas as campanhas em um projeto, crie ou atualize o recurso [https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-settings.html](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-settings.html) para esse projeto e defina seu objeto `CampaignHook`.

 Em ambos os casos, defina os seguintes atributos `CampaignHook`:
+ `LambdaFunctionName`: o nome ou ARN da função do Lambda que o Amazon Pinpoint invoca antes de enviar mensagens para a campanha.
+ `Mode`: defina como `FILTER`. Com esse modo, o Amazon Pinpoint invoca a função e aguarda até que ela retorne os endpoints modificados. Após recebê-los, o Amazon Pinpoint envia a mensagem. O Amazon Pinpoint aguarda até 15 segundos antes de falhar na entrega da mensagem.

Com as configurações `CampaignHook` definidas para uma campanha, o Amazon Pinpoint invoca a função do Lambda especificada antes de enviar as mensagens da campanha. O Amazon Pinpoint aguarda o recebimento dos endpoints modificados da função. Se o Amazon Pinpoint recebe os endpoints atualizados, ele prossegue com a entrega da mensagem, usando os dados dos endpoints atualizados.