

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
<a name="route-calls-events-cli"></a>

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
<a name="route-calls-events-cli-prerequisites"></a>

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](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 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
<a name="route-calls-events-cli-cost"></a>

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](https://aws.amazon.com/chime/chime-sdk/pricing/).

Empecemos por configurar el enrutamiento de llamadas para el audio PSTN del SDK de Amazon Chime.

## Busque y aprovisione números de teléfono
<a name="route-calls-events-cli-search-provision"></a>

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.

**Example : 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.

**Example : 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.

**Example : 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.

**Example : 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
<a name="route-calls-events-cli-create-function"></a>

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.

**Example : 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

**Example 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.

**Example : 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
<a name="route-calls-events-cli-create-sip-app"></a>

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.

**Example : 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.

**Example : 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
<a name="route-calls-events-cli-call-routing-sip-rules"></a>

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.

**Example : 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.

**Example : 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
<a name="route-calls-events-cli-sip-redundancy"></a>

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.

**Example : 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
```

**Example : 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}
```

**Example : 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)
```

**Example : Obtenga el ID de la regla SIP**  

```
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \
  --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \
  --output text)
```

**Example : 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
<a name="route-calls-events-cli-create-outbound"></a>

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
<a name="route-calls-events-cli-trigger-lambda"></a>

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
<a name="route-calls-events-cli-cleanup-resources"></a>

Cuando termine este tutorial, debe eliminar los recursos que creó para evitar incurrir en cargos adicionales.

**Example : 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}
```

**Example : 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}
```

**Example : Eliminar funciones Lambda**  

```
aws lambda delete-function --function-name ChimeSDKCallHandler
aws lambda delete-function --function-name ChimeSDKBackupHandler
```

**Example : 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
```

**Example : 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
<a name="route-calls-events-cli-going-to-production"></a>

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
<a name="route-calls-events-cli-security"></a>
+ 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
<a name="route-calls-events-cli-architecture"></a>
+ 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. 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:
+ [AWS Marco de buena arquitectura](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html) 
+ [Prácticas recomendadas para seguridad, identidad y conformidad](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [Aplicaciones sin servidor](https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/welcome.html) 

## Siguientes pasos
<a name="route-calls-events-cli-next-steps"></a>

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](create-lex-bot.md).
+ 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](call-analytics.md).
+ 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](using-call-analytics-configurations.md).