Merutekan panggilan ke AWS Lambda fungsi untuk audio Amazon Chime SDK PSTN ()AWS CLI - Amazon Chime SDK

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

Merutekan panggilan ke AWS Lambda fungsi untuk audio Amazon Chime SDK PSTN ()AWS CLI

Tutorial ini memandu Anda melalui proses pengaturan routing panggilan ke fungsi Lambda menggunakan layanan audio Amazon Chime SDK PSTN. Anda akan belajar cara membuat fungsi Lambda, menyiapkan aplikasi media SIP, dan mengonfigurasi aturan SIP untuk menangani panggilan masuk.

Prasyarat

Sebelum Anda memulai tutorial ini, pastikan Anda melakukan hal berikut:

  • Instal AWS CLI. Untuk informasi selengkapnya, lihat Menginstal atau memperbarui ke versi terbaru dari Panduan AWS CLI Pengguna. AWS CLI

  • Konfigurasikan Anda AWS CLI dengan kredensi yang sesuai. Jalankan aws configure jika Anda belum menyiapkan kredensi Anda.

  • Memiliki keakraban dasar dengan AWS Lambda dan konsep Amazon Chime SDK.

  • Siapkan izin yang memadai untuk membuat dan mengelola sumber daya Amazon Chime SDK dan Lambda di akun AWS Anda.

  • Untuk perutean berbasis nomor telepon, Anda harus memiliki nomor telepon di inventaris nomor telepon Amazon Chime SDK Anda.

  • Untuk perutean berbasis Konektor Suara, Anda harus memiliki Konektor Suara yang dikonfigurasi di akun Anda.

Pertimbangan biaya

Tutorial ini mencakup instruksi pembersihan untuk memastikan Anda tidak dikenakan biaya berkelanjutan setelah selesai. Untuk informasi selengkapnya, lihat Harga Amazon Chime SDK.

Mari kita mulai dengan mengatur perutean panggilan untuk audio Amazon Chime SDK PSTN.

Cari dan berikan nomor telepon

Sebelum membuat aturan SIP dengan pemicu nomor telepon, Anda harus memiliki nomor telepon di inventaris Amazon Chime SDK Anda. Berikut cara mencari nomor telepon yang tersedia dan menyediakannya.

contoh : Cari nomor telepon yang tersedia
# Search for available toll-free phone numbers aws chime-sdk-voice search-available-phone-numbers \ --phone-number-type TollFree \ --country US \ --toll-free-prefix 844 \ --max-results 5 \ --region us-east-1

Perintah ini mencari nomor telepon bebas pulsa yang tersedia dengan awalan 844 di AS. Anda dapat memodifikasi parameter untuk mencari berbagai jenis angka.

contoh : Menyediakan nomor telepon

Setelah Anda menemukan nomor telepon yang tersedia, Anda dapat menyediakannya menggunakan perintah berikut:

# Order a phone number aws chime-sdk-voice create-phone-number-order \ --product-type SipMediaApplicationDialIn \ --e164-phone-numbers "+18445550100" \ --region us-east-1

Ganti +18445550100 dengan nomor telepon aktual yang tersedia dari hasil pencarian Anda. Perintah ini akan memberikan nomor telepon ke akun Anda.

contoh : Periksa status nomor telepon

Setelah memesan nomor telepon, Anda dapat memeriksa statusnya:

# Get the phone number order status aws chime-sdk-voice get-phone-number-order \ --phone-number-order-id abcd1234-5678-90ab-cdef-EXAMPLE55555 \ --region us-east-1

Ganti ID pesanan dengan yang dikembalikan dari create-phone-number-order perintah.

contoh : Daftar nomor telepon di inventaris Anda

Untuk melihat semua nomor telepon di inventaris Anda:

# List all phone numbers aws chime-sdk-voice list-phone-numbers \ --region us-east-1

Untuk menemukan nomor telepon yang tidak ditetapkan yang dapat digunakan untuk aturan SIP:

# List unassigned phone numbers aws chime-sdk-voice list-phone-numbers \ --region us-east-1 \ --query "PhoneNumbers[?Status=='Unassigned'].E164PhoneNumber"

Buat fungsi Lambda untuk penanganan panggilan

Sekarang, mari kita buat fungsi Lambda yang akan menangani panggilan masuk. Fungsi ini akan menerima acara dari layanan audio PSTN dan merespons dengan instruksi tentang cara menangani panggilan.

contoh : Buat peran IAM untuk Lambda

Sebelum membuat fungsi Lambda, Anda perlu membuat peran IAM yang memberikan izin yang diperlukan.

cat > lambda-trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
aws iam create-role --role-name ChimeSDKLambdaRole \ --assume-role-policy-document file://lambda-trust-policy.json
aws iam attach-role-policy --role-name ChimeSDKLambdaRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Perintah ini membuat peran IAM yang memungkinkan Lambda untuk mengasumsikan dan melampirkan kebijakan eksekusi dasar, yang memberikan izin bagi Lambda untuk menulis log. CloudWatch

contoh : Buat fungsi Lambda

Sekarang, buat fungsi Lambda sederhana yang akan menangani panggilan masuk.

mkdir -p lambda cat > lambda/index.js << EOF exports.handler = async (event) => { console.log('Received event:', JSON.stringify(event, null, 2)); // Simple call handling logic const response = { SchemaVersion: '1.0', Actions: [ { Type: 'Speak', Parameters: { Engine: 'neural', Text: 'Hello! This is a test call from Amazon Chime SDK PSTN Audio.', VoiceId: 'Joanna' } }, { Type: 'Hangup', Parameters: { SipResponseCode: '200' } } ] }; return response; }; EOF
cd lambda zip -r function.zip index.js cd ..
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda create-function \ --function-name ChimeSDKCallHandler \ --runtime nodejs18.x \ --role arn:aws:iam::${ACCOUNT_ID}:role/ChimeSDKLambdaRole \ --handler index.handler \ --zip-file fileb://lambda/function.zip

Fungsi Lambda ini merespons panggilan masuk dengan pesan yang diucapkan dan kemudian menutup telepon.

contoh : Tambahkan izin Lambda untuk Amazon Chime SDK

Berikan izin ke layanan Amazon Chime SDK untuk menjalankan fungsi Lambda Anda.

# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda add-permission \ --function-name ChimeSDKCallHandler \ --statement-id ChimeSDK \ --action lambda:InvokeFunction \ --principal voiceconnector.chime.amazonaws.com \ --source-account ${ACCOUNT_ID}

Perintah ini memungkinkan layanan Amazon Chime SDK Voice Connector untuk menjalankan fungsi Lambda Anda.

Buat aplikasi media SIP

Aplikasi media SIP menghubungkan fungsi Lambda Anda ke layanan audio PSTN. Di bagian ini, Anda akan membuat aplikasi media SIP yang menggunakan fungsi Lambda Anda.

contoh : Buat aplikasi media SIP
# Get your Lambda function ARN LAMBDA_ARN=$(aws lambda get-function --function-name ChimeSDKCallHandler --query Configuration.FunctionArn --output text) aws chime-sdk-voice create-sip-media-application \ --aws-region us-east-1 \ --name "MyCallHandlerApp" \ --endpoints "[{\"LambdaArn\":\"${LAMBDA_ARN}\"}]"

Aplikasi media SIP bertindak sebagai jembatan antara layanan audio PSTN dan fungsi Lambda Anda.

contoh : Dapatkan ID aplikasi media SIP

Setelah membuat aplikasi media SIP, Anda perlu mengambil ID-nya untuk digunakan nanti dalam tutorial.

SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='MyCallHandlerApp'].SipMediaApplicationId" \ --output text) echo "SIP Media Application ID: ${SIP_MEDIA_APP_ID}"

Catat ID aplikasi media SIP yang dikembalikan oleh perintah ini, karena Anda akan membutuhkannya saat membuat aturan SIP.

Mengatur perutean panggilan dengan aturan SIP

Aturan SIP menentukan bagaimana panggilan masuk diarahkan ke aplikasi media SIP Anda. Anda dapat membuat aturan berdasarkan nomor telepon atau nama host Konektor Suara.

contoh : Buat aturan SIP dengan pemicu nomor telepon

Untuk merutekan panggilan berdasarkan nomor telepon, gunakan perintah berikut:

# Get an unassigned phone number from your inventory PHONE_NUMBER=$(aws chime-sdk-voice list-phone-numbers \ --query "PhoneNumbers[?Status=='Unassigned'].E164PhoneNumber | [0]" \ --output text) # If no unassigned phone number is found, you'll need to provision one if [ -z "$PHONE_NUMBER" ] || [ "$PHONE_NUMBER" == "None" ]; then echo "No unassigned phone numbers found. Please provision a phone number first." exit 1 fi echo "Using phone number: ${PHONE_NUMBER}" aws chime-sdk-voice create-sip-rule \ --name "IncomingCallRule" \ --trigger-type ToPhoneNumber \ --trigger-value "${PHONE_NUMBER}" \ --target-applications "[{\"SipMediaApplicationId\":\"${SIP_MEDIA_APP_ID}\",\"Priority\":1}]"

Perintah ini membuat aturan SIP yang merutekan panggilan ke nomor telepon Anda ke aplikasi media SIP Anda.

contoh : Buat aturan SIP dengan Permintaan pemicu nama host URI

Atau, Anda dapat merutekan panggilan berdasarkan URI permintaan panggilan SIP Konektor Suara yang masuk:

# Replace with your Voice Connector hostname VOICE_CONNECTOR_HOST="example.voiceconnector.chime.aws" aws chime-sdk-voice create-sip-rule \ --name "VoiceConnectorRule" \ --trigger-type RequestUriHostname \ --trigger-value "${VOICE_CONNECTOR_HOST}" \ --target-applications "[{\"SipMediaApplicationId\":\"${SIP_MEDIA_APP_ID}\",\"Priority\":1}]"

Ganti nama host dengan nama host keluar Konektor Suara Anda.

Mengatur redundansi dengan beberapa aplikasi media SIP

Untuk redundansi dan failover, Anda dapat membuat beberapa aplikasi media SIP di Wilayah AWS yang sama dan menentukan urutan prioritasnya.

contoh : Buat fungsi Lambda cadangan

Pertama, buat fungsi Lambda cadangan di Wilayah yang sama.

cat > lambda/backup-index.js >< EOF exports.handler = async (event) => { console.log('Received event in backup handler:', JSON.stringify(event, null, 2)); // Simple call handling logic for backup const response = { SchemaVersion: '1.0', Actions: [ { Type: 'Speak', Parameters: { Engine: 'neural', Text: 'Hello! This is the backup handler for Amazon Chime SDK PSTN Audio.', VoiceId: 'Matthew' } }, { Type: 'Hangup', Parameters: { SipResponseCode: '200' } } ] }; return response; }; EOF
cd lambda zip -r backup-function.zip backup-index.js cd ..
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda create-function \ --function-name ChimeSDKBackupHandler \ --runtime nodejs18.x \ --role arn:aws:iam::${ACCOUNT_ID}:role/ChimeSDKLambdaRole \ --handler backup-index.handler \ --zip-file fileb://lambda/backup-function.zip
contoh : Tambahkan izin Lambda untuk Amazon Chime SDK ke fungsi pencadangan
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda add-permission \ --function-name ChimeSDKBackupHandler \ --statement-id ChimeSDK \ --action lambda:InvokeFunction \ --principal voiceconnector.chime.amazonaws.com \ --source-account ${ACCOUNT_ID}
contoh : Buat aplikasi media SIP cadangan
# Get your backup Lambda function ARN BACKUP_LAMBDA_ARN=$(aws lambda get-function --function-name ChimeSDKBackupHandler --query Configuration.FunctionArn --output text) aws chime-sdk-voice create-sip-media-application \ --aws-region us-east-1 \ --name "BackupCallHandlerApp" \ --endpoints "[{\"LambdaArn\":\"${BACKUP_LAMBDA_ARN}\"}]" # Get the backup SIP media application ID BACKUP_SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='BackupCallHandlerApp'].SipMediaApplicationId" \ --output text)
contoh : Dapatkan ID aturan SIP
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text)
contoh : Perbarui aturan SIP untuk menyertakan kedua aplikasi dengan prioritas
aws chime-sdk-voice update-sip-rule \ --sip-rule-id ${SIP_RULE_ID} \ --target-applications "[{\"SipMediaApplicationId\":\"${SIP_MEDIA_APP_ID}\",\"Priority\":1},{\"SipMediaApplicationId\":\"${BACKUP_SIP_MEDIA_APP_ID}\",\"Priority\":2}]"

Perintah ini memperbarui aturan SIP untuk menyertakan aplikasi media SIP primer dan cadangan dengan prioritas masing-masing.

Buat panggilan keluar

Anda juga dapat membuat panggilan keluar yang memanggil fungsi Lambda Anda menggunakan API. CreateSIPMediaApplicationCall

# Use a phone number from your inventory for outbound calling FROM_PHONE_NUMBER=${PHONE_NUMBER} TO_PHONE_NUMBER="+12065550102" # Replace with a valid destination number aws chime-sdk-voice create-sip-media-application-call \ --from-phone-number "${FROM_PHONE_NUMBER}" \ --to-phone-number "${TO_PHONE_NUMBER}" \ --sip-media-application-id ${SIP_MEDIA_APP_ID}

Ganti nomor telepon tujuan dengan nomor yang valid. Anda harus memiliki nomor telepon di inventaris Anda untuk melakukan panggilan nyata.

Memicu Lambda selama panggilan aktif

Anda dapat memicu fungsi Lambda Anda selama panggilan aktif menggunakan API. UpdateSIPMediaApplicationCall

# Replace with an actual transaction ID from an active call TRANSACTION_ID="txn-3ac9de3f-6b5a-4be9-9e7e-EXAMPLE33333" aws chime-sdk-voice update-sip-media-application-call \ --sip-media-application-id ${SIP_MEDIA_APP_ID} \ --transaction-id ${TRANSACTION_ID} \ --arguments '{"action":"custom-action"}'

ID transaksi disediakan dalam data peristiwa yang dikirim ke fungsi Lambda Anda saat panggilan aktif.

Pembersihan sumber daya

Setelah selesai dengan tutorial ini, Anda harus menghapus sumber daya yang Anda buat untuk menghindari biaya tambahan.

contoh : Hapus aturan SIP
# Get the SIP rule ID if you don't have it SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text) aws chime-sdk-voice delete-sip-rule --sip-rule-id ${SIP_RULE_ID}
contoh : Hapus aplikasi media SIP
# Get SIP media application IDs if you don't have them SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='MyCallHandlerApp'].SipMediaApplicationId" \ --output text) BACKUP_SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='BackupCallHandlerApp'].SipMediaApplicationId" \ --output text) aws chime-sdk-voice delete-sip-media-application --sip-media-application-id ${SIP_MEDIA_APP_ID} aws chime-sdk-voice delete-sip-media-application --sip-media-application-id ${BACKUP_SIP_MEDIA_APP_ID}
contoh : Hapus fungsi Lambda
aws lambda delete-function --function-name ChimeSDKCallHandler aws lambda delete-function --function-name ChimeSDKBackupHandler
contoh : Hapus peran IAM
aws iam detach-role-policy --role-name ChimeSDKLambdaRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole aws iam delete-role --role-name ChimeSDKLambdaRole
contoh : Rilis nomor telepon

Jika Anda tidak lagi membutuhkan nomor telepon, Anda dapat melepaskannya:

# List phone numbers aws chime-sdk-voice list-phone-numbers # Delete a specific phone number aws chime-sdk-voice delete-phone-number --phone-number-id ${PHONE_NUMBER}

Perhatikan bahwa nomor telepon memasukkan status ReleaseInProgress "" selama 7 hari sebelum dirilis sepenuhnya. Selama periode ini, Anda dapat mengembalikannya menggunakan restore-phone-number perintah jika diperlukan.

Pergi ke produksi

Tutorial ini menunjukkan fungsionalitas dasar perutean panggilan ke fungsi Lambda menggunakan audio Amazon Chime SDK PSTN. Namun, untuk lingkungan produksi, Anda harus mempertimbangkan praktik terbaik berikut:

Pertimbangan keamanan

  • Menerapkan izin hak istimewa paling sedikit. Buat kebijakan IAM khusus yang hanya memberikan izin khusus yang diperlukan oleh fungsi Lambda Anda.

  • Tambahkan kondisi ARN sumber ke izin Lambda. Batasi aplikasi media SIP mana yang dapat menjalankan fungsi Lambda Anda.

  • Menerapkan validasi masukan. Tambahkan validasi ke fungsi Lambda Anda untuk memastikan mereka hanya memproses peristiwa yang valid.

  • Pertimbangkan penyebaran VPC. Untuk meningkatkan keamanan, gunakan fungsi Lambda Anda dalam VPC dengan grup keamanan yang sesuai.

  • Enkripsi data sensitif. Gunakan AWS Key Management Service untuk mengenkripsi data sensitif apa pun yang digunakan oleh aplikasi Anda.

Pertimbangan arsitektur

  • Melaksanakan pemantauan dan pencatatan. Siapkan CloudWatch alarm dan log untuk memantau kesehatan dan kinerja aplikasi Anda.

  • Tambahkan penanganan kesalahan. Menerapkan penanganan kesalahan yang komprehensif dalam fungsi Lambda Anda.

  • Pertimbangkan batas penskalaan. Waspadai kuota layanan dan permintaan meningkat jika diperlukan untuk volume panggilan tinggi.

  • Menerapkan infrastruktur sebagai kode. Gunakan AWS CloudFormation atau AWS CDK untuk menyebarkan infrastruktur Anda.

  • Mengatur CI/CD saluran pipa. Terapkan integrasi dan penerapan berkelanjutan untuk fungsi Lambda Anda.

Untuk informasi lebih lanjut tentang membangun aplikasi siap produksi, lihat:

Langkah selanjutnya

Sekarang setelah Anda mempelajari cara merutekan panggilan ke fungsi Lambda menggunakan audio Amazon Chime SDK PSTN, Anda dapat menjelajahi fitur yang lebih canggih: