

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

# Crea funzioni Lambda da utilizzare con la messaggistica SMS di Amazon Pinpoint
<a name="tutorials-two-way-sms-part-3"></a>

Questa sezione mostra come creare e configurare due funzioni Lambda da utilizzare con la messaggistica SMS di Amazon Pinpoint. Successivamente, configurerai API Gateway e Amazon Pinpoint per richiamare queste funzioni quando si verificano determinati eventi. Entrambe le funzioni creano e aggiornano gli endpoint nel progetto Amazon Pinpoint specificato. La prima funzione utilizza anche la funzione di convalida dei numeri di telefono.

## Creazione della funzione che convalida le informazioni sul cliente e crea gli endpoint.
<a name="tutorials-two-way-sms-part-3-create-register-function"></a>

La prima funzione viene inserita dal modulo di registrazione, che riceve da Amazon API Gateway. Utilizza queste informazioni per ottenere informazioni sul numero di telefono del cliente utilizzando la funzione di [convalida del numero di telefono](https://docs.aws.amazon.com/pinpoint/latest/developerguide/validate-phone-numbers.html) di Amazon Pinpoint. La funzione utilizza quindi i dati convalidati per creare un nuovo endpoint nel progetto Amazon Pinpoint specificato. Per impostazione predefinita, l'endpoint creato dalla funzione è escluso dalle future comunicazioni dell'utente, ma questa condizione può essere modificata dalla seconda funzione. Infine, questa funzione invia al cliente un messaggio per verificare la volontà di ricevere SMS dall'utente.

**Creazione della funzione Lambda**

1. Apri la AWS Lambda console all'indirizzo. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Scegli **Crea funzione**.

1. In **Crea una funzione**, scegli **Usa un blueprint**.

1. Nel campo di ricerca, digitare **hello** e premere Invio. Nell'elenco dei risultati, scegliere la funzione Node.js `hello-world`, come illustrato nella seguente immagine.   
![La pagina Crea funzione che mostra Usa un blueprint selezionato.](http://docs.aws.amazon.com/it_it/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.5.png)

1. In **Basic information (Informazioni di base)** eseguire queste operazioni:
   + In **Name (Nome)**, inserire un nome per la funzione, ad esempio **RegistrationForm**.
   + Per **Role (Ruolo)** selezionare **Choose an existing role (Scegli un ruolo esistente)**.
   + Per **Ruolo esistente**, scegli il ruolo **SMSRegistrationForm** che hai creato in [Crea un ruolo IAM](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role).

   Al termine, selezionare **Create function (Crea funzione)**.

1. Per **Code source**, elimina la funzione di esempio nell'editor di codice, quindi incolla il codice seguente:

   ```
   import { PinpointClient, PhoneNumberValidateCommand, UpdateEndpointCommand, SendMessagesCommand } from "@aws-sdk/client-pinpoint"; // ES Modules import
   const pinClient = new PinpointClient({region: process.env.region});  
   
   // Make sure the SMS channel is enabled for the projectId that you specify.
   // See: https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-setup.html
   var projectId = process.env.projectId;
   
   // You need a dedicated long code in order to use two-way SMS. 
   // See: https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-voice-manage.html#channels-voice-manage-request-phone-numbers
   var originationNumber = process.env.originationNumber;
   
   // This message is spread across multiple lines for improved readability.
   var message = "ExampleCorp: Reply YES to confirm your subscription. 2 msgs per "
               + "month. No purchase req'd. Msg&data rates may apply. Terms: "
               + "example.com/terms-sms";
               
   var messageType = "TRANSACTIONAL";
   
   export const handler = async (event, context) => {
     console.log('Received event:', event);
     await validateNumber(event);
   };
   
   async function validateNumber (event) {
     var destinationNumber = event.destinationNumber;
     if (destinationNumber.length == 10) {
       destinationNumber = "+1" + destinationNumber;
     }
     var params = {
       NumberValidateRequest: {
         IsoCountryCode: 'US',
         PhoneNumber: destinationNumber
       }
     };
     try{
       const PhoneNumberValidateresponse = await pinClient.send( new  PhoneNumberValidateCommand(params));
       console.log(PhoneNumberValidateresponse);
        if (PhoneNumberValidateresponse['NumberValidateResponse']['PhoneTypeCode'] == 0) {
           await createEndpoint(PhoneNumberValidateresponse, event.firstName, event.lastName, event.source);
           
         } else {
           console.log("Received a phone number that isn't capable of receiving "
                      +"SMS messages. No endpoint created.");
         }
     }catch(err){
       console.log(err);
     }
   }
   
   async function createEndpoint(data, firstName, lastName, source) {
     var destinationNumber = data['NumberValidateResponse']['CleansedPhoneNumberE164'];
     var endpointId = data['NumberValidateResponse']['CleansedPhoneNumberE164'].substring(1);
     
     var params = {
       ApplicationId: projectId,
       // The Endpoint ID is equal to the cleansed phone number minus the leading
       // plus sign. This makes it easier to easily update the endpoint later.
       EndpointId: endpointId,
       EndpointRequest: {
         ChannelType: 'SMS',
         Address: destinationNumber,
         // OptOut is set to ALL (that is, endpoint is opted out of all messages)
         // because the recipient hasn't confirmed their subscription at this
         // point. When they confirm, a different Lambda function changes this 
         // value to NONE (not opted out).
         OptOut: 'ALL',
         Location: {
           PostalCode:data['NumberValidateResponse']['ZipCode'],
           City:data['NumberValidateResponse']['City'],
           Country:data['NumberValidateResponse']['CountryCodeIso2'],
         },
         Demographic: {
           Timezone:data['NumberValidateResponse']['Timezone']
         },
         Attributes: {
           Source: [
             source
           ]
         },
         User: {
           UserAttributes: {
             FirstName: [
               firstName
             ],
             LastName: [
               lastName
             ]
           }
         }
       }
     };
     try{
       const UpdateEndpointresponse = await pinClient.send(new UpdateEndpointCommand(params));
       console.log(UpdateEndpointresponse);
       await sendConfirmation(destinationNumber);
     }catch(err){
       console.log(err);
     }  
   }
   
   async function sendConfirmation(destinationNumber) {
     var params = {
       ApplicationId: projectId,
       MessageRequest: {
         Addresses: {
           [destinationNumber]: {
             ChannelType: 'SMS'
           }
         },
         MessageConfiguration: {
           SMSMessage: {
             Body: message,
             MessageType: messageType,
             OriginationNumber: originationNumber
           }
         }
       }
     };
     try{
       const SendMessagesCommandresponse = await pinClient.send(new SendMessagesCommand(params));
       console.log("Message sent! " 
             + SendMessagesCommandresponse['MessageResponse']['Result'][destinationNumber]['StatusMessage']);
     }catch(err){
       console.log(err);
     }
   }
   ```

1. Nella scheda **Configurazione** per **le variabili di ambiente**, scegliete **Modifica**, quindi **Aggiungi variabile di ambiente**, effettuate le seguenti operazioni:
   + Nella prima riga, creare una variabile con una chiave di **originationNumber**. Quindi, impostare il valore sul numero di telefono del codice lungo dedicato ricevuto nella [Fase 1.2](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).
**Nota**  
Ricordare di includere il segno (\+) e il codice del paese nel numero di telefono. Non includere altri caratteri speciali, ad esempio trattini (-), punti (.) o parentesi.
   + Nella seconda riga, creare una variabile con una chiave di **projectId**. Quindi, impostare il valore sull'ID univoco del progetto creato nella [Fase 1.1](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).
   + Nella terza riga, creare una variabile con una chiave di **region**. Quindi, imposta il valore sulla regione in cui viene utilizzato Amazon Pinpoint, ad esempio **us-east-1** o **us-west-2**.

   Al termine, la sezione **Environment Variables (Variabili di ambiente)** dovrebbe essere simile all'esempio illustrato nella seguente immagine.  
![Le variabili di ambiente per OriginationNumber, ProjectID e region.](http://docs.aws.amazon.com/it_it/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step1.7.png)

1. Nella parte superiore della pagina, scegli **Save (Salva)**.

### Test della funzione
<a name="tutorials-two-way-sms-part-3-create-register-function-test"></a>

Una volta creata la funzione, è opportuno testarla per verificarne la corretta configurazione. Verifica inoltre che il ruolo IAM creato disponga delle autorizzazioni appropriate.

**Per testare la funzione**

1. Seleziona la scheda **Test**.

1. Scegliete **Crea nuovo evento, effettuate** le seguenti operazioni:
   + Nel campo **Event name (Nome evento)**, inserire un nome per l'evento di test, ad esempio **MyPhoneNumber**.
   + Cancellare il codice di esempio nell'editor di codici. Incolla il codice seguente:

     ```
     {
       "destinationNumber": "{{+12065550142}}",
       "firstName": "{{Carlos}}",
       "lastName": "{{Salazar}}",
       "source": "Registration form test"
     }
     ```
   + Nel precedente codice di esempio, sostituire i valori degli attributi `destinationNumber`, `lastName` e `firstName`, con i valori da utilizzare per il test, ad esempio le informazioni di contatto personali. Quando si testa la funzione, questa invia un SMS al numero di telefono specificato nell'attributo `destinationNumber`. Verificare che il numero di telefono specificato possa ricevere gli SMS.
   + Scegliere **Create (Crea)**.

1. Scegliere **Test (Esegui test)**.

1. In **Execution result: succeeded (Risultato esecuzione: riuscita)**, selezionare **Details (Dettagli)**. Nella sezione **Log output (Output di log)**, riesaminare l'output della funzione. Verificare che la funzione sia stata eseguita senza errori.

   Controllare il dispositivo associato al `destinationNumber` specificato per verificare che abbia ricevuto il messaggio di test.

1. Apri la console Amazon Pinpoint all'indirizzo. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. Nella pagina **Tutti i progetti**, scegli il progetto che hai creato in [Crea un progetto Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).

1. Nel riquadro di navigazione, selezionare **Segments (Segmenti)**. Nella **Segments page (Pagina segmenti)**, selezionare **Create a segment (Crea un segmento)**.

1. In **Segment group 1 (Gruppo segmenti 1)**, nel campo **Add filters to refine your segment (Aggiungi filtri per rifinire i segmenti)**, selezionare **Filter by user (Filtra per utente)**.

1. Per **Scegli un attributo utente**, scegli **FirstName**. Quindi, in **Choose values (Scegli valori)**, selezionare il nome specificato nell'evento di prova.

   La sezione **Segment estimate (Stima segmenti)** dovrebbe indicare che non ci sono endpoint idonei e un endpoint totale, come illustrato nella seguente immagine. Questo risultato è previsto. Quando la funzione crea un nuovo endpoint, l'endpoint viene disattivato. I segmenti in Amazon Pinpoint escludono automaticamente gli endpoint interessati da un'azione di opt-out.  
![Il gruppo di segmenti che mostra zero punti finali.](http://docs.aws.amazon.com/it_it/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step8.9.png)

## Creazione della funzione che abilita i clienti alle comunicazioni
<a name="tutorials-two-way-sms-part-3-create-optin-function"></a>

La seconda funzione viene eseguita solo quando un cliente risponde al messaggio inviato dalla prima funzione. Se la risposta del cliente include la parola chiave specificata in [Abilita SMS bidirezionali](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel), la funzione aggiorna il record dell'endpoint per consentirgli di ricevere comunicazioni future. Amazon Pinpoint risponde inoltre automaticamente con il messaggio specificato in [Abilita](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel) SMS bidirezionali.

Se il cliente non risponde o risponde con una parola chiave diversa da quella designata, non succede nulla. L'endpoint del cliente resta in Amazon Pinpoint, ma non può essere scelto come destinazione dei segmenti.

**Creazione della funzione Lambda**

1. Apri la console all' AWS Lambda indirizzo. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1. Scegli **Crea funzione**.

1. In **Create a function (Crea una funzione)**, selezionare **Blueprints (Piani)**.

1. Nel campo di ricerca, digitare **hello** e premere Invio. Nell'elenco dei risultati, scegliere la funzione Node.js `hello-world`, come illustrato nella seguente immagine. Scegliere **Configure** (Configura).

1. In **Basic information (Informazioni di base)** eseguire queste operazioni:
   + In **Name (Nome)**, inserire un nome per la funzione, ad esempio **RegistrationForm\_OptIn**.
   + Per **Role (Ruolo)** selezionare **Choose an existing role (Scegli un ruolo esistente)**.
   + Per **Ruolo esistente**, scegli il ruolo SMSRegistration Form che hai creato in [Crea un ruolo IAM](tutorials-two-way-sms-part-2.md#tutorials-two-way-sms-part-2-create-role).

   Al termine, selezionare **Create function (Crea funzione)**.

1. Eliminare la funzione di esempio nell'editor di codici, quindi incollare il codice seguente:

   ```
   import { PinpointClient, UpdateEndpointCommand } from "@aws-sdk/client-pinpoint"; // ES Modules import
   
   // Create a new Pinpoint client instance with the region specified in the environment variables
   const pinClient = new PinpointClient({ region: process.env.region });
   
   // Get the Pinpoint project ID and the confirm keyword from environment variables
   const projectId = process.env.projectId;
   const confirmKeyword = process.env.confirmKeyword.toLowerCase();
   
   // This is the main handler function that is invoked when the Lambda function is triggered
   export const handler = async (event, context) => {
       console.log('Received event:', event);
   
       try {
           // Extract the timestamp, message, and origination number from the SNS event
           const timestamp = event.Records[0].Sns.Timestamp;
           const message = JSON.parse(event.Records[0].Sns.Message);
           const originationNumber = message.originationNumber;
           const response = message.messageBody.toLowerCase();
   
           // Check if the response message contains the confirm keyword
           if (response.includes(confirmKeyword)) {
               // If the confirm keyword is found, update the endpoint's opt-in status
               await updateEndpointOptIn(originationNumber, timestamp);
           }
       }catch (error) {
           console.error('An error occurred:', error);
           throw error; // Rethrow the error to handle it upstream
       }
   };
   
   // This function updates the opt-in status of a Pinpoint endpoint
   async function updateEndpointOptIn(originationNumber, timestamp) {
       // Extract the endpoint ID from the origination number
       const endpointId = originationNumber.substring(1);
   
        // Prepare the parameters for the UpdateEndpointCommand
       const params = {
           ApplicationId: projectId,
           EndpointId: endpointId,
           EndpointRequest: {
               Address: originationNumber,
               ChannelType: 'SMS',
               OptOut: 'NONE',
               Attributes: {
                   OptInTimestamp: [timestamp]
               },
           }
       };
   
       try {
           // Send the UpdateEndpointCommand to update the endpoint's opt-in status
           const updateEndpointResponse = await pinClient.send(new UpdateEndpointCommand(params));
           console.log(updateEndpointResponse);
           console.log(`Successfully changed the opt status of endpoint ID ${endpointId}`);
       } catch (error) {
           console.error('An error occurred while updating endpoint:', error);
           throw error; // Rethrow the error to handle it upstream
       }
   }
   ```

1. In **Environment variables (Variabili di ambiente)**, effettuare le seguenti operazioni:
   + Nella prima riga, creare una variabile con una chiave di **projectId**. Successivamente, imposta il valore sull'ID univoco del progetto che hai creato in [Crea un progetto Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).
   + Nella seconda riga, creare una variabile con una chiave di **region**. Quindi, imposta il valore sulla regione in cui viene utilizzato Amazon Pinpoint, ad esempio **us-east-1** o **us-west-2**.
   + Nella terza riga, creare una variabile con una chiave di **confirmKeyword**. Successivamente, imposta il valore sulla parola chiave di conferma che hai creato in [Abilita SMS bidirezionali](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-set-up-channel).
**Nota**  
La parola chiave non fa distinzione tra le lettere maiuscole e minuscole. Questa funzione converte il messaggio in entrata in lettere minuscole.

   Al termine, la sezione **Environment Variables (Variabili di ambiente)** dovrebbe essere simile all'esempio illustrato nella seguente immagine.  
![Le variabili di ambiente per ProjectId, region e confirmKeyword.](http://docs.aws.amazon.com/it_it/pinpoint/latest/userguide/images/SMS_Reg_Tutorial_LAM_Step2.7.png)

1. Nella parte superiore della pagina, scegli **Save (Salva)**.

### Test della funzione
<a name="tutorials-two-way-sms-part-3-create-optin-function-test"></a>

Una volta creata la funzione, è opportuno testarla per verificarne la corretta configurazione. Verifica inoltre che il ruolo IAM creato disponga delle autorizzazioni appropriate.

**Per testare la funzione**

1. Scegli **Test (Esegui test)**.

1. Nella finestra **Configure test event (Configura evento di test)**, seguire la procedura riportata di seguito:

   1. Scegliere **Create new test event** (Creare nuovo evento di test).

   1. Nel campo **Event name (Nome evento)**, inserire un nome per l'evento di test, ad esempio **MyResponse**.

   1. Cancellare il codice di esempio nell'editor di codici. Incolla il codice seguente:

      ```
      {
        "Records":[
          {
            "Sns":{
              "Message":"{\"originationNumber\":\"{{+12065550142}}\",\"messageBody\":\"{{Yes}}\"}",
              "Timestamp":"2019-02-20T17:47:44.147Z"
            }
          }
        ]
      }
      ```

      Nel codice di esempio precedente, sostituisci i valori dell'attributo `originationNumber` con il numero di telefono utilizzato durante il test della funzione Lambda precedente. Sostituisci il valore di `messageBody` con la parola chiave SMS bidirezionale specificata in [Abilita](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-enable-two-way) SMS bidirezionali. Opzionalmente è possibile sostituire il valore di `Timestamp` con la data e l'ora attuale.

   1. Scegli **Create** (Crea).

1. Scegliere **Test** di nuovo.

1. In **Execution result: succeeded (Risultato esecuzione: riuscita)**, selezionare **Details (Dettagli)**. Nella sezione **Log output (Output di log)**, riesaminare l'output della funzione. Verificare che la funzione sia stata eseguita senza errori.

1. Apri la console Amazon Pinpoint all'indirizzo. [https://console.aws.amazon.com/pinpoint/](https://console.aws.amazon.com/pinpoint/)

1. Nella pagina **Tutti i progetti**, scegli il progetto che hai creato in [Crea un progetto Amazon Pinpoint](tutorials-two-way-sms-part-1.md#tutorials-two-way-sms-part-1-create-project).

1. Nel riquadro di navigazione, selezionare **Segments (Segmenti)**. Nella **Segments page (Pagina segmenti)**, selezionare **Create a segment (Crea un segmento)**.

1. In **Segment group 1 (Gruppo segmenti 1)**, nel campo **Add filters to refine your segment (Aggiungi filtri per rifinire i segmenti)**, selezionare **Filter by user (Filtra per utente)**.

1. Per **Scegli un attributo utente**, scegli **FirstName**. Quindi, in **Choose values (Scegli valori)**, selezionare il nome specificato nell'evento di prova.

   La sezione **Segment estimate (Stima segmenti)** dovrebbe indicare che c'è un endpoint idoneo e un endpoint totale.

**Successivo**: [Configurazione di Gateway Amazon API](tutorials-two-way-sms-part-4.md)