

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

# Acionador do Lambda de mensagem personalizada
<a name="user-pool-lambda-custom-message"></a>

Quando você tiver um padrão externo para as mensagens de e-mail e SMS que deseja enviar aos seus usuários, ou quando quiser aplicar sua própria lógica em tempo de execução à formatação das mensagens do usuário, adicione um acionador de mensagem personalizada ao grupo de usuários. A mensagem personalizada do Lambda recebe o conteúdo de todas as mensagens de e-mail e SMS antes que seu grupo de usuários as envie. Sua função do Lambda então tem a oportunidade de modificar o conteúdo e o assunto da mensagem.

O Amazon Cognito invoca esse acionador antes de enviar um e-mail, uma mensagem de verificação de telefone ou um código de autenticação multifator (MFA). Você pode personalizar a mensagem dinamicamente com o acionador de mensagem personalizado.

A solicitação inclui `codeParameter`. Essa string funciona como espaço reservado no código que o Amazon Cognito fornece ao usuário. Insira a string `codeParameter` no corpo da mensagem, na posição em que você deseja que o código de verificação apareça. Quando o Amazon Cognito recebe essa resposta, ele substitui a string `codeParameter` pelo código de verificação real. 

**nota**  
O evento de entrada de uma função do Lambda de mensagem personalizada com o acionador `CustomMessage_AdminCreateUser` retorna um nome de usuário e um código de verificação. Como um usuário criado pelo administrador deve receber tanto o nome de usuário quanto o código, a resposta da função deve incluir ambos variáveis de espaços reservados para o nome de usuário e o código. Os espaços reservados para sua mensagem são os valores de `request.usernameParameter` e `request.codeParameter`. Esses valores são normalmente `{username}` e `{####}`. Como prática recomendada, referenciam os valores de entrada em vez de codificar rigidamente os nomes das variáveis.

**Topics**
+ [Fontes do acionador do Lambda de mensagem personalizada](#cognito-user-pools-lambda-trigger-syntax-custom-message-trigger-source)
+ [Parâmetros do acionador do Lambda de mensagem personalizada](#cognito-user-pools-lambda-trigger-syntax-custom-message)
+ [Exemplo de mensagem personalizada de cadastro](#aws-lambda-triggers-custom-message-example)
+ [Exemplo de mensagem personalizada para criação de usuário pelo administrador](#aws-lambda-triggers-custom-message-admin-example)

## Fontes do acionador do Lambda de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| CustomMessage\$1SignUp | Custom message – Para enviar o código de confirmação após cadastro. | 
| CustomMessage\$1AdminCreateUser | Custom message – Para enviar a senha temporária a um novo usuário. | 
| CustomMessage\$1ResendCode | Custom message – Para reenviar o código de confirmação a um usuário existente. | 
| CustomMessage\$1ForgotPassword | Custom message – Para enviar o código de confirmação da solicitação de esquecimento de senha. | 
| CustomMessage\$1UpdateUserAttribute | Custom message – Quando um e-mail ou número de telefone de um usuário for alterado, esse trigger enviará um código de verificação automaticamente ao usuário. Não pode ser usado para outros atributos. | 
| CustomMessage\$1VerifyUserAttribute | Mensagem personalizada – Este trigger envia um código de verificação ao usuário quando solicitado manualmente para um novo e-mail ou número de telefone. | 
| CustomMessage\$1Authentication | Custom message – Para enviar o código MFA durante a autenticação. | 

## Parâmetros do acionador do Lambda de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message"></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": {
        "userAttributes": {
            "string": "string",
            . . .
        }
        "codeParameter": "####",
        "usernameParameter": "string",
        "clientMetadata": {
            "string": "string",
            . . .
        }
    },
    "response": {
        "smsMessage": "string",
        "emailMessage": "string",
        "emailSubject": "string"
    }
}
```

------

### Parâmetros de solicitação de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message-request"></a>

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

**codeParameter**  
Uma string a ser usada como espaço reservado do código de verificação na mensagem personalizada.

**usernameParameter**  
O nome do usuário. O Amazon Cognito inclui esse parâmetro em solicitações geradas por usuários criados pelo administrador.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador de mensagem personalizada. A solicitação que invoca uma função de mensagem personalizada não inclui dados transmitidos no 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. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas seguintes ações de API:  
+  [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) 
+  [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) 
+  [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)
+  [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)
+  [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html)
+  [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)
+  [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)
+  [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html)

### Parâmetros de resposta de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message-response"></a>

Na resposta, especifique o texto personalizado a ser usado em mensagens para seus usuários. Para as restrições de string que o Amazon Cognito aplica a esses parâmetros, consulte. [MessageTemplateType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_MessageTemplateType.html)

**smsMessage**  
A mensagem SMS personalizada a ser enviada a seus usuários. Deve incluir o valor de `codeParameter` recebido na solicitação.

**emailMessage**  
A mensagem de e-mail personalizada a ser enviada a seus usuários. Você pode usar a formatação HTML no parâmetro `emailMessage`. Deve incluir o valor de `codeParameter` recebido na solicitação como a variável `{####}`. O Amazon Cognito pode usar o parâmetro `emailMessage` somente se o atributo `EmailSendingAccount` do grupo de usuários for `DEVELOPER`. Se o atributo `EmailSendingAccount` do grupo de usuários não for `DEVELOPER` e um parâmetro `emailMessage` for retornado, o Amazon Cognito vai gerar um código de erro 400 `com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException`. Ao escolher o Amazon Simple Email Service (Amazon SES) para enviar mensagens de e-mail, o atributo `EmailSendingAccount` de um grupo de usuários é `DEVELOPER`. Do contrário, o valor será `COGNITO_DEFAULT`.

**emailSubject**  
A linha de assunto da mensagem personalizada. Você só pode usar o `emailSubject` parâmetro se o EmailSendingAccount atributo do grupo de usuários for`DEVELOPER`. Se o atributo `EmailSendingAccount` do grupo de usuários não for `DEVELOPER` e o Amazon Cognito retornar um parâmetro `emailSubject`, o Amazon Cognito vai gerar um código de erro 400 `com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException`. O atributo `EmailSendingAccount` de um grupo de usuários é `DEVELOPER` ao escolher o Amazon Simple Email Service (Amazon SES) para enviar mensagens de e-mail. Do contrário, o valor será `COGNITO_DEFAULT`.

## Exemplo de mensagem personalizada de cadastro
<a name="aws-lambda-triggers-custom-message-example"></a>

Esse exemplo de função do Lambda personaliza um e-mail ou mensagem SMS quando o serviço requer que uma aplicação envie um código de verificação ao usuário.

O Amazon Cognito pode invocar um acionador do Lambda em vários eventos: no pós-registro, ao reenviar um código de verificação, ao recuperar uma senha esquecida ou ao verificar um atributo de usuário. A resposta inclui mensagens para SMS e e-mail. A mensagem deve incluir o parâmetro de código `"####"`. Esse parâmetro é o espaço reservado do código de verificação que o usuário recebe.

A mensagem de e-mail tem um comprimento máximo de 20 mil caracteres UTF-8. Esse tamanho inclui o código de verificação. Você pode usar etiquetas HTML nessas mensagens de e-mail.

A mensagem SMS tem um comprimento máximo de 140 caracteres UTF-8. Esse tamanho inclui o código de verificação.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.triggerSource === "CustomMessage_SignUp") {
    const message = `Thank you for signing up. Your confirmation code is ${event.request.codeParameter}.`;
    event.response.smsMessage = message;
    event.response.emailMessage = message;
    event.response.emailSubject = "Welcome to the service.";
  }
  return event;
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

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

```
{
	"version": "1",
	"region": "us-west-2",
	"userPoolId": "us-west-2_EXAMPLE",
	"userName": "test-user",
	"callerContext": {
		"awsSdkVersion": "aws-sdk-unknown-unknown",
		"clientId": "1example23456789"
	},
	"triggerSource": "CustomMessage_SignUp",
	"request": {
		"userAttributes": {
			"sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
			"cognito:user_status": "CONFIRMED",
			"email_verified": "true",
			"phone_number_verified": "true",
			"phone_number": "+12065551212",
			"email": "test-user@example.com"
		},
		"codeParameter": "{####}",
		"linkParameter": "{##Click Here##}",
		"usernameParameter": "None"
	},
	"response": {
		"smsMessage": "None",
		"emailMessage": "None",
		"emailSubject": "None"
	}
}
```

------

## Exemplo de mensagem personalizada para criação de usuário pelo administrador
<a name="aws-lambda-triggers-custom-message-admin-example"></a>

A solicitação que o Amazon Cognito enviou para este exemplo de mensagem personalizada da função do Lambda tem um valor `triggerSource` e um nome de usuário `CustomMessage_AdminCreateUser` com uma senha temporária. A função é preenchida com `${event.request.codeParameter}` a partir da senha temporária na solicitação e com `${event.request.usernameParameter}` a partir do nome de usuário na solicitação.

Suas mensagens personalizadas devem inserir os valores de `codeParameter` e `usernameParameter` dentro `smsMessage` e `emailMessage` no objeto de resposta. Neste exemplo, a função grava a mesma mensagem nos campos de resposta `event.response.smsMessage` e `event.response.emailMessage`.

A mensagem de e-mail tem um comprimento máximo de 20 mil caracteres UTF-8. Esse tamanho inclui o código de verificação. Você pode usar etiquetas HTML nesses e-mails. A mensagem SMS tem um comprimento máximo de 140 caracteres UTF-8. Esse tamanho inclui o código de verificação.

A resposta inclui mensagens para SMS e e-mail. 

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.triggerSource === "CustomMessage_AdminCreateUser") {
    const message = `Welcome to the service. Your user name is ${event.request.usernameParameter}. Your temporary password is ${event.request.codeParameter}`;
    event.response.smsMessage = message;
    event.response.emailMessage = message;
    event.response.emailSubject = "Welcome to the service";
  }
  return event;
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

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

```
{
  "version": 1,
  "triggerSource": "CustomMessage_AdminCreateUser",
  "region": "<region>",
  "userPoolId": "<userPoolId>",
  "userName": "<userName>",
  "callerContext": {
      "awsSdk": "<calling aws sdk with version>",
      "clientId": "<apps client id>",
      ...
  },
  "request": {
      "userAttributes": {
          "phone_number_verified": false,
          "email_verified": true,
           ...
      },
      "codeParameter": "####",
      "usernameParameter": "username"
  },
  "response": {
      "smsMessage": "<custom message to be sent in the message with code parameter and username parameter>"
      "emailMessage": "<custom message to be sent in the message with code parameter and username parameter>"
      "emailSubject": "<custom email subject>"
  }
}
```

------