[Amazon Chime SDK] PSTN AudioとAWS CLIを使って日本宛ての架電を試してみた

[Amazon Chime SDK] PSTN AudioとAWS CLIを使って日本宛ての架電を試してみた

2026.07.01

こんにちは。
繁松です。

はじめに

Amazon Chime SDKを使って架電をしてみました。

AWSで自動架電を実装する場合、Amazon ConnectのAPIやアウトバウンドコール機能を使うのが一般的ですが、Connectには「通話開始から最初の60秒間は最低料金として課金される」という仕様があります。
そのため、「架電先との疎通確認(相手が出るかどうかのテスト)」や「数秒で終わる自動アナウンス」といった用途では、実際の通話時間に対して課金対象となる時間に大きな乖離が出てしまいます。

Amazon Chime SDKは最低6秒間の通話から課金対象(6秒単位の従量課金)となるため、短い通話を大量に行うような用途では、Chime SDKを利用することで大幅なコスト削減に繋がります。

注意点として、Amazon Chime SDKでは現在日本の電話番号を取得することができません。また、電話リソースを操作するためにはバージニア北部リージョン(us-east-1)などの対応リージョンで各リソースを作成する必要があります。

今回はAWS CLIからAmazon Chime SDKを利用して日本の電話(携帯電話)にテスト架電する手順を検証してみました。
Lambda等と組み合わせることで、低コストな自動架電システムの構築に役立てそうです。

やってみる

1. 音声ファイルを保存するS3バケットの作成

通話相手が電話に出た際に再生する音声ファイルを保存するバケットを用意します。

  1. Amazon S3 コンソールを開き、任意のバケットを作成します(例:my-chime-audio-bucket)。
  2. 用意した音声ファイルをアップロードします。
  • 音声ファイルはサイズが50MB以下のWAVファイルを使用できます。
  1. バケットポリシーを設定します。以下のポリシーを適用してください。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowChimeSDKRead",
            "Effect": "Allow",
            "Principal": {
                "Service": "voiceconnector.chime.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<バケット名>/*"
        }
    ]
}

2. 通話を制御するLambda 関数の作成

電話の「発信」「応答」「切断」などのイベントが発生した際に、Chime SDKの挙動を制御するためのLambda関数を作成します。

  1. AWS Lambda コンソールを開き、関数を新規作成します。(Python)
  2. 以下のサンプルコードを貼り付けデプロイします。
import json

def lambda_handler(event, context):
    print("Received event: " + json.dumps(event))

    invocation_event_type = event['InvocationEventType']
    call_details = event['CallDetails']
    transaction_id = call_details['TransactionId']
    call_id = call_details['Participants'][0]['CallId']

    actions = []

    # 1. 相手が電話に応答した場合
    if invocation_event_type == "CALL_ANSWERED":
        # S3の音声を再生するアクションを返す
        actions.append({
            "Type": "PlayAudio",
            "Parameters": {
                "ParticipantRole": "Callee", # 電話を受けた側(相手)に聞かせる
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "<S3バケット名>",
                    "Key": "<アップロードした音声データ名>"
                }
            }
        })

    # 2. 音声再生が終了した場合
    elif invocation_event_type == "ACTION_SUCCESSFUL":
        action_type = event['ActionData']['Type']
        if action_type == "PlayAudio":
            # 再生が終わったら電話を切る
            actions.append({
                "Type": "Hangup",
                "Parameters": {
                    "SipResponseCode": "200",
                    "ParticipantRole": "Callee"
                }
            })

    # 3. 相手が出なかった、またはエラーの場合
    elif invocation_event_type == "HANGUP" or invocation_event_type == "FAILED":
        print(f"Call finished or failed. TransactionId: {transaction_id}")

    return {
        "SchemaVersion": "1.0",
        "Actions": actions
    }
  1. LbdaのARNをコピーします。

3. Chime SDK SIP メディアアプリケーションの作成

  1. Amazon Chime SDK コンソールを開きます。
  2. 左メニューから [SIP メディアアプリケーション] を選択し、[SIP メディアアプリケーションを作成する] をクリックします。
     2026-07-01 16.12.09
  3. 以下の項目を設定します:
  • 名前:任意のアプリケーション名
  • Lambda関数ARN:ステップ2で作成したLambda関数のARN
  1. 作成が完了すると SIP media application ID(sma-xxxxxxxx...)が発行されるので、コピーします。

4. 発信用番号の取得

  1. Amazon Chime SDK コンソールを開きます。
  2. 左側のメニューから、[電話番号] > [電話番号管理] の順にクリックします。
  3. [注文]タブをクリックし、[電話番号のプロビジョニング]ボタンをクリックします。
  4. 製品タイプとして [SIPメディアアプリケーションダイヤルイン] を選択します。
  5. 番号検索画面で、以下のように条件を指定します:
  • 国: United States of America +1
  • タイプ: ローカル
  • 地域:所在地
  • 州: 任意の場所を選択します(例: Californiaなど)。
     2026-07-01 17.25.57
  1. 検索すると、取得可能な電話番号のリストが表示されます。
  2. リストから好きな番号を1つ選択し、[電話番号注文を作成] をクリックします。
  3. 完了すると、[イベントリ] タブに取得した番号が表示されます。ステータスが割り当て済みになれば完了です。

5. 発信用番号の紐付け

取得した電話番号を紐づけるためのSIPルールを作成します。

  1. 左側のメニューから、[SIPルール] をクリックします。
  2. 画面右上にある [SIP ルールを作成する]をクリックします。
  3. ルールの詳細画面で、以下の情報を入力・設定します:
  • 名前: 任意のルール名を入力します。
  • トリガータイプ: [電話番号へ]を選択します。
  • 電話番号:ステップ4で取得したアメリカの電話番号が表示されるので、選択します。
  1. SIP メディアアプリケーションを指定します:
  • SIP メディアアプリケーション:ステップ3で作成したSIP メディアアプリケーションを選択します。
     2026-07-01 17.32.57
  1. 入力が完了したら、[SIP ルールを作成する] をクリックしてルールを作成します。

動作確認

AWS CLIを使って、作成したリソースに架電指示を送信します。

aws chime-sdk-voice create-sip-media-application-call \
    --from-phone-number "+1XXXXXXXX" \
    --to-phone-number "+8190XXXXXXXX" \
    --sip-media-application-id "sma-xxxxxxxxxxxxxxxx" \
    --region "us-east-1" 
  • --from-phone-number:ステップ4で取得した発信元(US)の電話番号(E.164形式)
  • --to-phone-number:発信先の電話番号(日本の場合は +81 から始める携帯・固定番号)
  • --sip-media-application-id:ステップ3でコピーしたSMA-ID

コマンド実行後、数秒でターゲットの携帯電話に着信がありました!
応答するとS3に格納した音声ファイルが再生され、再生終了と同時に自動で切断されました。日本宛ての電話でも問題なく動作することを確認できました。

料金について

料金は以下のドキュメントで確認可能です。
https://aws.amazon.com/jp/chime/chime-sdk/pricing/

今回の構成で、アメリカから日本(架電先)へ架電した際にかかる料金の内訳は以下の通りです。

1. 電話番号の取得・維持費(月額固定)

バージニア北部リージョンで取得したアメリカのローカル電話番号(DID)を保持するための固定費用です。

  • アメリカのローカル電話番号(DID)の保持費:1.00 USD/月

2. PSTN Audio Application の使用料(通話時間課金)

発信や再生、切断といったイベント処理をSIPメディアアプリケーション側で制御する際にかかる、Chime SDK側のプラットフォーム利用料です。

  • 料金:0.002 USD/分
  • 課金単位:6秒単位(最小課金時間 6秒)
    ※通話時間の端数は6秒単位に切り上げて請求されます(例:15秒の通話は18秒分として計算されます)

3. 日本(架電先)への発信通話料(通話時間課金)

取得したアメリカの電話番号から、日本の電話番号へ発信するためのアウトバウンド通話料金です。

  • 日本への発信:0.0648USD/分
  • 課金単位:6秒単位(最小課金時間 6秒)
    ※相手が応答し、接続が開始された時点から課金が始まります。

4. その他 AWS サービス料金

Chime SDK 以外の周辺リソース料金もわずかに発生します。

  • AWS Lambda:通話イベントに応じた実行リクエスト数および実行時間の料金
  • Amazon S3:音声ファイルを保存するストレージ料金、およびリクエスト料金(極めて少額です)。

さいごに

低コストで柔軟な自動架電の仕組みを構築できるAmazon Chime SDKを試してみました。

AWS公式からAmazon Chime SDKのワークショップも準備されているのでご紹介します。https://github.com/scottrfrancis/amazon-chime-sdk-pstn-audio-workshop

今回はS3の音声ファイルを再生しましたが、Amazon Pollyと連携させて喋らせることも可能です。用途に合わせてぜひカスタマイズしてみてください!

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事