Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Enrutamiento de llamadas a AWS Lambda funciones para audio PSTN del SDK de Amazon Chime ()AWS CLI
Este tutorial lo guía a través del proceso de configuración del enrutamiento de llamadas a funciones de Lambda mediante el servicio de audio PSTN del SDK de Amazon Chime. Aprenderá a crear funciones Lambda, configurar aplicaciones multimedia SIP y configurar reglas SIP para gestionar las llamadas entrantes.
Requisitos previos
Antes de comenzar este tutorial, asegúrese de hacer lo siguiente:
Instale el AWS CLI. Para obtener más información, consulte Instalación o actualización de la versión más reciente de la AWS CLI en la Guía del usuario de AWS CLI .
Configúrelo AWS CLI con las credenciales adecuadas. Si aún no ha configurado sus credenciales, ejecute
aws configure
.Tenga familiaridad básica con los conceptos del AWS Lambda SDK de Amazon Chime.
Configure permisos suficientes para crear y administrar los recursos del SDK y Lambda de Amazon Chime en su cuenta de AWS.
Para el enrutamiento basado en números de teléfono, debes tener un número de teléfono en tu inventario de números de teléfono del SDK de Amazon Chime.
Para el enrutamiento basado en un conector de voz, debe tener un conector de voz configurado en su cuenta.
Consideraciones sobre costos
El tutorial incluye instrucciones de limpieza para garantizar que no incurras en cargos continuos una vez finalizado el proceso. Para obtener más información, consulte los precios del SDK de Amazon Chime
Empecemos por configurar el enrutamiento de llamadas para el audio PSTN del SDK de Amazon Chime.
Busque y aprovisione números de teléfono
Antes de crear reglas SIP con activadores de números de teléfono, debe tener números de teléfono en su inventario del SDK de Amazon Chime. A continuación, te explicamos cómo buscar los números de teléfono disponibles y proporcionarlos.
ejemplo : busca los números de teléfono 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
Este comando busca los números de teléfono gratuitos disponibles con el prefijo 844 en EE. UU. Puede modificar los parámetros para buscar diferentes tipos de números.
ejemplo : Proporcione un número de teléfono
Cuando encuentres un número de teléfono disponible, puedes aprovisionarlo mediante el siguiente comando:
# Order a phone number aws chime-sdk-voice create-phone-number-order \ --product-type SipMediaApplicationDialIn \ --e164-phone-numbers "
+18445550100
" \ --region us-east-1
+18445550100
Sustitúyalo por un número de teléfono real disponible en los resultados de la búsqueda. Este comando proporcionará el número de teléfono a tu cuenta.
ejemplo : Comprueba el estado del número de teléfono
Después de pedir un número de teléfono, puede comprobar su estado:
# 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
Sustituya el identificador del pedido por el devuelto por el create-phone-number-order
comando.
ejemplo : incluye los números de teléfono de tu inventario
Para ver todos los números de teléfono de tu inventario:
# List all phone numbers aws chime-sdk-voice list-phone-numbers \ --region us-east-1
Para encontrar números de teléfono no asignados que se puedan usar para las reglas SIP:
# List unassigned phone numbers aws chime-sdk-voice list-phone-numbers \ --region us-east-1 \ --query "PhoneNumbers[?Status=='Unassigned'].E164PhoneNumber"
Crear una función Lambda para la gestión de llamadas
Ahora, vamos a crear una función Lambda que gestione las llamadas entrantes. La función recibirá los eventos del servicio de audio PSTN y responderá con instrucciones sobre cómo gestionar la llamada.
ejemplo : Crear un rol de IAM para Lambda
Antes de crear la función Lambda, debe crear un rol de IAM que conceda los permisos necesarios.
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
Estos comandos crean una función de IAM que permite a Lambda asumirla y adjuntar la política de ejecución básica, que proporciona permisos para que Lambda escriba registros. CloudWatch
ejemplo Cree una función de Lambda:
Ahora, cree una función Lambda sencilla que gestione las llamadas entrantes.
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
Esta función Lambda responde a las llamadas entrantes con un mensaje hablado y, a continuación, cuelga.
ejemplo : Añadir el permiso de Lambda para el SDK de Amazon Chime
Conceda permiso al servicio Amazon Chime SDK para invocar su función 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}
Este comando permite que el servicio Amazon Chime SDK Voice Connector invoque la función Lambda.
Cree una aplicación multimedia SIP
Las aplicaciones multimedia SIP conectan la función Lambda al servicio de audio PSTN. En esta sección, creará una aplicación multimedia SIP que utilice la función Lambda.
ejemplo : Cree la aplicación multimedia 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}\"}]"
La aplicación multimedia SIP actúa como un puente entre el servicio de audio PSTN y la función Lambda.
ejemplo : Obtenga el ID de la aplicación multimedia SIP
Tras crear la aplicación multimedia SIP, necesitará recuperar su ID para utilizarla más adelante en el 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}"
Anote el ID de la aplicación multimedia SIP que devuelve este comando, ya que lo necesitará al crear reglas SIP.
Configure el enrutamiento de llamadas con reglas SIP
Las reglas SIP determinan cómo se enrutan las llamadas entrantes a las aplicaciones multimedia SIP. Puede crear reglas basadas en números de teléfono o nombres de host de Voice Connector.
ejemplo : Cree una regla SIP con un activador de números de teléfono
Para enrutar las llamadas en función de un número de teléfono, usa el siguiente comando:
# 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}]"
Este comando crea una regla SIP que enruta las llamadas a su número de teléfono a su aplicación multimedia SIP.
ejemplo : Cree una regla SIP con el activador Request URI hostname
Como alternativa, puede enrutar las llamadas en función del URI de solicitud de una llamada SIP entrante del 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}]"
Sustituya el nombre de host por el nombre de host de salida de su Voice Connector.
Configure la redundancia con múltiples aplicaciones multimedia SIP
Para obtener redundancia y conmutación por error, puede crear varias aplicaciones multimedia SIP en la misma región de AWS y especificar su orden de prioridad.
ejemplo : Crear una función Lambda de respaldo
Primero, cree una función Lambda de respaldo en la misma región.
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
ejemplo : Añada el permiso Lambda para el SDK de Amazon Chime a la función de copia de seguridad
# 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}
ejemplo : Cree una aplicación multimedia SIP de respaldo
# 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)
ejemplo : Obtenga el ID de la regla SIP
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text)
ejemplo : Actualice la regla SIP para incluir ambas aplicaciones con prioridades
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}]"
Este comando actualiza la regla SIP para incluir las aplicaciones multimedia SIP principales y de respaldo con sus prioridades respectivas.
Crea llamadas salientes
También puede crear llamadas salientes que invoquen su función Lambda mediante la 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}
Sustituya el número de teléfono de destino por un número válido. Debes tener los números de teléfono en tu inventario para poder realizar llamadas reales.
Activar Lambda durante una llamada activa
Puede activar la función Lambda durante una llamada activa mediante la UpdateSIPMediaApplicationCall
API.
# 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"}'
El identificador de transacción se proporciona en los datos del evento que se envían a la función Lambda cuando hay una llamada activa.
Eliminar recursos
Cuando termine este tutorial, debe eliminar los recursos que creó para evitar incurrir en cargos adicionales.
ejemplo : Elimine las reglas 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}
ejemplo : Eliminar aplicaciones multimedia 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}
ejemplo : Eliminar funciones Lambda
aws lambda delete-function --function-name ChimeSDKCallHandler aws lambda delete-function --function-name ChimeSDKBackupHandler
ejemplo : Eliminar el rol de 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
ejemplo : Publicar números de teléfono
Si ya no necesitas los números de teléfono, puedes liberarlos:
# 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}
Ten en cuenta que los números de teléfono pasan al estado ReleaseInProgress «» durante 7 días antes de publicarse por completo. Durante este período, puede restaurarlos mediante el restore-phone-number
comando si es necesario.
Paso a la producción
En este tutorial se muestra la funcionalidad básica del enrutamiento de llamadas a funciones de Lambda mediante el audio PSTN del SDK de Amazon Chime. Sin embargo, para los entornos de producción, debe tener en cuenta las siguientes prácticas recomendadas:
Consideraciones de seguridad
Implemente permisos con privilegios mínimos. Cree políticas de IAM personalizadas que concedan únicamente los permisos específicos que necesitan sus funciones de Lambda.
Agregue condiciones de ARN de origen a los permisos de Lambda. Restrinja qué aplicaciones multimedia SIP pueden invocar sus funciones Lambda.
Implemente la validación de entradas. Añada validación a las funciones de Lambda para asegurarse de que solo procesen eventos válidos.
Considere la posibilidad de implementar una VPC. Para mejorar la seguridad, implemente las funciones de Lambda en una VPC con los grupos de seguridad adecuados.
Cifre los datos confidenciales. AWS Key Management Service Úselo para cifrar cualquier dato confidencial que utilice su aplicación.
Consideraciones sobre la arquitectura
Implemente la supervisión y el registro. Configure CloudWatch alarmas y registros para supervisar el estado y el rendimiento de su aplicación.
Añada la gestión de errores. Implemente una gestión integral de errores en sus funciones de Lambda.
Tenga en cuenta los límites de escalado. Tenga en cuenta las cuotas de servicio y solicite aumentos si es necesario para un gran volumen de llamadas.
Implemente la infraestructura como código. AWS CloudFormation Úselo AWS CDK para implementar su infraestructura.
Configure CI/CD canalizaciones. Implemente la integración y el despliegue continuos de sus funciones de Lambda.
Para obtener más información sobre la creación de aplicaciones listas para la producción, consulte:
Pasos a seguir a continuación
Ahora que ha aprendido a enrutar llamadas a funciones de Lambda mediante el audio PSTN del SDK de Amazon Chime, puede explorar funciones más avanzadas:
Intégrelo con Amazon Lex para gestionar la interacción del diálogo en un escenario de agente inteligente. Para obtener más información, consulte Creación de un bot de Amazon Lex V2 para la mensajería de Amazon Chime SDK.
Configure el análisis de voz para obtener información a partir de sus llamadas. Para obtener más información, consulte Generación de información a partir de las llamadas mediante el análisis de llamadas para el Amazon Chime SDK.
Explore las acciones avanzadas de control de llamadas para crear flujos de llamadas sofisticados. Para obtener más información, consulte Uso de las configuraciones de análisis de llamadas para Amazon Chime SDK.