

**Avviso di fine del supporto:** il 30 ottobre 2026, AWS terminerà il supporto per Amazon Pinpoint. Dopo il 30 ottobre 2026, non potrai più accedere alla console Amazon Pinpoint o alle risorse Amazon Pinpoint (endpoint, segmenti, campagne, percorsi e analisi). Per ulteriori informazioni, consulta [Fine del supporto di Amazon Pinpoint](https://docs.aws.amazon.com/console/pinpoint/migration-guide). **Nota: per quanto** APIs riguarda gli SMS, i comandi vocali, i messaggi push su dispositivi mobili, l'OTP e la convalida del numero di telefono non sono interessati da questa modifica e sono supportati da End User Messaging. AWS 

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

# Personalizza i segmenti di Amazon Pinpoint utilizzando una funzione AWS Lambda
<a name="segments-dynamic"></a>


|  | 
| --- |
| Questa è la documentazione preliminare per una funzionalità nella versione beta pubblica. ed è soggetta a modifiche. | 

Puoi usarla AWS Lambda per personalizzare il modo in cui una campagna Amazon Pinpoint coinvolge il tuo pubblico di destinazione. Con AWS Lambda, puoi modificare il segmento della campagna nel momento in cui Amazon Pinpoint invia il messaggio della campagna.

AWS Lambda è un servizio di elaborazione che puoi utilizzare per eseguire codice senza fornire o gestire server. È possibile creare pacchetti di codice e quindi caricarli in Lambda come *funzioni Lambda*. Lambda esegue una funzione quando la funzione viene richiesta, manualmente o in modo automatico, in risposta a eventi. Per ulteriori informazioni, consulta la [Guida per gli sviluppatori di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html).

Per assegnare una funzione Lambda a una campagna, definisci le impostazioni `CampaignHook` della campagna utilizzando la risorsa [Campagna](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-campaigns-campaign-id.html) nell'API Amazon Pinpoint. Tali impostazioni includono il nome della funzione Lambda e la modalità `CampaignHook`, che specifica se Amazon Pinpoint riceve un valore restituito dalla funzione.

Una funzione Lambda assegnata a una campagna viene definita *estensione* di Amazon Pinpoint.

Dopo aver definito le impostazioni `CampaignHook`, Amazon Pinpoint richiama automaticamente la funzione Lambda quando esegue la campagna, prima di inviare il messaggio della campagna. Quando Amazon Pinpoint richiama la funzione, fornisce *dati di evento* che si riferiscono al recapito del messaggio. Questi dati includono il segmento della campagna, ovvero l'elenco degli endpoint a cui Amazon Pinpoint invia il messaggio.

Se la modalità `CampaignHook` è impostata su `FILTER`, Amazon Pinpoint consente alla funzione di modificare e restituire il segmento prima di inviare il messaggio. Ad esempio, è possibile che la funzione aggiorni le definizioni di endpoint con attributi contenenti i dati provenienti da un'origine esterna ad Amazon Pinpoint. Oppure potrebbe filtrare il segmento rimuovendo determinati endpoint, in base alle condizioni indicate nel tuo codice di funzione. Dopo che ha ricevuto il segmento modificato dalla funzione, Amazon Pinpoint invia il messaggio a ciascun endpoint del segmento utilizzando il canale di distribuzione della campagna.

Elaborando i segmenti con AWS Lambda, hai un maggiore controllo sui destinatari dei messaggi e sul loro contenuto. È possibile personalizzare le campagne in tempo reale, nel momento in cui vengono inviati i messaggi. L'applicazione di filtri ai segmenti consente di coinvolgere sottoinsiemi di segmenti definiti in modo più specifico. L'aggiunta o l'aggiornamento di attributi di endpoint permette anche di rendere disponibili nuovi dati per le variabili dei messaggi.

**Nota**  
È inoltre possibile utilizzare le impostazioni `CampaignHook` per assegnare una funzione Lambda che gestisca il recapito dei messaggi. Questo tipo di funzione è utile per distribuire messaggi tramite canali personalizzati non supportati da Amazon Pinpoint, ad esempio piattaforme di social media. Per ulteriori informazioni, consulta [Crea un canale personalizzato in Amazon Pinpoint utilizzando un webhook o una funzione Lambda](channels-custom.md).  
Quando si richiama un hook Lambda utilizzando Amazon Pinpoint, anche la funzione Lambda deve trovarsi nella stessa regione del progetto Amazon Pinpoint. 

Per modificare i segmenti della campagna con AWS Lambda, crea innanzitutto una funzione che elabori i dati degli eventi inviati da Amazon Pinpoint e restituisca un segmento modificato. Quindi, autorizza Amazon Pinpoint a richiamare la funzione assegnando una policy di funzione Lambda. Infine, bisogna assegnare la funzione a una o più campagne definendo le impostazioni `CampaignHook`.

Per altri esempi di codice, consulta Esempi di [codice.](https://docs.aws.amazon.com/pinpoint/latest/developerguide/service_code_examples.html)

## Dati eventi
<a name="segments-dynamic-payload"></a>

Quando richiama la funzione Lambda, Amazon Pinpoint fornisce il payload seguente come dati degli eventi:

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

AWS Lambda passa i dati dell'evento al codice della funzione. I dati sugli eventi forniscono gli attributi seguenti:
+ `MessageConfiguration`: ha la stessa struttura dell'oggetto `DirectMessageConfiguration` della risorsa [Messages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html) nell'API Amazon Pinpoint. 
+ `ApplicationId`; ID del progetto Amazon Pinpoint a cui appartiene la campagna.
+ `CampaignId`: ID della campagna Amazon Pinpoint per cui viene richiamata la funzione.
+ `TreatmentId`— L'ID di una variante della campagna utilizzata per i A/B test.
+ `ActivityId`: ID dell'attività eseguita dalla campagna.
+ `ScheduledTime`: data e ora, in formato ISO 8601, di recapito dei messaggi della campagna.
+ `Endpoints`— Una mappa che associa l'endpoint alle definizioni degli endpoint IDs . Ogni payload di dati sugli eventi contiene fino a 50 endpoint. Se il segmento di campagna contiene più di 50 endpoint, Amazon Pinpoint richiama più volte la funzione, con un massimo di 50 endpoint alla volta, finché non vengono elaborati tutti gli endpoint. 

## Creazione di una funzione Lambda
<a name="segments-dynamic-lambda-create"></a>

Per informazioni su come creare una funzione Lambda, consulta [Guida introduttiva](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) nella *Guida per gli sviluppatori di AWS Lambda *. Quando crei una funzione, tieni presente che la consegna del messaggio non riesce quando si verificano le seguenti condizioni:
+ La funzione Lambda impiega più di 15 secondi per restituire il segmento modificato.
+ Amazon Pinpoint non è in grado di decodificare il valore restituito della funzione.
+ Per richiamare la funzione, Amazon Pinpoint deve fare più di 3 tentativi.

Amazon Pinpoint accetta solo definizioni di endpoint nel valore restituito della funzione. La funzione non può modificare altri elementi nei dati di evento.

### Funzione Lambda di esempio
<a name="segments-dynamic-lambda-example"></a>

La funzione Lambda elabora i dati degli eventi inviati da Amazon Pinpoint e restituisce l'endpoint modificato, come illustrato dal seguente gestore di esempio, scritto in 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);
};
```

Lambda trasferisce i dati degli eventi al gestore come parametro `event`.

In questo esempio il gestore scorre tutti gli endpoint nell'oggetto `event.Endpoints` e aggiunge un nuovo attributo, `CreditScore`, all'endpoint. Il valore dell'attributo `CreditScore` è semplicemente un numero casuale.

L'`console.log()`istruzione registra l'evento in Logs. CloudWatch 

L'istruzione `callback()` restituisce gli endpoint modificati ad Amazon Pinpoint. Di solito, il parametro `callback` è facoltativo nelle funzioni Lambda Node.js, ma in questo contesto è obbligatorio perché la funzione deve restituire ad Amazon Pinpoint gli endpoint aggiornati.

La funzione deve restituire gli endpoint nello stesso formato fornito dai dati dell'evento, ovvero una mappa che associa l'endpoint alle definizioni degli endpoint IDs , come nell'esempio seguente:

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

La funzione di esempio modifica e restituisce l'oggetto `event.Endpoints` ricevuto nei dati di evento.

Facoltativamente, è possibile includere gli attributi `TitleOverride` e `BodyOverride` nelle definizioni degli endpoint che vengono restituite.

**Nota**  
Quando si utilizza questa soluzione per l'invio di messaggi, Amazon Pinpoint implementa gli attributi `TitleOverride` e `BodyOverride` solo per gli endpoint in cui l'attributo `ChannelType` ha uno dei seguenti valori: `ADM`, `APNS`, `APNS_SANDBOX`, `APNS_VOIP`, `APNS_VOIP_SANDBOX`, `BAIDU`, `GCM` o `SMS`.  
Amazon Pinpoint **non** rispetta questi attributi per gli endpoint in cui il valore dell'attributo `ChannelType` è `EMAIL`.

## Assegna un criterio di funzione Lambda
<a name="segments-dynamic-lambda-trust-policy"></a>

Prima di utilizzare la funzione Lambda per elaborare gli endpoint, è necessario autorizzare Amazon Pinpoint a richiamare la funzione Lambda. Per concedere l'autorizzazione per l'invocazione, assegna una *policy di funzione Lambda* alla funzione. Una policy di funzione Lambda è una policy di autorizzazione basata su risorse che designa le entità che possono utilizzare la funzione e le azioni che tali entità possono eseguire.

Per ulteriori informazioni, consulta [Uso delle policy basate sulle risorse per AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) nella *Guida per gli sviluppatori di AWS Lambda *.

### Policy di funzione di esempio
<a name="segments-dynamic-lambda-trust-policy-example"></a>

La seguente politica concede l'autorizzazione al responsabile del servizio Amazon Pinpoint di utilizzare `lambda:InvokeFunction` l'azione per una campagna *campaign-id* specifica ():

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

La policy di funzione richiede un blocco `Condition` che includa una chiave `AWS:SourceArn`. Questo codice indica la campagna Amazon Pinpoint a cui è consentito richiamare la funzione. In questo esempio, la policy concede l'autorizzazione per una sola campagna. Il `Condition` blocco deve includere anche una `AWS:SourceAccount` chiave, che controlla quale AWS account può richiamare l'azione.

Per scrivere una policy più generica, utilizza un caratteri jolly di corrispondenza con più caratteri (\$1). Ad esempio, puoi utilizzare il seguente `Condition` blocco per consentire a qualsiasi campagna in uno specifico progetto Amazon Pinpoint (*application-id*) di richiamare la funzione:

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

Se vuoi che la funzione Lambda sia la funzione predefinita utilizzata da tutte le campagne per un progetto, è consigliabile configurare il blocco `Condition` per la policy nel modo precedente. Per informazioni sull'impostazione di una funzione Lambda come predefinita per tutte le campagne in un progetto, consulta [Assegnare una funzione Lambda a una campagna](#segments-dynamic-assign).

### Concedi l'autorizzazione di chiamata di Amazon Pinpoint
<a name="segments-dynamic-lambda-trust-policy-assign"></a>

Puoi usare il AWS Command Line Interface (AWS CLI) per aggiungere autorizzazioni alla politica della funzione Lambda assegnata alla tua funzione Lambda. Per consentire ad Amazon Pinpoint di richiamare una funzione per una determinata campagna, usa il comando 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), come mostrato nell'esempio seguente:

```
$ 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
```

Puoi cercare la tua campagna IDs utilizzando il comando [get-campaigns](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/get-campaigns.html) in. AWS CLI Puoi anche cercare l'ID dell'applicazione utilizzando il comando [get-apps](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/get-apps.html).

Quando esegui il comando Lambda `add-permission`, viene restituito l'output seguente:

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

Il valore di `Statement` è una versione in formato stringa JSON dell'istruzione aggiunta alla policy della funzione Lambda.

## Assegnare una funzione Lambda a una campagna
<a name="segments-dynamic-assign"></a>

È possibile assegnare una funzione Lambda a una campagna Amazon Pinpoint specifica. In alternativa, puoi impostare la funzione Lambda come predefinita per tutte le campagne in un progetto, tranne le campagne a cui assegni una funzione individualmente.

Per assegnare una funzione Lambda a una campagna specifica, utilizza l'API Amazon Pinpoint per creare o aggiornare un oggetto [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 definire il relativo attributo `CampaignHook`. Per impostare una funzione Lambda come predefinita per tutte le campagne in un progetto, crea o aggiorna la risorsa [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) per il progetto in questione e definisci il relativo oggetto `CampaignHook`.

 In entrambi i casi, imposta gli attributi `CampaignHook` seguenti:
+ `LambdaFunctionName`: nome o nome della risorsa Amazon (ARN) della funzione Lambda richiamata da Amazon Pinpoint prima di inviare i messaggi per la campagna.
+ `Mode`: impostato su `FILTER`. Con questa modalità, Amazon Pinpoint richiama la funzione e attende che restituisca gli endpoint modificati. Dopo averli ricevuti, Amazon Pinpoint invia il messaggio. Amazon Pinpoint attende un massimo di 15 secondi prima che il recapito dei messaggi venga impostato come non riuscito.

Con le impostazioni `CampaignHook` definite per una campagna, Amazon Pinpoint richiama la funzione Lambda specificata prima di inviare i messaggi della campagna. Amazon Pinpoint attende di ricevere gli endpoint modificati dalla funzione. Se riceve gli endpoint aggiornati, Amazon Pinpoint procede con il recapito dei messaggi utilizzando i dati aggiornati.