Desencadenador de Lambda para remitentes personalizados de SMS - 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 personalizados de SMS

Al asignar un desencadenador de envío de SMS 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 SMS. Con un activador de remitente personalizado, tu AWS Lambda función puede enviar notificaciones por SMS 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 SMS 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 SMS. Su función Lambda puede personalizar la llamada a las operaciones de la API de Amazon SNS, por ejemplo, cuando quiere gestionar varios IDs orígenes o cruces. 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, consulte. Activación de activadores Lambda de remitentes personalizados

Fuentes del desencadenador de Lambda para remitentes personalizados de SMS

En la siguiente tabla, se muestra el evento desencadenante de las fuentes del desencadenador de SMS personalizado en el código de Lambda.

TriggerSource value Evento
CustomSMSSender_SignUp Un usuario se registra y Amazon Cognito envía un mensaje de bienvenida.
CustomSMSSender_ForgotPassword Un usuario solicita un código para restablecer su contraseña.
CustomSMSSender_ResendCode Un usuario solicita un código nuevo para confirmar su registro.
CustomSMSSender_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.
CustomSMSSender_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.
CustomSMSSender_Authentication Un usuario configurado con autenticación multifactor (MFA) por SMS inicia sesión.
CustomSMSSender_AdminCreateUser Crea un nuevo usuario en su grupo de usuarios y Amazon Cognito le envía una contraseña temporal.

Parámetros de desencadenador de Lambda para remitente de SMS 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": "customSMSSenderRequestV1", "code": "string", "clientMetadata": { "string": "string", . . . }, "userAttributes": { "string": "string", . . . } }

Parámetros de solicitudes de remitente de SMS personalizado

type

La versión de la solicitud. Para un evento de remitente de SMS personalizado, el valor de esta cadena es siempre customSMSSenderRequestV1.

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 SMS 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 InitiateAuthAPI en la solicitud que transfiere a la función de autenticación posterior. AdminInitiateAuth

userAttributes

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

Parámetros de respuesta de remitente de SMS personalizado

Amazon Cognito no espera ninguna información de devolución adicional en la respuesta. La función puede utilizar operaciones de la API para consultar y modificar los recursos o registrar metadatos de eventos en un sistema externo.

Ejemplo de código

En el siguiente ejemplo de Node.js se procesa un evento de mensaje SMS en la función de Lambda de remitente de SMS 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.

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

Evaluar las capacidades de los mensajes SMS con una función de remitente de SMS personalizado

La función Lambda de remitente de SMS personalizado acepta los mensajes SMS que enviaría el grupo de usuarios y la función entrega el contenido según su lógica personalizada. Amazon Cognito envía el Parámetros de desencadenador de Lambda para remitente de SMS personalizado a su función. Su función puede hacer lo que desee con esta información. Por ejemplo, puede enviar el código a un tema de Amazon Simple Notification Service (Amazon SNS). Un suscriptor de temas de Amazon SNS puede ser un mensaje SMS, un punto de conexión HTTPS o una dirección de correo electrónico.

Para crear un entorno de prueba para la mensajería SMS de Amazon Cognito con una función Lambda de remitente de SMS personalizada, consulte amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email en la biblioteca aws-samples de. GitHub El repositorio contiene AWS CloudFormation plantillas que pueden crear un nuevo grupo de usuarios o funcionar con un grupo de usuarios del que ya disponga. Estas plantillas crean funciones de Lambda y un tema de Amazon SNS. La función de Lambda que la plantilla asigna como desencadenador de remitente SMS personalizado, redirige los mensajes SMS a los suscriptores al tema de Amazon SNS.

Cuando implementa esta solución en un grupo de usuarios, todos los mensajes que Amazon Cognito suele enviar a través de mensajería SMS, la función de Lambda los envía en su lugar a una dirección de correo electrónico central. Utilice esta solución para personalizar y obtener una vista previa de los mensajes SMS y para probar los eventos del grupo de usuarios que hacen que Amazon Cognito envíe un mensaje SMS. Tras completar las pruebas, revierta la CloudFormation pila o elimine la asignación de funciones de envío de SMS personalizada de su grupo de usuarios.

importante

No utilice las plantillas de amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email para crear un entorno de producción. La función de Lambda del remitente de SMS personalizado en la solución simula mensajes SMS, pero la función de Lambda los envía a una sola dirección de correo electrónico central. Para poder enviar mensajes SMS en un grupo de usuarios de Amazon Cognito de producción, debe completar los requisitos que se muestran en Configuración de mensajes SMS para grupos de usuarios de Amazon Cognito.