Weiterleiten von Aufrufen an AWS Lambda Funktionen für Amazon Chime SDK PSTN-Audio ()AWS CLI - Amazon Chime SDK

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Weiterleiten von Aufrufen an AWS Lambda Funktionen für Amazon Chime SDK PSTN-Audio ()AWS CLI

Dieses Tutorial führt Sie durch den Prozess der Einrichtung der Anrufweiterleitung zu Lambda-Funktionen mithilfe des Amazon Chime SDK PSTN-Audiodienstes. Sie erfahren, wie Sie Lambda-Funktionen erstellen, SIP-Medienanwendungen einrichten und SIP-Regeln für die Bearbeitung eingehender Anrufe konfigurieren.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass Sie Folgendes tun:

  • Installieren Sie das AWS CLI. Weitere Informationen finden Sie unter Installation oder Aktualisierung auf die neueste Version von AWS CLI im AWS CLI Benutzerhandbuch.

  • Konfigurieren Sie Ihre AWS CLI mit den entsprechenden Anmeldeinformationen. Führen Sie aws configure es aus, wenn Sie Ihre Anmeldeinformationen noch nicht eingerichtet haben.

  • Vertraut mit den AWS Lambda Konzepten des Amazon Chime SDK sein.

  • Richten Sie ausreichende Berechtigungen ein, um Amazon Chime SDK- und Lambda-Ressourcen in Ihrem AWS-Konto zu erstellen und zu verwalten.

  • Für das telefonnummernbasierte Routing benötigen Sie eine Telefonnummer in Ihrem Amazon Chime SDK-Telefonnummernbestand.

  • Für das auf Voice Connector basierende Routing muss in Ihrem Konto ein Voice Connector konfiguriert sein.

Kostenüberlegungen

Das Tutorial enthält Anweisungen zur Bereinigung, um sicherzustellen, dass Ihnen nach Abschluss keine laufenden Kosten entstehen. Weitere Informationen finden Sie unter Amazon Chime SDK — Preise.

Lassen Sie uns mit der Einrichtung der Anrufweiterleitung für Amazon Chime SDK PSTN-Audio beginnen.

Suchen Sie nach Telefonnummern und geben Sie diese an

Bevor Sie SIP-Regeln mit Rufnummernauslösern erstellen können, müssen Sie Telefonnummern in Ihrem Amazon Chime SDK-Inventar haben. So suchen Sie nach verfügbaren Telefonnummern und geben diese an.

Beispiel : Suche nach verfügbaren Telefonnummern
# 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

Dieser Befehl sucht nach verfügbaren gebührenfreien Telefonnummern mit dem Präfix 844 in den USA. Sie können die Parameter ändern, um nach verschiedenen Arten von Nummern zu suchen.

Beispiel : Geben Sie eine Telefonnummer an

Nachdem Sie eine verfügbare Telefonnummer gefunden haben, können Sie sie mit dem folgenden Befehl bereitstellen:

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

+18445550100Ersetzen Sie sie durch eine tatsächlich verfügbare Telefonnummer aus Ihren Suchergebnissen. Mit diesem Befehl wird die Telefonnummer für Ihr Konto bereitgestellt.

Beispiel : Überprüfen Sie den Status der Telefonnummer

Nachdem Sie eine Telefonnummer bestellt haben, können Sie deren Status überprüfen:

# 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

Ersetzen Sie die Bestell-ID durch die vom create-phone-number-order Befehl zurückgegebene.

Beispiel : Listet die Telefonnummern in Ihrem Inventar auf

Um alle Telefonnummern in deinem Inventar zu sehen:

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

So finden Sie nicht zugewiesene Telefonnummern, die für SIP-Regeln verwendet werden können:

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

Erstellen Sie eine Lambda-Funktion für die Anrufbehandlung

Lassen Sie uns nun eine Lambda-Funktion erstellen, die eingehende Anrufe verarbeitet. Die Funktion empfängt Ereignisse vom PSTN-Audiodienst und antwortet mit Anweisungen zur Bearbeitung des Anrufs.

Beispiel : Erstellen Sie eine IAM-Rolle für Lambda

Bevor Sie die Lambda-Funktion erstellen, müssen Sie eine IAM-Rolle erstellen, die die erforderlichen Berechtigungen gewährt.

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

Diese Befehle erstellen eine IAM-Rolle, die es Lambda ermöglicht, sie zu übernehmen und die grundlegende Ausführungsrichtlinie anzuhängen, die Lambda Berechtigungen zum Schreiben von Protokollen gewährt. CloudWatch

Beispiel Erstellen einer Lambda-Funktion:

Erstellen Sie nun eine einfache Lambda-Funktion, die eingehende Anrufe verarbeitet.

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

Diese Lambda-Funktion reagiert auf eingehende Anrufe mit einer gesprochenen Nachricht und legt dann auf.

Beispiel : Lambda-Berechtigung für Amazon Chime SDK hinzufügen

Erteilen Sie dem Amazon Chime SDK-Service die Erlaubnis, Ihre Lambda-Funktion aufzurufen.

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

Mit diesem Befehl kann der Amazon Chime SDK Voice Connector-Service Ihre Lambda-Funktion aufrufen.

Erstellen Sie eine SIP-Medienanwendung

SIP-Medienanwendungen verbinden Ihre Lambda-Funktion mit dem PSTN-Audiodienst. In diesem Abschnitt erstellen Sie eine SIP-Medienanwendung, die Ihre Lambda-Funktion verwendet.

Beispiel : Erstellen Sie die SIP-Medienanwendung
# 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}\"}]"

Die SIP-Medienanwendung fungiert als Brücke zwischen dem PSTN-Audiodienst und Ihrer Lambda-Funktion.

Beispiel : Rufen Sie die SIP-Medienanwendungs-ID ab

Nachdem Sie die SIP-Medienanwendung erstellt haben, müssen Sie ihre ID abrufen, um sie später im Tutorial zu verwenden.

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

Notieren Sie sich die von diesem Befehl zurückgegebene SIP-Medienanwendungs-ID, da Sie sie bei der Erstellung von SIP-Regeln benötigen.

Richten Sie die Anrufweiterleitung mit SIP-Regeln ein

SIP-Regeln bestimmen, wie eingehende Anrufe an Ihre SIP-Medienanwendungen weitergeleitet werden. Sie können Regeln auf der Grundlage von Telefonnummern oder Voice Connector-Hostnamen erstellen.

Beispiel : Erstellen Sie eine SIP-Regel mit Rufnummernauslöser

Verwenden Sie den folgenden Befehl, um Anrufe basierend auf einer Telefonnummer weiterzuleiten:

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

Mit diesem Befehl wird eine SIP-Regel erstellt, die Anrufe an Ihre Telefonnummer an Ihre SIP-Medienanwendung weiterleitet.

Beispiel : Erstellen Sie eine SIP-Regel mit dem Trigger für den Hostnamen der Anfrage

Alternativ können Sie Anrufe auf der Grundlage der Anforderungs-URI eines eingehenden Voice Connector-SIP-Anrufs weiterleiten:

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

Ersetzen Sie den Hostnamen durch den ausgehenden Hostnamen Ihres Voice Connectors.

Richten Sie Redundanz mit mehreren SIP-Medienanwendungen ein

Für Redundanz und Failover können Sie mehrere SIP-Medienanwendungen in derselben AWS-Region erstellen und deren Prioritätsreihenfolge angeben.

Beispiel : Erstellen Sie eine Backup-Lambda-Funktion

Erstellen Sie zunächst eine Backup-Lambda-Funktion in derselben Region.

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
Beispiel : Fügen Sie der Backup-Funktion eine Lambda-Berechtigung für Amazon Chime SDK hinzu
# 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}
Beispiel : Erstellen Sie eine Backup-SIP-Medienanwendung
# 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)
Beispiel : Holen Sie sich die SIP-Regel-ID
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text)
Beispiel : Aktualisieren Sie die SIP-Regel, um beide Anwendungen mit Prioritäten einzubeziehen
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}]"

Mit diesem Befehl wird die SIP-Regel aktualisiert, sodass sie sowohl die primären als auch die Backup-SIP-Medienanwendungen mit ihren jeweiligen Prioritäten umfasst.

Ausgehende Anrufe erstellen

Sie können mithilfe der API auch ausgehende Aufrufe erstellen, die Ihre Lambda-Funktion aufrufen. 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}

Ersetzen Sie die Zieltelefonnummer durch eine gültige Nummer. Sie müssen die Telefonnummern in Ihrem Inventar haben, um echte Anrufe tätigen zu können.

Lambda während eines aktiven Anrufs auslösen

Sie können Ihre Lambda-Funktion während eines aktiven Aufrufs mithilfe der UpdateSIPMediaApplicationCall API auslösen.

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

Die Transaktions-ID wird in den Ereignisdaten bereitgestellt, die an Ihre Lambda-Funktion gesendet werden, wenn ein Aufruf aktiv ist.

Bereinigen von -Ressourcen

Wenn Sie mit diesem Tutorial fertig sind, sollten Sie die von Ihnen erstellten Ressourcen löschen, um zusätzliche Gebühren zu vermeiden.

Beispiel : SIP-Regeln löschen
# 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}
Beispiel : Löschen Sie SIP-Medienanwendungen
# 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}
Beispiel : Lambda-Funktionen löschen
aws lambda delete-function --function-name ChimeSDKCallHandler aws lambda delete-function --function-name ChimeSDKBackupHandler
Beispiel : IAM-Rolle löschen
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
Beispiel : Telefonnummern veröffentlichen

Wenn Sie die Telefonnummern nicht mehr benötigen, können Sie sie freigeben:

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

Beachten Sie, dass Telefonnummern 7 Tage lang den Status ReleaseInProgress "" annehmen, bevor sie vollständig freigegeben werden. Während dieser Zeit können Sie sie bei Bedarf mit dem restore-phone-number Befehl wiederherstellen.

Gehe zur Produktion

Dieses Tutorial zeigt die grundlegenden Funktionen der Weiterleitung von Aufrufen an Lambda-Funktionen mithilfe von Amazon Chime SDK PSTN-Audio. Für Produktionsumgebungen sollten Sie jedoch die folgenden bewährten Methoden berücksichtigen:

Sicherheitsüberlegungen

  • Implementieren Sie Berechtigungen mit den geringsten Rechten. Erstellen Sie benutzerdefinierte IAM-Richtlinien, die nur die spezifischen Berechtigungen gewähren, die für Ihre Lambda-Funktionen benötigt werden.

  • Fügen Sie den Lambda-Berechtigungen Quell-ARN-Bedingungen hinzu. Schränken Sie ein, welche SIP-Medienanwendungen Ihre Lambda-Funktionen aufrufen können.

  • Implementieren Sie die Eingabevalidierung. Fügen Sie Ihren Lambda-Funktionen eine Validierung hinzu, um sicherzustellen, dass sie nur gültige Ereignisse verarbeiten.

  • Ziehen Sie die VPC-Bereitstellung in Betracht. Um die Sicherheit zu erhöhen, stellen Sie Ihre Lambda-Funktionen in einer VPC mit entsprechenden Sicherheitsgruppen bereit.

  • Verschlüsseln Sie vertrauliche Daten. Verwenden Sie diese AWS Key Management Service Option, um alle sensiblen Daten zu verschlüsseln, die von Ihrer Anwendung verwendet werden.

Überlegungen zur Architektur

  • Implementieren Sie Überwachung und Protokollierung. Richten Sie CloudWatch Alarme und Protokolle ein, um den Zustand und die Leistung Ihrer Anwendung zu überwachen.

  • Fügen Sie eine Fehlerbehandlung hinzu. Implementieren Sie eine umfassende Fehlerbehandlung in Ihren Lambda-Funktionen.

  • Berücksichtigen Sie Skalierungsgrenzen. Beachten Sie die Servicekontingenten und die Erhöhung der Anfragen, falls dies für ein hohes Anrufvolumen erforderlich ist.

  • Implementieren Sie die Infrastruktur als Code. Verwenden Sie AWS CloudFormation oder AWS CDK , um Ihre Infrastruktur bereitzustellen.

  • Richten Sie CI/CD Pipelines ein. Implementieren Sie eine kontinuierliche Integration und Bereitstellung für Ihre Lambda-Funktionen.

Weitere Informationen zur Entwicklung produktionsreifer Anwendungen finden Sie unter:

Nächste Schritte

Nachdem Sie nun gelernt haben, wie Sie mithilfe von Amazon Chime SDK PSTN-Audio Aufrufe an Lambda-Funktionen weiterleiten, können Sie sich mit erweiterten Funktionen vertraut machen: