

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

# Acionadores do Lambda remetente personalizado
<a name="user-pool-lambda-custom-sender-triggers"></a>

Os acionadores do Lambda `CustomEmailSender` e `CustomSMSSender` permitem notificações por e-mail e SMS de terceiros em grupos de usuários. Você pode escolher provedores de SMS e e-mail para enviar notificações aos usuários de dentro do código de sua função do Lambda. Quando o Amazon Cognito envia convites, códigos de MFA, códigos de confirmação, códigos de verificação e senhas temporárias aos usuários, os eventos ativam suas funções configuradas do Lambda. O Amazon Cognito envia o código e senhas temporárias (segredos) para suas funções ativadas do Lambda. O Amazon Cognito criptografa esses segredos com uma chave gerenciada pelo AWS KMS cliente e o. AWS Encryption SDK AWS Encryption SDK É uma biblioteca de criptografia do lado do cliente que ajuda você a criptografar e descriptografar dados genéricos.

**[CustomEmailSender](user-pool-lambda-custom-email-sender.md)**  
O Amazon Cognito invoca esse acionador para enviar notificações por e-mail aos usuários. 

**[PersonalizadoSMSSender](user-pool-lambda-custom-sms-sender.md)**  
O Amazon Cognito invoca esse acionador para enviar notificações SMS aos usuários.

## Conceitos de criptografia
<a name="user-pool-lambda-custom-sender-triggers-resources"></a>

O Amazon Cognito não envia códigos de usuários em texto simples nos eventos que envia para acionadores personalizados do remetente. As funções do Lambda devem descriptografar códigos nos eventos. Os conceitos a seguir são a arquitetura de criptografia que sua função deve usar para obter códigos que possam ser entregues aos usuários.

**AWS KMS**  
AWS KMS é um serviço gerenciado para criar e controlar AWS KMS chaves. Essas chaves criptografam seus dados. Para obter mais informações, consulte [O que é o AWS Key Management Service?](/kms/latest/developerguide/overview.html).

**Chave KMS**  
Uma chave do KMS é uma representação lógica de uma chave criptográfica. A chave do KMS inclui metadados, como o ID da chave, a data de criação, a descrição e o estado da chave. A chave do KMS também contém o material de chave usado para criptografar e descriptografar dados. Para obter mais informações, consulte, [Chaves do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys).

**Chaves simétricas do KMS**  
Uma chave simétrica do KMS é uma chave de criptografia de 256 bits que não sai do AWS KMS sem ser criptografada. Para usar uma chave KMS simétrica, você deve ligar. AWS KMS O Amazon Cognito usa chaves simétricas. A mesma chave criptografa e descriptografa. Para obter mais informações, consulte [Chaves simétricas do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). 

## O que é importante saber sobre acionadores do Lambda de remetente personalizado
<a name="user-pool-lambda-custom-sender-triggers-things-to-know"></a>
+ Para configurar seus grupos de usuários para usar esses acionadores do Lambda, é possível usar a AWS CLI ou o SDK. Essas configurações não estão disponíveis no console do Amazon Cognito.

  A operação `UpdateUserPool` define a configuração do Lambda. As solicitações para essa operação exige todos os parâmetros do grupo de usuários *e* os parâmetros que você deseja modificar. Se você não fornecer todos os parâmetros relevantes, o Amazon Cognito assumirá os valores padrão para todos os parâmetros ausentes. Conforme demonstrado no exemplo de AWS CLI a seguir, inclua entradas para todas as funções do Lambda que você deseja adicionar ou manter em seu grupo de usuários. Para obter mais informações, consulte [Como atualizar a configuração do grupo de usuários e do cliente da aplicação](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"
  ```

  Para solicitações que usam o corpo JSON do `UpdateUserPool`, o trecho `LambdaConfig` a seguir atribui funções personalizadas de remetente de 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"
     }
  ```
+ Para remover um gatilho Lambda personalizado do remetente com `update-user-pool` AWS CLI um comando, omita `CustomSMSSender` o parâmetro `CustomEmailSender` `--lambda-config` or e inclua todos os outros gatilhos que você deseja usar com seu grupo de usuários.

  Para remover um acionador do Lambda de remetente personalizado com uma solicitação da API `UpdateUserPool`, omita o parâmetro `CustomSMSSender` ou `CustomEmailSender` do corpo da solicitação que contém o restante da configuração do grupo de usuários.
+ O Amazon Cognito faz escapes de caracteres reservados de HTML `<` (`&lt;`) e `>` (`&gt;`) na senha temporária do usuário. Esses caracteres podem aparecer em senhas temporárias que o Amazon Cognito envia para à função personalizada de remetente de e-mail, mas não aparecem nos códigos de verificação temporários. Para enviar senhas temporárias, a função do Lambda deve liberar esses caracteres depois de decifrar a senha e antes de enviar a mensagem ao usuário.

## Ativar acionadores do Lambda de remetente personalizado
<a name="enable-custom-sender-lambda-trigger"></a>

Para usar lógica personalizada para enviar mensagens de SMS ou e-mail ao grupo de usuários, configure acionadores de remetente personalizado. O procedimento a seguir atribui um acionador de SMS personalizado, um acionador de e-mail personalizado ou ambos ao seu grupo de usuários. Depois de adicionar o acionador de remetente de SMS personalizado, o Amazon Cognito sempre envia atributos do usuário, incluindo o número de telefone e o código único para a função do Lambda, em vez do comportamento padrão que envia uma mensagem SMS ou de e-mail.

1. Crie uma [chave de criptografia simétrica](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks) em AWS Key Management Service (AWS KMS). O Amazon Cognito gera segredos (senhas temporárias, códigos de verificação, senhas de autenticação de uso único e códigos de autorização) e usa essa chave do KMS para criptografá-los com [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html). Em seguida, você pode usar o AWS Encryption SDK em sua função Lambda para descriptografar os segredos e enviá-los ao usuário em texto simples.

1. A entidade principal do IAM que cria ou atualiza seu grupo de usuários cria uma concessão única com base na chave KMS que o Amazon Cognito usa para criptografar o código. Conceda essas permissões `CreateGrant` da entidade principal à sua chave KMS. Para que esse exemplo de política de chaves do KMS seja efetivo, o administrador que atualiza o grupo de usuários deve estar conectado com uma sessão de perfil assumido para o perfil do IAM `arn:aws:iam::111222333444:role/my-example-administrator-role`. 

   Aplique a política baseada em recursos a seguir, modificada para seu ambiente, à chave do 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. Crie uma função do Lambda para o acionador de remetente personalizado. O Amazon Cognito usa o [SDK de criptografia da AWS](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) para criptografar os segredos, as senhas temporárias e os códigos que autorizam as solicitações de API dos usuários.

   1. Atribua um [perfil de execução do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) que tenha, no mínimo, as permissões `kms:Decrypt` para a chave do KMS.

   1. Componha o código da função do Lambda para enviar as mensagens. O evento de entrada para sua função contém um segredo. Em sua função, decifre o segredo com o AWS Encryption SDK e processe todos os metadados relevantes. Depois, envie o código, sua própria mensagem personalizada e o número de telefone de destino para a API personalizada que entrega a mensagem.

   1. Adicione o AWS Encryption SDK à sua função Lambda. Para ter mais informações, consulte [Linguagens de programação do AWS  Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html). Para atualizar o pacote do Lambda, conclua as etapas a seguir.

      1. Exporte a função do Lambda como um arquivo .zip no Console de gerenciamento da AWS.

      1. Abra sua função e adicione AWS Encryption SDK o. Para ter mais informações e links de download, consulte [Linguagens de programação do AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html) no *Guia do desenvolvedor do AWS Encryption SDK *.

      1. Compacte a função com as dependências do SDK e faça upload da função para o Lambda. Para obter mais informações, consulte [Implantar funções do Lambda como arquivos .zip](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-create) no *Guia do desenvolvedor do AWS Lambda *.

1. Conceda à entidade principal `cognito-idp.amazonaws.com` do serviço do Amazon Cognito acesso para invocar a função do Lambda.

   O AWS CLI comando a seguir concede ao Amazon Cognito permissão para invocar sua função Lambda:

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

1. Gere uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API com um `LambdaConfig` parâmetro que adiciona gatilhos Lambda personalizados do remetente. Não é possível adicionar acionadores desse tipo no console do Amazon Cognito. Os acionadores de remetente personalizado exigem parâmetros `LambdaConfig` de `KMSKeyID` e `CustomSMSSender` ou `CustomEmailSender` (ou ambos).

# Acionador do Lambda de remetente de e-mail personalizado
<a name="user-pool-lambda-custom-email-sender"></a>

Quando você atribui um acionador de remetente de e-mail personalizado ao grupo de usuários, o Amazon Cognito invoca uma função do Lambda em vez do comportamento padrão quando um evento do usuário exige que ele envie uma mensagem de e-mail. Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar notificações por e-mail para seus usuários por meio de um método e provedor de sua escolha. O código personalizado da função deve processar e entregar todas as mensagens de e-mail do grupo de usuários.

Esse acionador serve para cenários em que talvez você queira ter mais controle sobre como seu grupo de usuários envia mensagens de e-mail. Sua função do Lambda pode personalizar a chamada para as operações da API do Amazon SES, por exemplo, quando você deseja gerenciar várias identidades verificadas ou Regiões da AWS cruzadas. Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.

Para saber mais sobre como configurar um acionador de remetente de e-mail personalizado, consulte [Ativar acionadores do Lambda de remetente personalizado](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger).

## Fontes do acionador do Lambda de remetente de e-mail personalizado
<a name="trigger-source"></a>

A tabela a seguir mostra o evento de acionamento de fontes de acionadores de e-mail personalizado no código do Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomEmailSender\$1SignUp | Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas. | 
| CustomEmailSender\$1Authentication | Um usuário faz login e o Amazon Cognito envia um código OTP ou MFA do e-mail. | 
| CustomEmailSender\$1ForgotPassword | Um usuário solicita um código para redefinir a senha. | 
| CustomEmailSender\$1ResendCode | Um usuário solicita um código de confirmação da conta de substituição. | 
| CustomEmailSender\$1UpdateUserAttribute | Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomEmailSender\$1VerifyUserAttribute | Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomEmailSender\$1AdminCreateUser | Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária. | 
| CustomEmailSender\$1AccountTakeOverNotification | O Amazon Cognito detecta uma tentativa de tomada de controle de uma conta de usuário e envia uma notificação ao usuário. | 

## Parâmetros do acionador do Lambda de remetente personalizado de e-mail
<a name="custom-email-sender-parameters"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

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

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

------

### Parâmetros de solicitação do remetente personalizado de e-mail
<a name="custom-email-sender-request-parameters"></a>

**type**  
A versão da solicitação. Para um evento de remetente personalizado de e-mail, o valor dessa string é sempre `customEmailSenderRequestV1`.

**código**  
O código criptografado que sua função pode descriptografar e enviar ao usuário.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada à função do Lambda para o acionador de migração do usuário. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pós-autenticação.  
O Amazon Cognito envia `ClientMetadata` para funções personalizadas de acionador de e-mail personalizado em eventos com as seguintes fontes de acionador:  
+ `CustomEmailSender_ForgotPassword`
+ `CustomEmailSender_SignUp`
+ `CustomEmailSender_Authentication`
O Amazon Cognito não envia `ClientMetadata` em eventos de acionador com `CustomEmailSender_AccountTakeOverNotification` de origem.

**userAttributes**  
Um ou mais pares de chave-valor que representam atributos de usuário.

### Parâmetros de resposta do remetente personalizado de e-mail
<a name="custom-email-sender-response-parameters"></a>

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta do remetente personalizado de e-mail. Sua função do Lambda deve interpretar o evento, descriptografar o código e, em seguida, entregar o conteúdo da mensagem. Uma função típica reúne uma mensagem de e-mail e a direciona para um retransmissor SMTP de terceiros.

## Exemplo de código
<a name="custom-email-sender-code-examples"></a>

O exemplo de Node.js a seguir processa um evento de mensagem de e-mail na função do Lambda de remetente personalizado de e-mail. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.

**`KEY_ID`**  
O ID da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**`KEY_ARN`**  
O nome do recurso da Amazon (ARN) da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**Como implantar essa função**

1. Instale a versão mais recente do NodeJS na área de trabalho do desenvolvedor.

1. Crie um novo projeto NodeJS em seu espaço de trabalho.

1. Inicialize o projeto com `npm init -y`.

1. Crie o script da função do Lambda: `touch index.mjs`.

1. Cole o conteúdo do exemplo abaixo em `index.mjs`.

1. Baixe a dependência do projeto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Compacte o diretório de projeto em um arquivo: `zip -r my_deployment_package.zip .`.

1. [Implante o arquivo ZIP à função](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html).

Essa função de exemplo descriptografa o código e, para eventos de inscrição, simula o envio de uma mensagem de e-mail para o endereço de e-mail do usuário.

```
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;
    }
};
```

# Acionador do Lambda de remetente personalizado de SMS
<a name="user-pool-lambda-custom-sms-sender"></a>

Quando você atribui um acionador de remetente de SMS personalizado ao grupo de usuários, o Amazon Cognito invoca uma função do Lambda em vez do comportamento padrão quando um evento do usuário exige que ele envie uma mensagem SMS. Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar notificações por SMS para seus usuários por meio de um método e provedor de sua escolha. O código personalizado da função deve processar e entregar todas as mensagens SMS do grupo de usuários.

Esse acionador serve para cenários em que talvez você queira ter mais controle sobre como seu grupo de usuários envia mensagens SMS. Sua função Lambda pode personalizar a chamada para as operações de API do Amazon SNS, por exemplo, quando você quiser gerenciar várias IDs originações ou cruzamentos. Regiões da AWS Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.

Para saber mais sobre como configurar um acionador de remetente de e-mail personalizado, consulte [Ativar acionadores do Lambda de remetente personalizado](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger).

## Fontes de acionador do Lambda remetente personalizado de SMS
<a name="trigger-source"></a>

A tabela a seguir mostra o evento de acionamento de fontes de acionadores de SMS personalizado no código do Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomSMSSender\$1SignUp | Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas. | 
| CustomSMSSender\$1ForgotPassword | Um usuário solicita um código para redefinir a senha. | 
| CustomSMSSender\$1ResendCode | Um usuário solicita um novo código para confirmar seu registro. | 
| CustomSMSSender\$1VerifyUserAttribute | Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomSMSSender\$1UpdateUserAttribute | Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomSMSSender\$1Authentication | Um usuário faz login e o Amazon Cognito envia um código OTP ou MFA do SMS. | 
| CustomSMSSender\$1AdminCreateUser | Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária. | 

## Parâmetros do acionador do Lambda de remetente personalizado de SMS
<a name="custom-sms-sender-parameters"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

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

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

------

### Parâmetros de solicitação do remetente personalizado de SMS
<a name="custom-sms-sender-request-parameters"></a>

**type**  
A versão da solicitação. Para um evento de remetente personalizado de SMS, o valor dessa string é sempre `customSMSSenderRequestV1`.

**código**  
O código criptografado que sua função pode descriptografar e enviar ao usuário.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada ao acionador da função do Lambda de remetente personalizado de SMS. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pós-autenticação.

**userAttributes**  
Um ou mais pares de chave-valor que representam atributos de usuário.

### Parâmetros de resposta do remetente personalizado de SMS
<a name="custom-sms-sender-response-parameters"></a>

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta. Sua função pode usar operações de API para consultar e modificar seus recursos ou registrar metadados de eventos em um sistema externo.

## Exemplo de código
<a name="custom-sms-sender-code-examples"></a>

O exemplo do Node.js a seguir processar um evento de mensagem SMS na função do Lambda de remetente personalizado de SMS. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.

**`KEY_ID`**  
O ID da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**`KEY_ARN`**  
O nome do recurso da Amazon (ARN) da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**Como implantar essa função**

1. Instale a versão mais recente do NodeJS na área de trabalho do desenvolvedor.

1. Crie um novo projeto NodeJS em seu espaço de trabalho.

1. Inicialize o projeto com `npm init -y`.

1. Crie o script da função do Lambda: `touch index.mjs`.

1. Cole o conteúdo do exemplo abaixo em `index.mjs`.

1. Baixe a dependência do projeto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Compacte o diretório de projeto em um arquivo: `zip -r my_deployment_package.zip .`.

1. [Implante o arquivo ZIP à função](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**
+ [Fontes de acionador do Lambda remetente personalizado de SMS](#trigger-source)
+ [Parâmetros do acionador do Lambda de remetente personalizado de SMS](#custom-sms-sender-parameters)
+ [Exemplo de código](#custom-sms-sender-code-examples)
+ [Avaliar os recursos de mensagem SMS com uma função de remetente personalizado de SMS](#sms-to-email-example)

## Avaliar os recursos de mensagem SMS com uma função de remetente personalizado de SMS
<a name="sms-to-email-example"></a>

Uma função do Lambda de remetente personalizado de SMS aceitará as mensagens SMS que seu grupo de usuários enviar e fornecerá o conteúdo com base em sua lógica personalizada. O Amazon Cognito envia o [Parâmetros do acionador do Lambda de remetente personalizado de SMS](#custom-sms-sender-parameters) para sua função. Sua função pode fazer o que você quiser com essas informações. Por exemplo, você pode enviar o código a um tópico do Amazon Simple Notification Service (Amazon SNS). Um assinante de tópicos do Amazon SNS pode ser uma mensagem SMS, um endpoint HTTPS ou um endereço de e-mail.

[Para criar um ambiente de teste para mensagens SMS do Amazon Cognito com uma função Lambda personalizada do remetente de SMS, [amazon-cognito-user-poolconsulte development-and-testing-with - sms-redirected-to-email - na biblioteca aws-samples](https://github.com/aws-samples/amazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email) em. GitHub](https://github.com/aws-samples) O repositório contém AWS CloudFormation modelos que podem criar um novo grupo de usuários ou trabalhar com um grupo de usuários que você já tem. Esses modelos criam funções do Lambda e um tópico do Amazon SNS. A função do Lambda que o modelo atribui como um acionador de remetente personalizado de SMS redireciona para o tópico do Amazon SNS as mensagens SMS que você envia aos assinantes. 

Quando você implanta essa solução em um grupo de usuários, todas as mensagens que o Amazon Cognito geralmente envia pelo sistema de mensagens SMS são enviadas pela função do Lambda a um endereço de e-mail central. Use essa solução para personalizar e visualizar mensagens SMS e testar os eventos do grupo de usuários que fazem com que o Amazon Cognito envie uma mensagem SMS. Depois de concluir seus testes, reverta a CloudFormation pilha ou remova a atribuição personalizada da função de remetente de SMS do seu grupo de usuários.

**Importante**  
Não use os modelos em [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) para criar um ambiente de produção. A função do Lambda de remetente personalizado de SMS na solução *simula* mensagens SMS, mas envia todas elas a um único endereço de e-mail central. Antes de enviar mensagens SMS em um grupo de usuários do Amazon Cognito de produção, você deve preencher os requisito s mostrados em [Configurações de mensagens SMS para grupos de usuários do Amazon Cognito](user-pool-sms-settings.md).