Desencadenador de Lambda para remitentes de correos electrónicos personalizados - Amazon Cognito

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Desencadenador de Lambda para remitentes de correos electrónicos personalizados

Al asignar un desencadenador de envío de correo electrónico personalizado al grupo de usuarios, Amazon Cognito invoca una función de Lambda en lugar de su comportamiento predeterminado cuando un evento de usuario requiere que envíe un mensaje de correo electrónico. Con un activador de remitente personalizado, tu AWS Lambda función puede enviar notificaciones por correo electrónico a tus usuarios a través del método y el proveedor que elijas. El código personalizado de la función debe procesar y entregar todos los mensajes de correo electrónico del grupo de usuarios.

Este desencadenador es útil en los casos en que quiera tener más control sobre la forma en que el grupo de usuarios envía mensajes de correo electrónico. Su función de Lambda puede personalizar la llamada a las operaciones de API de Amazon SES, como, por ejemplo, cuando quiera administrar varias identidades verificadas o entre Regiones de AWS. La función también podría redirigir los mensajes a otro medio de entrega o a un servicio de terceros.

Para obtener información sobre cómo configurar un activador de envío de correo electrónico personalizado, consulteActivación de activadores Lambda de remitentes personalizados.

Fuentes del desencadenador de Lambda para remitentes de correos electrónicos personalizados

En la siguiente tabla se muestra el evento desencadenante de las fuentes del desencadenador para correos electrónicos personalizados en el código de Lambda.

TriggerSource value Evento
CustomEmailSender_SignUp Un usuario se registra y Amazon Cognito envía un mensaje de bienvenida.
CustomEmailSender_Authentication Un usuario inicia sesión y Amazon Cognito envía un código de autenticación multifactor (MFA).
CustomEmailSender_ForgotPassword Un usuario solicita un código para restablecer su contraseña.
CustomEmailSender_ResendCode Un usuario solicita un código de sustitución de confirmación de cuenta.
CustomEmailSender_UpdateUserAttribute Un usuario actualiza una dirección de correo electrónico o un atributo de número de teléfono y Amazon Cognito envía un código para verificar el atributo.
CustomEmailSender_VerifyUserAttribute Un usuario crea una dirección de correo electrónico nueva o un atributo de número de teléfono y Amazon Cognito envía un código para verificar el atributo.
CustomEmailSender_AdminCreateUser Crea un nuevo usuario en su grupo de usuarios y Amazon Cognito le envía una contraseña temporal.
CustomEmailSender_AccountTakeOverNotification Amazon Cognito detecta un intento de asumir una cuenta de usuario y envía una notificación al usuario.

Parámetros de desencadenador de Lambda para remitente de correo electrónico personalizado

La solicitud que Amazon Cognito envía a esta función de Lambda es una combinación de los parámetros que se indican a continuación y los parámetros comunes que Amazon Cognito agrega a todas las solicitudes.

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

Parámetros de solicitudes de remitente de correo electrónico personalizado

type

La versión de la solicitud. Para un evento de remitente de correo electrónico personalizado, el valor de esta cadena es siempre customEmailSenderRequestV1.

code

El código cifrado que su función puede descifrar y enviar al usuario.

clientMetadata

Uno o varios pares clave-valor que puede proporcionar como datos de entrada personalizados al desencadenador de la función de Lambda de remitente de correo electrónico personalizado. Para pasar estos datos a la función Lambda, puede usar el ClientMetadata parámetro en las acciones AdminRespondToAuthChallengey de la RespondToAuthChallengeAPI. Amazon Cognito no incluye datos del ClientMetadata parámetro ni de las operaciones de la InitiateAuthAPI en la solicitud que transfiere a la función de autenticación posterior. AdminInitiateAuth

nota

Amazon Cognito envía ClientMetadata a funciones de desencadenador de correo electrónico personalizadas en eventos con los siguientes orígenes de activación:

  • CustomEmailSender_ForgotPassword

  • CustomEmailSender_SignUp

  • CustomEmailSender_Authentication

Amazon Cognito no envía ClientMetadata en eventos de desencadenador con el origen CustomEmailSender_AccountTakeOverNotification.

userAttributes

Uno o varios pares clave-valor que representan atributos de usuario.

Parámetros de respuesta de remitente de correo electrónico personalizado

Amazon Cognito no espera ninguna información de devolución adicional en la respuesta de remitente de correo electrónico personalizado. La función de Lambda debe interpretar el evento, descifrar el código y, a continuación, entregar el contenido del mensaje. Una función típica agrupa un mensaje de correo electrónico y lo dirige a un relé de SMTP de terceros.

Ejemplo de código

En el siguiente ejemplo de Node.js se procesa un evento de mensaje de correo electrónico en la función de Lambda de remitentes de correo electrónico personalizado. En este ejemplo se supone que la función tiene dos variables de entorno definidas.

KEY_ID

El ID de la clave KMS que desea usar para cifrar y descifrar los códigos de sus usuarios.

KEY_ARN

El nombre de recurso de Amazon (ARN) de la clave de KMS que desea utilizar para cifrar y descifrar los códigos de sus usuarios.

Para implementar esta función
  1. Instala la última versión de Nodejs en tu espacio de trabajo de desarrollador.

  2. Crea un nuevo proyecto de Nodejs en tu espacio de trabajo.

  3. Inicialice su proyecto con. npm init -y

  4. Cree el script para la función Lambda:. touch index.mjs

  5. Pegue el contenido del siguiente ejemplo enindex.mjs.

  6. Descarga la dependencia del proyecto, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Comprima el directorio del proyecto en un archivo:zip -r my_deployment_package.zip ..

  8. Implemente el archivo ZIP en su función.

Esta función de ejemplo descifra el código y, para los eventos de registro, simula el envío de un mensaje de correo electrónico a la dirección de correo electrónico del usuario.

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