Trigger Lambda del mittente di SMS personalizzato - Amazon Cognito

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Trigger Lambda del mittente di SMS personalizzato

Quando assegni un trigger del mittente SMS personalizzato al pool di utenti, Amazon Cognito richiama una funzione Lambda anziché il suo comportamento predefinito quando un evento utente richiede l'invio di un messaggio e-mail. Con un trigger mittente personalizzato, la tua AWS Lambda funzione può inviare notifiche SMS agli utenti tramite un metodo e un provider di tua scelta. Il codice personalizzato della funzione deve elaborare e distribuire tutti i messaggi SMS del pool di utenti.

Questo trigger è utile per scenari in cui potresti voler avere un maggiore controllo sul modo in cui il tuo pool di utenti invia i messaggi SMS. La tua funzione Lambda può personalizzare la chiamata alle operazioni dell'API Amazon SNS, ad esempio quando desideri gestire più IDs origini o incroci. Regioni AWS La tua funzione potrebbe anche reindirizzare i messaggi verso un altro mezzo di consegna o un servizio di terze parti.

Per informazioni su come configurare un trigger personalizzato per il mittente dell'e-mail, consulta. Attivazione dei trigger Lambda personalizzati del mittente

Origini dei trigger Lambda del mittente di SMS personalizzato

La tabella che segue mostra l'evento di attivazione per le origini dei trigger di SMS personalizzati nel codice Lambda.

TriggerSource value Evento
CustomSMSSender_SignUp Un utente si registra e Amazon Cognito invia un messaggio di benvenuto.
CustomSMSSender_ForgotPassword Un utente richiede un codice per reimpostare la password.
CustomSMSSender_ResendCode Un utente richiede un nuovo codice per confermare la registrazione.
CustomSMSSender_VerifyUserAttribute Un utente crea un nuovo attributo indirizzo e-mail o numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo.
CustomSMSSender_UpdateUserAttribute Un utente aggiorna un indirizzo e-mail o un numero di telefono e Amazon Cognito gli invia un codice per verificare l'attributo.
CustomSMSSender_Authentication Un utente configurato con l'autenticazione a più fattori (MFA) per SMS esegue l'accesso.
CustomSMSSender_AdminCreateUser Crei un nuovo utente nel tuo bacino d'utenza e Amazon Cognito gli invia una password temporanea.

Parametri del trigger Lambda del mittente di SMS personalizzato

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei parametri comuni aggiunti da Amazon Cognito a tutte le richieste.

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

Parametri di richiesta del mittente di SMS personalizzato

tipo

La versione della richiesta. Per un evento del mittente di SMS personalizzato, il valore di questa stringa è sempre customSMSSenderRequestV1.

code

Il codice crittografato che la funzione può decrittografare e inviare all'utente.

clientMetadata

Una o più coppie chiave-valore che è possibile fornire come input personalizzato al trigger della funzione Lambda del mittente di SMS personalizzato. Per passare questi dati alla funzione Lambda, puoi utilizzare il ClientMetadata parametro nelle azioni AdminRespondToAuthChallengee RespondToAuthChallengeAPI. Amazon Cognito non include i dati del ClientMetadata parametro AdminInitiateAuthe le operazioni InitiateAuthAPI nella richiesta che passa alla funzione di post-autenticazione.

userAttributes

Una o più coppie chiave-valore che rappresentano gli attributi utente.

Parametri di risposta del mittente di SMS personalizzato

Amazon Cognito non prevede di restituire ulteriori informazioni nella risposta. La funzione può utilizzare le operazioni API per interrogare e modificare le risorse o registrare i metadati degli eventi in un sistema esterno.

esempio di codice

Nel seguente esempio Node.js viene illustrato come elaborare un evento di messaggio SMS nella funzione Lambda del mittente di SMS personalizzata. Per questo esempio si presuppone che la funzione abbia due variabili d'ambiente definite.

KEY_ID

L'ID della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

KEY_ARN

Il nome della risorsa Amazon (ARN) della chiave KMS che desideri utilizzare per crittografare e decrittografare i codici degli utenti.

Per implementare questa funzione
  1. Installa l'ultima versione di NodeJS nel tuo spazio di lavoro per sviluppatori.

  2. Crea un nuovo progetto NodeJS nel tuo spazio di lavoro.

  3. Inizializza il tuo progetto con. npm init -y

  4. Crea lo script per la funzione Lambda:. touch index.mjs

  5. Incolla il contenuto dell'esempio seguente inindex.mjs.

  6. Scarica la dipendenza del progetto, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Comprimi la cartella del progetto in un file:zip -r my_deployment_package.zip ..

  8. Implementa il file ZIP nella tua funzione.

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

Valutazione delle funzionalità di messaggio SMS con una funzione del mittente di SMS personalizzato

Una funzione Lambda del mittente di SMS personalizzato accetta i messaggi SMS inviati dal bacino d'utenza e fornisce il contenuto in base alla logica personalizzata. Amazon Cognito invia i Parametri del trigger Lambda del mittente di SMS personalizzato alla tua funzione. La funzione può fare ciò che vuoi con queste informazioni. Ad esempio, puoi inviare il codice a un argomento Amazon Simple Notification Service (Amazon SNS). Un sottoscrittore dell'argomento Amazon SNS può essere un messaggio SMS, un endpoint HTTPS o un indirizzo e-mail.

Per creare un ambiente di test per la messaggistica SMS di Amazon Cognito con una funzione Lambda del mittente SMS personalizzata, amazon-cognito-user-poolconsulta development-and-testing-with - sms-redirected-to-email - nella libreria aws-samples su. GitHub Il repository contiene AWS CloudFormation modelli che possono creare un nuovo pool di utenti o utilizzare un pool di utenti che già possiedi. Questi modelli creano funzioni Lambda e un argomento Amazon SNS. La funzione Lambda che il modello assegna come trigger del mittente di SMS personalizzato, reindirizza i messaggi SMS ai sottoscrittori dell'argomento Amazon SNS.

Quando distribuisci questa soluzione in un bacino d'utenza, tutti i messaggi che Amazon Cognito invia di solito tramite messaggi SMS vengono inviati dalla funzione Lambda a un indirizzo e-mail centrale. Utilizza questa soluzione per personalizzare e visualizzare in anteprima i messaggi SMS e per testare gli eventi del bacino d'utenza che causano l'invio di un messaggio SMS da parte di Amazon Cognito. Dopo aver completato i test, ripristina lo CloudFormation stack o rimuovi l'assegnazione personalizzata della funzione di mittente SMS dal tuo pool di utenti.

Importante

Non utilizzate i modelli in amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email per creare un ambiente di produzione. La funzione Lambda del mittente di SMS personalizzato nella soluzione simula i messaggi SMS, ma li invia tutti a un unico indirizzo e-mail centrale. Prima di poter inviare messaggi SMS in un bacino d'utenza di Amazon Cognito di produzione, è necessario completare i requisiti indicati in Impostazioni dei messaggi SMS per i bacini d'utenza di Amazon Cognito.