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:
Integrasikan dengan Amazon Lex untuk mengelola interaksi dialog untuk skenario agen cerdas. Untuk informasi selengkapnya, lihat Membuat bot Amazon Lex V2 untuk perpesanan Amazon Chime SDK.
Siapkan analitik suara untuk mendapatkan wawasan dari panggilan Anda. Untuk informasi selengkapnya, lihat Menghasilkan wawasan dari panggilan menggunakan analitik panggilan untuk Amazon Chime SDK.
Jelajahi tindakan kontrol panggilan lanjutan untuk membangun alur panggilan yang canggih. Untuk informasi selengkapnya, lihat Menggunakan konfigurasi analitik panggilan untuk Amazon Chime SDK.