Acheminement des appels vers AWS Lambda des fonctions pour l'audio PSTN du SDK Amazon Chime ()AWS CLI - Kit SDK Amazon Chime

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Acheminement des appels vers AWS Lambda des fonctions pour l'audio PSTN du SDK Amazon Chime ()AWS CLI

Ce didacticiel vous guide tout au long du processus de configuration du routage des appels vers les fonctions Lambda à l'aide du service audio PSTN du SDK Amazon Chime. Vous apprendrez à créer des fonctions Lambda, à configurer des applications multimédia SIP et à configurer des règles SIP pour gérer les appels entrants.

Prérequis

Avant de commencer ce didacticiel, assurez-vous de suivre les étapes suivantes :

  • Installez le AWS CLI. Pour plus d'informations, voir Installation ou mise à jour vers la dernière version du AWS CLI dans le guide de AWS CLI l'utilisateur.

  • Configurez votre AWS CLI compte avec les informations d'identification appropriées. Exécutez aws configure si vous n'avez pas encore configuré vos informations d'identification.

  • Maîtrisez les concepts du SDK Amazon Chime AWS Lambda et maîtrisez les concepts de base.

  • Configurez des autorisations suffisantes pour créer et gérer le SDK Amazon Chime et les ressources Lambda dans votre compte AWS.

  • Pour le routage basé sur le numéro de téléphone, vous devez avoir un numéro de téléphone dans votre inventaire des numéros de téléphone du SDK Amazon Chime.

  • Pour le routage basé sur le connecteur vocal, un connecteur vocal doit être configuré dans votre compte.

Considérations de coût

Le didacticiel inclut des instructions de nettoyage pour vous assurer de ne pas encourir de frais récurrents une fois terminé. Pour plus d'informations, consultez la section Tarification du SDK Amazon Chime.

Commençons par configurer le routage des appels pour le son PSTN du SDK Amazon Chime.

Rechercher et fournir des numéros de téléphone

Avant de créer des règles SIP avec des déclencheurs de numéros de téléphone, vous devez avoir des numéros de téléphone dans votre inventaire du SDK Amazon Chime. Voici comment rechercher les numéros de téléphone disponibles et les fournir.

Exemple : Rechercher les numéros de téléphone disponibles
# 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

Cette commande recherche les numéros de téléphone gratuits disponibles avec le préfixe 844 aux États-Unis. Vous pouvez modifier les paramètres pour rechercher différents types de numéros.

Exemple : Fournir un numéro de téléphone

Une fois que vous avez trouvé un numéro de téléphone disponible, vous pouvez le configurer à l'aide de la commande suivante :

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

+18445550100Remplacez-le par un numéro de téléphone réellement disponible dans les résultats de recherche. Cette commande fournira le numéro de téléphone à votre compte.

Exemple : Vérifiez l'état du numéro de téléphone

Après avoir commandé un numéro de téléphone, vous pouvez vérifier son statut :

# 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

Remplacez le numéro de commande par celui renvoyé par la create-phone-number-order commande.

Exemple : Listez les numéros de téléphone dans votre inventaire

Pour voir tous les numéros de téléphone de votre inventaire :

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

Pour rechercher les numéros de téléphone non attribués qui peuvent être utilisés pour les règles SIP, procédez comme suit :

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

Création d'une fonction Lambda pour la gestion des appels

Créons maintenant une fonction Lambda qui gérera les appels entrants. La fonction recevra les événements du service audio PSTN et répondra en fournissant des instructions sur la façon de traiter l'appel.

Exemple : Création d'un rôle IAM pour Lambda

Avant de créer la fonction Lambda, vous devez créer un rôle IAM qui accorde les autorisations nécessaires.

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

Ces commandes créent un rôle IAM qui permet à Lambda de l'assumer et d'associer la politique d'exécution de base, qui fournit des autorisations permettant à Lambda d'écrire des journaux. CloudWatch

Exemple Création d’une fonction Lambda.

Maintenant, créez une fonction Lambda simple qui gérera les appels entrants.

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

Cette fonction Lambda répond aux appels entrants par un message vocal, puis raccroche.

Exemple : Ajouter une autorisation Lambda pour le SDK Amazon Chime

Autorisez le service Amazon Chime SDK à appeler votre fonction Lambda.

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

Cette commande permet au service Amazon Chime SDK Voice Connector d'appeler votre fonction Lambda.

Création d'une application multimédia SIP

Les applications multimédia SIP connectent votre fonction Lambda au service audio PSTN. Dans cette section, vous allez créer une application multimédia SIP qui utilise votre fonction Lambda.

Exemple : Création de l'application multimédia 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}\"}]"

L'application multimédia SIP fait office de pont entre le service audio PSTN et votre fonction Lambda.

Exemple : Obtenez l'ID de l'application multimédia SIP

Après avoir créé l'application multimédia SIP, vous devez récupérer son identifiant pour une utilisation ultérieure dans le didacticiel.

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

Notez l'ID de l'application multimédia SIP renvoyé par cette commande, car vous en aurez besoin pour créer des règles SIP.

Configurer le routage des appels avec les règles SIP

Les règles SIP déterminent la manière dont les appels entrants sont acheminés vers vos applications multimédia SIP. Vous pouvez créer des règles basées sur les numéros de téléphone ou les noms d'hôte du connecteur vocal.

Exemple : Création d'une règle SIP avec déclencheur de numéro de téléphone

Pour acheminer les appels en fonction d'un numéro de téléphone, utilisez la commande suivante :

# 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}]"

Cette commande crée une règle SIP qui achemine les appels vers votre numéro de téléphone vers votre application multimédia SIP.

Exemple : Création d'une règle SIP avec le déclencheur Request URI hostname

Vous pouvez également acheminer les appels en fonction de l'URI de demande d'un appel SIP entrant du Voice Connector :

# 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}]"

Remplacez le nom d'hôte par le nom d'hôte sortant de votre connecteur vocal.

Configuration de la redondance avec plusieurs applications multimédia SIP

Pour la redondance et le basculement, vous pouvez créer plusieurs applications multimédia SIP dans la même région AWS et spécifier leur ordre de priorité.

Exemple : Création d'une fonction Lambda de sauvegarde

Créez d'abord une fonction Lambda de sauvegarde dans la même région.

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
Exemple : Ajoutez l'autorisation Lambda pour le SDK Amazon Chime à la fonction de sauvegarde
# 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}
Exemple : créer une application multimédia SIP de sauvegarde
# 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)
Exemple : Obtenez l'ID de la règle SIP
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text)
Exemple : Mettre à jour la règle SIP pour inclure les deux applications avec des priorités
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}]"

Cette commande met à jour la règle SIP pour inclure à la fois les applications multimédia SIP principales et de sauvegarde avec leurs priorités respectives.

Création d'appels sortants

Vous pouvez également créer des appels sortants qui invoquent votre fonction Lambda à l'aide CreateSIPMediaApplicationCall de l'API.

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

Remplacez le numéro de téléphone de destination par un numéro valide. Vous devez avoir les numéros de téléphone dans votre inventaire pour passer de vrais appels.

Déclencher Lambda pendant un appel actif

Vous pouvez déclencher votre fonction Lambda lors d'un appel actif à l'aide de l'UpdateSIPMediaApplicationCallAPI.

# 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"}'

L'ID de transaction est fourni dans les données d'événement envoyées à votre fonction Lambda lorsqu'un appel est actif.

Nettoyage des ressources

Lorsque vous aurez terminé ce didacticiel, vous devez supprimer les ressources que vous avez créées pour éviter d'encourir des frais supplémentaires.

Exemple : Supprimer les règles 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}
Exemple : Supprimer les applications multimédia 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}
Exemple : Supprimer les fonctions Lambda
aws lambda delete-function --function-name ChimeSDKCallHandler aws lambda delete-function --function-name ChimeSDKBackupHandler
Exemple : Supprimer le rôle 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
Exemple : Publier les numéros de téléphone

Si vous n'avez plus besoin des numéros de téléphone, vous pouvez les communiquer :

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

Notez que les numéros de téléphone passent au statut ReleaseInProgress « » pendant 7 jours avant d'être publiés dans leur intégralité. Pendant cette période, vous pouvez les restaurer à l'aide de la restore-phone-number commande si nécessaire.

Passage à la production

Ce didacticiel présente les fonctionnalités de base du routage des appels vers les fonctions Lambda à l'aide de l'audio PSTN du SDK Amazon Chime. Toutefois, pour les environnements de production, vous devez prendre en compte les meilleures pratiques suivantes :

Considérations sur la sécurité

  • Implémentez les autorisations du moindre privilège. Créez des politiques IAM personnalisées qui n'accordent que les autorisations spécifiques nécessaires à vos fonctions Lambda.

  • Ajoutez des conditions ARN source aux autorisations Lambda. Limitez les applications multimédia SIP qui peuvent appeler vos fonctions Lambda.

  • Implémentez la validation des entrées. Ajoutez une validation à vos fonctions Lambda pour vous assurer qu'elles ne traitent que des événements valides.

  • Envisagez le déploiement d'un VPC. Pour améliorer la sécurité, déployez vos fonctions Lambda au sein d'un VPC avec les groupes de sécurité appropriés.

  • Chiffrez les données sensibles. AWS Key Management Service À utiliser pour chiffrer toutes les données sensibles utilisées par votre application.

Considérations concernant l'architecture

  • Mettez en œuvre la surveillance et la journalisation. Configurez des CloudWatch alarmes et des journaux pour surveiller l'état et les performances de votre application.

  • Ajoutez la gestion des erreurs. Implémentez une gestion complète des erreurs dans vos fonctions Lambda.

  • Tenez compte des limites d'échelle. Tenez compte des quotas de service et demandez des augmentations si nécessaire en cas de volumes d'appels élevés.

  • Implémentez l'infrastructure sous forme de code. Utilisez AWS CloudFormation ou AWS CDK pour déployer votre infrastructure.

  • Configurez CI/CD des pipelines. Mettez en œuvre une intégration et un déploiement continus pour vos fonctions Lambda.

Pour plus d'informations sur la création d'applications prêtes pour la production, reportez-vous à :

Étapes suivantes

Maintenant que vous avez appris à acheminer des appels vers des fonctions Lambda à l'aide de l'audio PSTN du SDK Amazon Chime, vous pouvez découvrir des fonctionnalités plus avancées :