Pemicu Lambda pengirim SMS kustom - Amazon Cognito

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pemicu Lambda pengirim SMS kustom

Saat Anda menetapkan pemicu pengirim SMS khusus ke kumpulan pengguna Anda, Amazon Cognito akan memanggil fungsi Lambda alih-alih perilaku defaultnya saat peristiwa pengguna mengharuskannya mengirim pesan SMS. Dengan pemicu pengirim khusus, AWS Lambda fungsi Anda dapat mengirim pemberitahuan SMS ke pengguna Anda melalui metode dan penyedia yang Anda pilih. Kode kustom fungsi Anda harus memproses dan mengirimkan semua pesan SMS dari kumpulan pengguna Anda.

Pemicu ini menyajikan skenario di mana Anda mungkin ingin memiliki kontrol yang lebih besar atas bagaimana kumpulan pengguna Anda mengirim pesan SMS. Fungsi Lambda Anda dapat menyesuaikan panggilan ke operasi Amazon SNS API, misalnya saat Anda ingin mengelola beberapa IDs originasi atau silang. Wilayah AWS Fungsi Anda juga dapat mengarahkan pesan ke media pengiriman lain atau layanan pihak ketiga.

Untuk mempelajari cara mengonfigurasi pemicu pengirim email kustom, lihatMengaktifkan pemicu Lambda pengirim kustom.

Sumber pemicu Lambda pengirim SMS kustom

Tabel berikut menunjukkan peristiwa memicu untuk sumber pemicu SMS kustom dalam kode Lambda Anda.

TriggerSource value Peristiwa
CustomSMSSender_SignUp Seorang pengguna mendaftar dan Amazon Cognito mengirimkan pesan selamat datang.
CustomSMSSender_ForgotPassword Seorang pengguna meminta kode untuk mengatur ulang kata sandi mereka.
CustomSMSSender_ResendCode Seorang pengguna meminta kode baru untuk mengonfirmasi pendaftaran mereka.
CustomSMSSender_VerifyUserAttribute Pengguna membuat atribut alamat email atau nomor telepon baru dan Amazon Cognito mengirimkan kode untuk memverifikasi atribut.
CustomSMSSender_UpdateUserAttribute Pengguna memperbarui alamat email atau atribut nomor telepon dan Amazon Cognito mengirimkan kode untuk memverifikasi atribut.
CustomSMSSender_Authentication Pengguna yang dikonfigurasi dengan otentikasi multi-faktor SMS (MFA) masuk.
CustomSMSSender_AdminCreateUser Anda membuat pengguna baru di kumpulan pengguna Anda dan Amazon Cognito mengirimi mereka kata sandi sementara.

Parameter pemicu Lambda pengirim SMS kustom

Permintaan yang diteruskan Amazon Cognito ke fungsi Lambda ini adalah kombinasi dari parameter di bawah ini dan parameter umum yang ditambahkan Amazon Cognito ke semua permintaan.

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

Parameter permintaan pengirim SMS kustom

jenis

Versi permintaan. Untuk acara pengirim SMS kustom, nilai string ini selalucustomSMSSenderRequestV1.

code

Kode terenkripsi yang fungsi Anda dapat mendekripsi dan mengirim ke pengguna Anda.

clientMetadata

Satu atau lebih pasangan nilai kunci yang dapat Anda berikan sebagai input khusus ke pemicu fungsi Lambda pengirim SMS kustom. Untuk meneruskan data ini ke fungsi Lambda Anda, Anda dapat menggunakan ClientMetadata parameter dalam tindakan AdminRespondToAuthChallengedan RespondToAuthChallengeAPI. Amazon Cognito tidak menyertakan data dari ClientMetadata parameter dalam AdminInitiateAuthdan operasi InitiateAuthAPI dalam permintaan yang diteruskan ke fungsi otentikasi pos.

userAttributes

Satu atau lebih pasangan kunci-nilai yang mewakili atribut pengguna.

Parameter respons pengirim SMS kustom

Amazon Cognito tidak mengharapkan informasi pengembalian tambahan dalam tanggapan. Fungsi Anda dapat menggunakan operasi API untuk menanyakan dan memodifikasi sumber daya Anda, atau merekam metadata peristiwa ke sistem eksternal.

Contoh kode

Contoh Node.js berikut memproses peristiwa pesan SMS dalam fungsi Lambda pengirim SMS kustom Anda. Contoh ini mengasumsikan fungsi Anda memiliki dua variabel lingkungan yang ditentukan.

KEY_ID

ID kunci KMS yang ingin Anda gunakan untuk mengenkripsi dan mendekripsi kode pengguna Anda.

KEY_ARN

Nama Sumber Daya Amazon (ARN) dari kunci KMS yang ingin Anda gunakan untuk mengenkripsi dan mendekripsi kode pengguna Anda.

Untuk menerapkan fungsi ini
  1. Instal NodeJS versi terbaru di ruang kerja pengembang Anda.

  2. Buat proyek NodeJS baru di ruang kerja Anda.

  3. Inisialisasi proyek Anda dengannpm init -y.

  4. Buat skrip untuk fungsi Lambda:. touch index.mjs

  5. Tempelkan isi contoh di bawah ini ke dalamindex.mjs.

  6. Unduh ketergantungan proyek, AWS Encryption SDK:npm install @aws-crypto/client-node.

  7. Zip direktori proyek ke dalam file:zip -r my_deployment_package.zip ..

  8. Menyebarkan file ZIP ke fungsi Anda.

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

Mengevaluasi kemampuan pesan SMS dengan fungsi pengirim SMS kustom

Fungsi Lambda pengirim SMS khusus menerima pesan SMS yang akan dikirim oleh kumpulan pengguna Anda, dan fungsi tersebut mengirimkan konten berdasarkan logika kustom Anda. Amazon Cognito mengirimkan Parameter pemicu Lambda pengirim SMS kustom ke fungsi Anda. Fungsi Anda dapat melakukan apa yang Anda inginkan dengan informasi ini. Misalnya, Anda dapat mengirim kode ke topik Amazon Simple Notification Service (Amazon SNS). Pelanggan topik Amazon SNS dapat berupa pesan SMS, titik akhir HTTPS, atau alamat email.

Untuk membuat lingkungan pengujian untuk perpesanan SMS Amazon Cognito dengan fungsi Lambda pengirim SMS khusus, amazon-cognito-user-poollihat development-and-testing-with - sms-redirected-to-email - di pustaka aws-samples pada. GitHub Repositori berisi AWS CloudFormation template yang dapat membuat kumpulan pengguna baru, atau bekerja dengan kumpulan pengguna yang sudah Anda miliki. Template ini membuat fungsi Lambda dan topik Amazon SNS. Fungsi Lambda yang ditetapkan template sebagai pemicu pengirim SMS khusus, mengalihkan pesan SMS Anda ke pelanggan ke topik Amazon SNS.

Saat Anda menerapkan solusi ini ke kumpulan pengguna, semua pesan yang biasanya dikirim Amazon Cognito melalui pesan SMS, fungsi Lambda malah mengirim ke alamat email pusat. Gunakan solusi ini untuk menyesuaikan dan melihat pratinjau pesan SMS, dan untuk menguji peristiwa kumpulan pengguna yang menyebabkan Amazon Cognito mengirim pesan SMS. Setelah Anda menyelesaikan pengujian, putar kembali CloudFormation tumpukan, atau hapus tugas fungsi pengirim SMS kustom dari kumpulan pengguna Anda.

penting

Jangan gunakan template di amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email untuk membangun lingkungan produksi. Fungsi Lambda pengirim SMS khusus dalam solusi mensimulasikan pesan SMS, tetapi fungsi Lambda mengirimkan semuanya ke satu alamat email pusat. Sebelum Anda dapat mengirim pesan SMS dalam kumpulan pengguna Amazon Cognito produksi, Anda harus melengkapi persyaratan yang ditunjukkan di. Pengaturan pesan SMS untuk kolam pengguna Amazon Cognito