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.
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 origenCustomEmailSender_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
-
Instala la última versión de Nodejs en tu espacio de trabajo de desarrollador.
-
Crea un nuevo proyecto de Nodejs en tu espacio de trabajo.
-
Inicialice su proyecto con.
npm init -y
-
Cree el script para la función Lambda:.
touch index.mjs
-
Pegue el contenido del siguiente ejemplo en
index.mjs
. -
Descarga la dependencia del proyecto, AWS Encryption SDK:
npm install @aws-crypto/client-node
. -
Comprima el directorio del proyecto en un archivo:
zip -r my_deployment_package.zip .
.
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; } };