

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

# Trigger Lambda del mittente personalizzato
<a name="user-pool-lambda-custom-sender-triggers"></a>

Lambda attiva `CustomEmailSender` e `CustomSMSSender` supporta notifiche e-mail e SMS di terze parti nei pool di utenti. Per inviare notifiche agli utenti dall'interno del codice della funzione Lambda, puoi utilizzare i provider di SMS ed e-mail che desideri. Quando Amazon Cognito invia inviti, codici MFA, codici di conferma, codici di verifica e password temporanee agli utenti, gli eventi attivano le funzioni Lambda configurate. Amazon Cognito invia il codice e le password temporanee (segreti) alle funzioni Lambda attivate. Amazon Cognito crittografa questi segreti con una chiave gestita AWS KMS dal cliente e il. AWS Encryption SDK AWS Encryption SDK È una libreria di crittografia lato client che ti aiuta a crittografare e decrittografare dati generici.

**[CustomEmailSender](user-pool-lambda-custom-email-sender.md)**  
Amazon Cognito richiama questo trigger per inviare notifiche e-mail agli utenti. 

**[PersonalizzaSMSSender](user-pool-lambda-custom-sms-sender.md)**  
Amazon Cognito richiama questo trigger per inviare notifiche SMS agli utenti.

## Concetti di crittografia
<a name="user-pool-lambda-custom-sender-triggers-resources"></a>

Amazon Cognito non invia i codici degli utenti in testo semplice negli eventi che invia a trigger mittenti personalizzati. Le funzioni Lambda devono decrittografare i codici negli eventi. I seguenti concetti sono l'architettura di crittografia che la funzione deve utilizzare per ottenere codici da fornire agli utenti.

**AWS KMS**  
AWS KMS è un servizio gestito per creare e controllare AWS KMS chiavi. Queste chiavi crittografano i tuoi dati. Per ulteriori informazioni, consulta la pagina [Che cos'è AWS Key Management Service?](/kms/latest/developerguide/overview.html)

**Chiave KMS**  
Una chiave KMS è la rappresentazione logica di una chiave crittografica. La chiave KMS include metadati, ad esempio l'ID della chiave, la data di creazione, la descrizione e lo stato della chiave. La chiave KMS contiene anche il materiale della chiave utilizzato per crittografare e decrittare i dati. Per ulteriori informazioni, consulta [AWS Chiavi KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys).

**Chiavi KMS simmetriche**  
Una chiave KMS simmetrica è una chiave di crittografia a 256 bit che non mantiene crittografato AWS KMS . Per utilizzare una chiave KMS simmetrica, è necessario chiamare. AWS KMS Amazon Cognito utilizza le chiavi simmetriche. La stessa chiave viene usata per la crittografia e la decrittografia. Per ulteriori informazioni, consulta [Chiavi KMS simmetriche](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). 

## Cose da sapere sui trigger Lambda personalizzati per mittenti
<a name="user-pool-lambda-custom-sender-triggers-things-to-know"></a>
+ Per configurare i bacini d'utenza affinché utilizzino questi trigger Lambda, puoi utilizzare la AWS CLI o l'SDK. Queste configurazioni non sono disponibili nella console Amazon Cognito.

  L'`UpdateUserPool`operazione imposta la configurazione Lambda. Le richieste di questa operazione richiedono tutti i parametri del pool di utenti *e* i parametri che si desidera modificare. Se non fornisci tutti i parametri rilevanti, Amazon Cognito imposta i valori di tutti i parametri mancanti sui valori predefiniti. Come dimostrato nell'esempio AWS CLI che segue, includi le voci per tutte le funzioni Lambda che desideri aggiungere o conservare nel tuo pool di utenti. Per ulteriori informazioni, consulta [Aggiornamento della configurazione del pool di utenti e del client dell'app](cognito-user-pool-updating.md).

  ```
      #Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing 
      #user pool configurations. This snippet also includes a pre sign-up trigger for syntax reference. The pre sign-up trigger
      #doesn't have a role in custom sender triggers.
                
        --lambda-config "PreSignUp=lambda-arn, \
                         CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \
                         CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \
                         KMSKeyID=key-id"
  ```

  Per le richieste che utilizzano il corpo JSON del seguente `LambdaConfig` frammento di `UpdateUserPool` codice assegna funzioni personalizzate di invio di SMS e e-mail.

  ```
  "LambdaConfig": {
     "KMSKeyID": "arn:aws:kms:us-east-1:111122223333:key/a6c4f8e2-0c45-47db-925f-87854bc9e357",
     "CustomEmailSender": {
        "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
        "LambdaVersion": "V1_0"
     },
     "CustomSMSSender": {
        "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
        "LambdaVersion": "V1_0"
     }
  ```
+ Per rimuovere un trigger Lambda del mittente personalizzato con `update-user-pool` AWS CLI un comando, ometti `CustomSMSSender` il parametro `CustomEmailSender` o `--lambda-config` da e includi tutti gli altri trigger che desideri utilizzare con il tuo pool di utenti.

  Per rimuovere un trigger Lambda del mittente personalizzato con una richiesta API `UpdateUserPool`, ometti il parametro `CustomSMSSender` o `CustomEmailSender` dal corpo della richiesta contenente il resto della configurazione del pool di utenti.
+ Amazon Cognito crea una sequenza di escape HTML di caratteri riservati come `<` (`&lt;`) e `>` (`&gt;`) nella password temporanea dell'utente. Questi caratteri potrebbero essere visualizzati nelle password temporanee inviate da Amazon Cognito alla funzione del mittente e-mail personalizzata, ma non vengono visualizzati nei codici di verifica temporanei. Per inviare password temporanee, la funzione Lambda deve eliminare questi caratteri dopo aver decrittografato la password e prima di inviare il messaggio all'utente.

## Attivazione dei trigger Lambda personalizzati del mittente
<a name="enable-custom-sender-lambda-trigger"></a>

Per utilizzare una logica personalizzata per inviare SMS o messaggi e-mail per il tuo pool di utenti, configura i trigger mittenti personalizzati. La procedura seguente assegna un trigger SMS personalizzato, un trigger e-mail personalizzato o entrambi al pool di utenti. Dopo aver aggiunto il trigger mittente personalizzato, Amazon Cognito invia sempre gli attributi utente, incluso il numero di telefono e il codice monouso, alla funzione Lambda anziché il comportamento predefinito che prevede l'invio di un SMS o un messaggio e-mail.

1. Crea una chiave di crittografia [simmetrica](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks) in (). AWS Key Management Service AWS KMS Amazon Cognito genera segreti (password temporanee, codici di verifica, password monouso di autenticazione e codici di conferma), quindi utilizza questa chiave KMS per crittografare i segreti. [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) È quindi possibile utilizzare la funzione AWS Encryption SDK in Lambda per decrittografare i segreti e inviarli all'utente in formato testo non crittografato.

1. Il principale IAM che crea o aggiorna il tuo pool di utenti crea una concessione una tantum per la chiave KMS utilizzata da Amazon Cognito per crittografare il codice. Concedi queste `CreateGrant` autorizzazioni principali per la tua chiave KMS. Affinché questo esempio di politica delle chiavi KMS sia efficace, l'amministratore che aggiorna il pool di utenti deve accedere con una sessione con un ruolo presunto per il ruolo IAM. `arn:aws:iam::111222333444:role/my-example-administrator-role` 

   Applica la seguente politica basata sulle risorse, modificata per il tuo ambiente, alla tua chiave KMS.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
       {
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/my-example-administrator-role"
           },
           "Action": "kms:CreateGrant",
           "Resource": "arn:aws:kms:us-west-2:111122223333:key/1example-2222-3333-4444-999example",
           "Condition": {
               "StringEquals": {
                  "kms:EncryptionContext:userpool-id": "us-west-2_EXAMPLE"
               }
           }
       },
       {
           "Sid": "Allow Lambda to decrypt",
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/my-lambda-function-role"
           },
           "Action": "kms:Decrypt",
           "Resource": "*"
       }]
   }
   ```

------

1. Crea una funzione Lambda per il trigger del mittente personalizzato. Amazon Cognito utilizza l'[SDK di crittografia AWS](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) per crittografare i segreti, le password temporanee e i codici di autorizzazione delle richieste API degli utenti.

   1. Assegna un ruolo di [esecuzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) con almeno le autorizzazioni per la `kms:Decrypt` tua chiave KMS.

   1. Componi il codice della funzione Lambda per inviare i tuoi messaggi. L'evento di input della tua funzione contiene un segreto. Nella tua funzione, decrittografa il segreto con AWS Encryption SDK ed elabora tutti i metadati pertinenti. Quindi invia il codice, il messaggio personalizzato e il numero di telefono di destinazione all'API personalizzata che distribuisce il messaggio.

   1. Aggiungi il AWS Encryption SDK alla tua funzione Lambda. Per ulteriori informazioni, consulta la sezione relativa ai [linguaggi di programmazione di SDK di crittografia AWS](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html). Per aggiornare il pacchetto Lambda, completa la procedura seguente.

      1. Esporta la funzione Lambda come file .zip in Console di gestione AWS.

      1. Apri la tua funzione e aggiungi il AWS Encryption SDK. Per ulteriori informazioni e i link di download, consulta la sezione relative ai [linguaggi di programmazione di AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html) nella *Guida per gli sviluppatori di AWS Encryption SDK *.

      1. Comprimi la funzione con le dipendenze dell'SDK e carica la funzione in Lambda. Per ulteriori informazioni, consulta [Distribuzione di funzioni Lambda come archivi di file .zip](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-create) nella *Guida per gli sviluppatori di AWS Lambda *.

1. Concedi l'accesso `cognito-idp.amazonaws.com` al principale del servizio Amazon Cognito per richiamare la funzione Lambda.

   Il AWS CLI comando seguente concede ad Amazon Cognito l'autorizzazione a richiamare la funzione Lambda:

   ```
   aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
   ```

1. Genera una richiesta [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API con un `LambdaConfig` parametro che aggiunge trigger Lambda del mittente personalizzati. Non puoi aggiungere trigger di questo tipo nella console Amazon Cognito. I trigger mittenti personalizzati richiedono `LambdaConfig` i parametri di `KMSKeyID` e `CustomSMSSender` o `CustomEmailSender` (o entrambi).

# Trigger Lambda del mittente di e-mail personalizzato
<a name="user-pool-lambda-custom-email-sender"></a>

Quando assegni un trigger del mittente dell'e-mail personalizzato al pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio e-mail. Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare notifiche e-mail agli utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della funzione deve elaborare e distribuire tutti i messaggi e-mail del pool di utenti.

Questo trigger è utile per scenari in cui potresti voler avere un maggiore controllo sul modo in cui il tuo pool di utenti invia i messaggi e-mail. La tua funzione Lambda può personalizzare la chiamata alle operazioni dell'API di Amazon SES, ad esempio quando desideri gestire più identità verificate o incrociate. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.

Per informazioni su come configurare un trigger personalizzato per il mittente dell'e-mail, consulta. [Attivazione dei trigger Lambda personalizzati del mittente](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger)

## Origini dei trigger Lambda del mittente di e-mail personalizzato
<a name="trigger-source"></a>

La tabella che segue mostra gli eventi di attivazione per le origini dei trigger delle e-mail personalizzate nel codice Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomEmailSender\$1SignUp | Un utente si registra e Amazon Cognito invia un messaggio di benvenuto. | 
| CustomEmailSender\$1Authentication | Un utente accede e Amazon Cognito invia un codice OTP o MFA via e-mail. | 
| CustomEmailSender\$1ForgotPassword | Un utente richiede un codice per reimpostare la password. | 
| CustomEmailSender\$1ResendCode | Un utente richiede un codice di conferma dell'account sostitutivo. | 
| CustomEmailSender\$1UpdateUserAttribute | Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. | 
| CustomEmailSender\$1VerifyUserAttribute | Un utente crea un nuovo attributo indirizzo e-mail o numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. | 
| CustomEmailSender\$1AdminCreateUser | Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea. | 
| CustomEmailSender\$1AccountTakeOverNotification | Amazon Cognito rileva il tentativo di prendere il controllo di un account utente e invia una notifica all'utente. | 

## Parametri del trigger Lambda del mittente di e-mail personalizzato
<a name="custom-email-sender-parameters"></a>

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei [parametri comuni](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) aggiunti da Amazon Cognito a tutte le richieste.

------
#### [ JSON ]

```
{
    "request": {
        "type": "customEmailSenderRequestV1",
        "code": "string",
        "clientMetadata": {
            "string": "string",
             . . .
            },
        "userAttributes": {
            "string": "string",
            . . .
         }
}
```

------

### Parametri della richiesta del mittente di e-mail personalizzato
<a name="custom-email-sender-request-parameters"></a>

**tipo**  
La versione della richiesta. Per un evento del mittente di e-mail personalizzato, il valore di questa stringa è sempre `customEmailSenderRequestV1`.

**code**  
Il codice crittografato che la funzione può decrittografare e inviare all'utente.

**clientMetadata**  
Una o più coppie chiave-valore che puoi fornire come input personalizzato al trigger della funzione Lambda del mittente di e-mail personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Amazon Cognito non include i dati del ClientMetadata parametro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e le operazioni [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API nella richiesta che passa alla funzione di post-autenticazione.  
Amazon Cognito invia `ClientMetadata` a e-mail personalizzate funzioni di attivazione in caso di eventi con le seguenti fonti di attivazione:  
+ `CustomEmailSender_ForgotPassword`
+ `CustomEmailSender_SignUp`
+ `CustomEmailSender_Authentication`
Amazon Cognito non invia `ClientMetadata` eventi trigger con l'origine. `CustomEmailSender_AccountTakeOverNotification`

**userAttributes**  
Una o più coppie chiave-valore che rappresentano gli attributi utente.

### Parametri di risposta del mittente di e-mail personalizzato
<a name="custom-email-sender-response-parameters"></a>

Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta del mittente di e-mail personalizzato. La funzione Lambda deve interpretare l'evento e decrittografare il codice, quindi recapitare il contenuto del messaggio. Una funzione tipica assembla un messaggio e-mail e lo indirizza a un relay SMTP di terze parti.

## Esempio di codice
<a name="custom-email-sender-code-examples"></a>

Nel seguente esempio Node.js viene illustrato come elaborare un evento di messaggio e-mail nella funzione Lambda del mittente di e-mail personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.

**`KEY_ID`**  
L'ID della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

**`KEY_ARN`**  
Il nome della risorsa Amazon (ARN) della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

**Per implementare questa funzione**

1. Installa l'ultima versione di NodeJS nel tuo spazio di lavoro per sviluppatori.

1. Crea un nuovo progetto NodeJS nel tuo spazio di lavoro.

1. Inizializza il tuo progetto con. `npm init -y`

1. Crea lo script per la funzione Lambda:. `touch index.mjs`

1. Incolla il contenuto dell'esempio seguente in`index.mjs`.

1. Scarica la dipendenza del progetto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Comprimi la cartella del progetto in un file:`zip -r my_deployment_package.zip .`.

1. [Implementa il file ZIP nella tua funzione.](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html)

Questa funzione di esempio decrittografa il codice e, per gli eventi di iscrizione, simula l'invio di un messaggio e-mail all'indirizzo e-mail dell'utente.

```
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node';

// Configure the encryption SDK client with the KMS key from the environment variables
const { encrypt, decrypt } = buildClient(
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT
);

const generatorKeyId = process.env.KEY_ID;
const keyIds = [process.env.KEY_ARN];
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds });

// Example function to simulate sending email.
// This example logs message details to CloudWatch Logs from your Lambda function.
// Update this function with custom logic that sends an email message to 'emailaddress' with body 'message'.
const sendEmail = async (emailAddress, message) => {
    // Log the destination with the email address masked.
    console.log(`Simulating email send to ${emailAddress.replace(/[^@.]/g, '*')}`);
    // Log the message with the code masked.
    console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`);
    // Simulate API delay
    await new Promise(resolve => setTimeout(resolve, 100));
    console.log('Email sent successfully');
    return true;
};

export const handler = async (event) => {
    try {
        // Decrypt the secret code using encryption SDK
        let plainTextCode;
        if (event.request.code) {
            const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64'));
            plainTextCode = Buffer.from(plaintext).toString('utf-8');
        }

        // Handle different trigger sources
        if (event.triggerSource == 'CustomEmailSender_SignUp') {
            const emailAddress = event.request.userAttributes.email;
            const message = `Welcome! Your verification code is: ${plainTextCode}`;
            await sendEmail(emailAddress, message);
        }
        else if (event.triggerSource == 'CustomEmailSender_ResendCode') {
            // Handle resend code
        }
        else if (event.triggerSource == 'CustomEmailSender_ForgotPassword') {
            // Handle forgot password
        }
        else if (event.triggerSource == 'CustomEmailSender_UpdateUserAttribute') {
            // Handle update attribute
        }
        else if (event.triggerSource == 'CustomEmailSender_VerifyUserAttribute') {
            // Handle verify attribute
        }
        else if (event.triggerSource == 'CustomEmailSender_AdminCreateUser') {
            // Handle admin create user
        }
        else if (event.triggerSource == 'CustomEmailSender_Authentication') {
            // Handle authentication
        }
        else if (event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification') {
            // Handle account takeover notification
        }

        return;
    } catch (error) {
        console.error('Error in custom email sender:', error);
        throw error;
    }
};
```

# Trigger Lambda del mittente di SMS personalizzato
<a name="user-pool-lambda-custom-sms-sender"></a>

Quando assegni un trigger del mittente SMS personalizzato al pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio e-mail. Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare notifiche SMS agli utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della funzione deve elaborare e distribuire tutti i messaggi SMS del pool di utenti.

Questo trigger è utile per scenari in cui potresti voler avere un maggiore controllo sul modo in cui il tuo pool di utenti invia i messaggi SMS. La tua funzione Lambda può personalizzare la chiamata alle operazioni dell'API Amazon SNS, ad esempio quando desideri gestire più IDs origini o incroci. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.

Per informazioni su come configurare un trigger personalizzato per il mittente dell'e-mail, consulta. [Attivazione dei trigger Lambda personalizzati del mittente](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger)

## Origini dei trigger Lambda del mittente di SMS personalizzato
<a name="trigger-source"></a>

La tabella che segue mostra l'evento di attivazione per le origini dei trigger di SMS personalizzati nel codice Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomSMSSender\$1SignUp | Un utente si registra e Amazon Cognito invia un messaggio di benvenuto. | 
| CustomSMSSender\$1ForgotPassword | Un utente richiede un codice per reimpostare la password. | 
| CustomSMSSender\$1ResendCode | Un utente richiede un nuovo codice per confermare la registrazione. | 
| CustomSMSSender\$1VerifyUserAttribute | Un utente crea un nuovo attributo indirizzo e-mail o numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. | 
| CustomSMSSender\$1UpdateUserAttribute | Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo. | 
| CustomSMSSender\$1Authentication | Un utente accede e Amazon Cognito invia un codice OTP o MFA via SMS. | 
| CustomSMSSender\$1AdminCreateUser | Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea. | 

## Parametri del trigger Lambda del mittente di SMS personalizzato
<a name="custom-sms-sender-parameters"></a>

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei [parametri comuni](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) aggiunti da Amazon Cognito a tutte le richieste.

------
#### [ JSON ]

```
{
    "request": {
        "type": "customSMSSenderRequestV1",
        "code": "string",
        "clientMetadata": {
            "string": "string",
             . . .
            },
        "userAttributes": {
            "string": "string",
            . . .
         }
}
```

------

### Parametri di richiesta del mittente di SMS personalizzato
<a name="custom-sms-sender-request-parameters"></a>

**tipo**  
La versione della richiesta. Per un evento del mittente di SMS personalizzato, il valore di questa stringa è sempre `customSMSSenderRequestV1`.

**code**  
Il codice crittografato che la funzione può decrittografare e inviare all'utente.

**clientMetadata**  
Una o più coppie chiave-valore che è possibile fornire come input personalizzato al trigger della funzione Lambda del mittente di SMS personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Amazon Cognito non include i dati del ClientMetadata parametro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e le operazioni [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API nella richiesta che passa alla funzione di post-autenticazione.

**userAttributes**  
Una o più coppie chiave-valore che rappresentano gli attributi utente.

### Parametri di risposta del mittente di SMS personalizzato
<a name="custom-sms-sender-response-parameters"></a>

Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta. La funzione può utilizzare le operazioni API per interrogare e modificare le risorse o registrare i metadati degli eventi in un sistema esterno.

## Esempio di codice
<a name="custom-sms-sender-code-examples"></a>

Nel seguente esempio Node.js viene illustrato come elaborare un evento di messaggio SMS nella funzione Lambda del mittente di SMS personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.

**`KEY_ID`**  
L'ID della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

**`KEY_ARN`**  
Il nome della risorsa Amazon (ARN) della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

**Per implementare questa funzione**

1. Installa l'ultima versione di NodeJS nel tuo spazio di lavoro per sviluppatori.

1. Crea un nuovo progetto NodeJS nel tuo spazio di lavoro.

1. Inizializza il tuo progetto con. `npm init -y`

1. Crea lo script per la funzione Lambda:. `touch index.mjs`

1. Incolla il contenuto dell'esempio seguente in`index.mjs`.

1. Scarica la dipendenza del progetto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Comprimi la cartella del progetto in un file:`zip -r my_deployment_package.zip .`.

1. [Implementa il file ZIP nella tua funzione.](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html)

```
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node';

// Configure the encryption SDK client with the KMS key from the environment variables
const { encrypt, decrypt } = buildClient(
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT
);

const generatorKeyId = process.env.KEY_ID;
const keyIds = [process.env.KEY_ARN];
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds });

// Example function to simulate sending SMS.
// This example logs message details to CloudWatch Logs from your Lambda function.
// Update this function with custom logic that sends an SMS message to 'phoneNumber' with body 'message'.
const sendSMS = async (phoneNumber, message) => {
    // Log the destination with the phone number masked.
    console.log(`Simulating SMS send to ${phoneNumber.replace(/[^+]/g, '*')}`);
    // Log the message with the code masked.
    console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`);    
    // Simulate API delay
    await new Promise(resolve => setTimeout(resolve, 100));
    console.log('SMS sent successfully');
    return true;
};

export const handler = async (event) => {
    try {
        // Decrypt the secret code using encryption SDK
        let plainTextCode;
        if (event.request.code) {
            const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64'));
            plainTextCode = Buffer.from(plaintext).toString('utf-8');
        }

        // Handle different trigger sources
        if (event.triggerSource == 'CustomSMSSender_SignUp') {
            const phoneNumber = event.request.userAttributes.phone_number;
            const message = `Welcome! Your verification code is: ${plainTextCode}`;
            await sendSMS(phoneNumber, message);
        }
        else if (event.triggerSource == 'CustomSMSSender_ResendCode') {
            // Handle resend code
        }
        else if (event.triggerSource == 'CustomSMSSender_ForgotPassword') {
            // Handle forgot password
        }
        else if (event.triggerSource == 'CustomSMSSender_UpdateUserAttribute') {
            // Handle update attribute
        }
        else if (event.triggerSource == 'CustomSMSSender_VerifyUserAttribute') {
            // Handle verify attribute
        }
        else if (event.triggerSource == 'CustomSMSSender_AdminCreateUser') {
            // Handle admin create user
        }
        return;
    } catch (error) {
        console.error('Error in custom SMS sender:', error);
        throw error;
    }
};
```

**Topics**
+ [Origini dei trigger Lambda del mittente di SMS personalizzato](#trigger-source)
+ [Parametri del trigger Lambda del mittente di SMS personalizzato](#custom-sms-sender-parameters)
+ [Esempio di codice](#custom-sms-sender-code-examples)
+ [Valutazione delle funzionalità di messaggio SMS con una funzione del mittente di SMS personalizzato](#sms-to-email-example)

## Valutazione delle funzionalità di messaggio SMS con una funzione del mittente di SMS personalizzato
<a name="sms-to-email-example"></a>

Una funzione Lambda del mittente di SMS personalizzato accetta i messaggi SMS inviati dal bacino d'utenza e fornisce il contenuto in base alla logica personalizzata. Amazon Cognito invia i [Parametri del trigger Lambda del mittente di SMS personalizzato](#custom-sms-sender-parameters) alla tua funzione. La funzione può fare ciò che vuoi con queste informazioni. Ad esempio, puoi inviare il codice a un argomento Amazon Simple Notification Service (Amazon SNS). Un sottoscrittore dell'argomento Amazon SNS può essere un messaggio SMS, un endpoint HTTPS o un indirizzo e-mail.

[Per creare un ambiente di test per la messaggistica SMS di Amazon Cognito con una funzione Lambda del mittente SMS personalizzata, [amazon-cognito-user-poolconsulta development-and-testing-with - sms-redirected-to-email -](https://github.com/aws-samples/amazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email) nella libreria aws-samples su. GitHub](https://github.com/aws-samples) Il repository contiene AWS CloudFormation modelli che possono creare un nuovo pool di utenti o utilizzare un pool di utenti che già possiedi. Questi modelli creano funzioni Lambda e un argomento Amazon SNS. La funzione Lambda che il modello assegna come trigger del mittente di SMS personalizzato, reindirizza i messaggi SMS ai sottoscrittori dell'argomento Amazon SNS. 

Quando distribuisci questa soluzione in un bacino d'utenza, tutti i messaggi che Amazon Cognito invia di solito tramite messaggi SMS vengono inviati dalla funzione Lambda a un indirizzo e-mail centrale. Utilizza questa soluzione per personalizzare e visualizzare in anteprima i messaggi SMS e per testare gli eventi del bacino d'utenza che causano l'invio di un messaggio SMS da parte di Amazon Cognito. Dopo aver completato i test, ripristina lo CloudFormation stack o rimuovi l'assegnazione personalizzata della funzione di mittente SMS dal tuo pool di utenti.

**Importante**  
Non utilizzate i modelli in [amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email](https://github.com/aws-samples/amazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email) per creare un ambiente di produzione. La funzione Lambda del mittente di SMS personalizzato nella soluzione *simula* i messaggi SMS, ma li invia tutti a un unico indirizzo e-mail centrale. Prima di poter inviare messaggi SMS in un bacino d'utenza di Amazon Cognito di produzione, è necessario completare i requisiti indicati in [Impostazioni dei messaggi SMS per i bacini d'utenza di Amazon Cognito](user-pool-sms-settings.md).