Amazon Chime SDK PSTN オーディオの AWS Lambda 関数への呼び出しのルーティング (AWS CLI) - Amazon Chime SDK

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Chime SDK PSTN オーディオの AWS Lambda 関数への呼び出しのルーティング (AWS CLI)

このチュートリアルでは、Amazon Chime SDK PSTN オーディオサービスを使用して Lambda 関数への通話ルーティングを設定するプロセスについて説明します。Lambda 関数の作成、SIP メディアアプリケーションの設定、着信を処理する SIP ルールの設定方法について説明します。

前提条件

このチュートリアルを開始する前に、以下を実行してください。

  • をインストールします AWS CLI。詳細については、「AWS CLI ユーザーガイド」の「AWS CLI の最新バージョンをインストールまたは更新」を参照してください。

  • 適切な認証情報 AWS CLI を使用して を設定します。認証情報をまだ設定していない場合は、aws configure を実行します。

  • AWS Lambda および Amazon Chime SDK の概念について基本的な知識を持っている。

  • AWS アカウントで Amazon Chime SDK と Lambda リソースを作成および管理するための十分なアクセス許可を設定します。

  • 電話番号ベースのルーティングでは、Amazon Chime SDK の電話番号インベントリに電話番号が必要です。

  • Voice Connector ベースのルーティングでは、アカウントに Voice Connector を設定する必要があります。

コストに関する考慮事項

このチュートリアルには、完了後に継続的な料金が発生しないようにするためのクリーンアップ手順が含まれています。詳細については、「Amazon Chime SDK の料金」を参照してください。

Amazon Chime SDK PSTN オーディオの通話ルーティングの設定を開始しましょう。

電話番号を検索してプロビジョニングする

電話番号トリガーを使用して SIP ルールを作成する前に、Amazon Chime SDK インベントリに電話番号が必要です。ここでは、使用可能な電話番号を検索してプロビジョニングする方法を示します。

例 : 使用可能な電話番号を検索する
# 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

このコマンドは、米国のプレフィックス 844 の通話料無料電話番号を検索します。パラメータを変更して、さまざまなタイプの数値を検索できます。

例 : 電話番号をプロビジョニングする

使用可能な電話番号を見つけたら、次のコマンドを使用してプロビジョニングできます。

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

を検索結果から実際に利用可能な電話番号+18445550100に置き換えます。このコマンドは、電話番号をアカウントにプロビジョニングします。

例 : 電話番号のステータスを確認する

電話番号を注文したら、そのステータスを確認できます。

# 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

注文 ID を create-phone-number-order コマンドから返された ID に置き換えます。

例 : インベントリ内の電話番号を一覧表示する

インベントリ内のすべての電話番号を表示するには:

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

SIP ルールに使用できる未割り当ての電話番号を見つけるには:

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

通話処理用の Lambda 関数を作成する

次に、着信を処理する Lambda 関数を作成します。関数は PSTN オーディオサービスからイベントを受信し、通話の処理方法に関する指示で応答します。

例 : Lambda の IAM ロールを作成する

Lambda 関数を作成する前に、必要なアクセス許可を付与する IAM ロールを作成する必要があります。

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

これらのコマンドは、Lambda が引き受けることを許可する IAM ロールを作成し、基本的な実行ポリシーをアタッチします。このポリシーは、Lambda が CloudWatch にログを書き込むためのアクセス許可を提供します。

例 Lambda 関数を作成します。

次に、着信を処理するシンプルな Lambda 関数を作成します。

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

この Lambda 関数は、着信通話に音声メッセージで応答し、その後ハングアップします。

例 : Amazon Chime SDK に Lambda アクセス許可を追加する

Lambda 関数を呼び出すアクセス許可を Amazon Chime SDK サービスに付与します。

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

このコマンドにより、Amazon Chime SDK Voice Connector サービスは Lambda 関数を呼び出すことができます。

SIP メディアアプリケーションを作成する

SIP メディアアプリケーションは、Lambda 関数を PSTN オーディオサービスに接続します。このセクションでは、Lambda 関数を使用する SIP メディアアプリケーションを作成します。

例 : 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}\"}]"

SIP メディアアプリケーションは、PSTN オーディオサービスと Lambda 関数間のブリッジとして機能します。

例 : SIP メディアアプリケーション ID を取得する

SIP メディアアプリケーションを作成したら、チュートリアルの後半で使用するためにその ID を取得する必要があります。

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

SIP ルールを作成するときに必要になるため、このコマンドによって返される SIP メディアアプリケーション ID を書き留めます。

SIP ルールを使用して通話ルーティングを設定する

SIP ルールは、着信通話を SIP メディアアプリケーションにルーティングする方法を決定します。電話番号または Voice Connector ホスト名に基づいてルールを作成できます。

例 : 電話番号トリガーを使用して SIP ルールを作成する

電話番号に基づいて通話をルーティングするには、次のコマンドを使用します。

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

このコマンドは、電話番号への通話を SIP メディアアプリケーションにルーティングする SIP ルールを作成します。

例 : リクエスト URI ホスト名トリガーを使用して SIP ルールを作成する

または、着信 Voice Connector SIP コールのリクエスト URI に基づいてコールをルーティングすることもできます。

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

ホスト名を Voice Connector のアウトバウンドホスト名に置き換えます。

複数の SIP メディアアプリケーションで冗長性を設定する

冗長性とフェイルオーバーのために、同じ AWS リージョンに複数の SIP メディアアプリケーションを作成し、優先順位を指定できます。

例 : バックアップ Lambda 関数を作成する

まず、同じリージョンにバックアップ Lambda 関数を作成します。

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
例 : Amazon Chime SDK の Lambda アクセス許可をバックアップ関数に追加する
# 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}
例 : バックアップ SIP メディアアプリケーションを作成する
# 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)
例 : SIP ルール ID を取得する
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text)
例 : SIP ルールを更新して、優先順位を持つ両方のアプリケーションを含める
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}]"

このコマンドは、プライマリ SIP メディアアプリケーションとバックアップ SIP メディアアプリケーションの両方をそれぞれの優先順位に含めるように SIP ルールを更新します。

発信通話を作成する

CreateSIPMediaApplicationCall API を使用して Lambda 関数を呼び出すアウトバウンド呼び出しを作成することもできます。

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

送信先の電話番号を有効な番号に置き換えます。実際の通話を行うには、インベントリに電話番号が必要です。

アクティブな通話中に Lambda をトリガーする

UpdateSIPMediaApplicationCall API を使用して、アクティブな呼び出し中に Lambda 関数をトリガーできます。

# 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 は、呼び出しがアクティブなときに Lambda 関数に送信されるイベントデータで提供されます。

リソースをクリーンアップする

このチュートリアルが終了したら、追加料金が発生しないように、作成したリソースを削除する必要があります。

例 : 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}
例 : 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}
例 : Lambda 関数を削除する
aws lambda delete-function --function-name ChimeSDKCallHandler aws lambda delete-function --function-name ChimeSDKBackupHandler
例 : 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
例 : 電話番号を解放する

電話番号が不要になった場合は、リリースできます。

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

電話番号は、完全にリリースされるまで 7 日間、ReleaseInProgress」ステータスになることに注意してください。この期間中は、必要に応じて restore-phone-number コマンドを使用して復元できます。

本番環境への移行

このチュートリアルでは、Amazon Chime SDK PSTN オーディオを使用して Lambda 関数に呼び出しをルーティングする基本的な機能を示します。ただし、本番環境では、次のベストプラクティスを考慮する必要があります。

セキュリティに関する考慮事項

  • 最小特権のアクセス許可を実装します。Lambda 関数に必要な特定のアクセス許可のみを付与するカスタム IAM ポリシーを作成します。

  • Lambda アクセス許可にソース ARN 条件を追加します。Lambda 関数を呼び出すことができる SIP メディアアプリケーションを制限します。

  • 入力検証を実装します。Lambda 関数に検証を追加して、有効なイベントのみが処理されるようにします。

  • VPC のデプロイを検討します。セキュリティを強化するには、適切なセキュリティグループを持つ VPC 内に Lambda 関数をデプロイします。

  • 機密データを暗号化します。を使用して AWS Key Management Service 、アプリケーションで使用される機密データを暗号化します。

アーキテクチャに関する考慮事項

  • モニタリングとログ記録を実装します。CloudWatch アラームとログを設定して、アプリケーションのヘルスとパフォーマンスをモニタリングします。

  • エラー処理を追加します。Lambda 関数に包括的なエラー処理を実装します。

  • スケーリング制限を検討してください。サービスクォータに注意し、通話量が多い場合は引き上げをリクエストします。

  • Infrastructure as Code を実装します。 AWS CloudFormation または AWS CDK を使用してインフラストラクチャをデプロイします。

  • CI/CD パイプラインを設定します。Lambda 関数の継続的な統合とデプロイを実装します。

本番環境に対応したアプリケーションの構築の詳細については、以下を参照してください。

次のステップ

Amazon Chime SDK PSTN オーディオを使用して Lambda 関数に呼び出しをルーティングする方法を学習したので、より高度な機能を調べることができます。