

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

# Amazon Chime SDK PSTN オーディオサービスの AWS Lambda 関数を呼び出すテレフォニーイベントについて説明します。
<a name="invoking-Lambda"></a>

Audio Service は、さまざまなイベントに応じて AWS Lambda 関数を呼び出します。各呼び出しは、呼び出しイベントタイプを指定し、該当する場合は、参加者を含む呼び出しの詳細を提供します。以下のトピックでは、 AWS Lambda 関数を呼び出す Audio Service イベントについて説明します。

# Amazon Chime SDK PSTN オーディオサービスを使用するために発信通話を行う
<a name="use-create-call-api"></a>

発信通話を行うには、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html) API を使用します。API は、指定された `SIP media application ID` のエンドポイントを呼び出します。顧客は、エンドポイントから異なるシグナリングと [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html) アクションを提供することで、発信のフローを制御できます。

レスポンスが成功した場合、API は 202 HTTP ステータスコードと transactionId を返します。これは、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) API で使用して、進行中の発信を更新できます。

次の図は、アウトバウンドコールの AWS Lambda 関数エンドポイントに対して行われた呼び出しを示しています。

![\[AWS Lambda エンドポイントに対して行われた呼び出しのプログラミングフローを示す図。\]](http://docs.aws.amazon.com/ja_jp/chime-sdk/latest/dg/images/sip-api-1.png)


SIP メディアアプリケーション用に設定されたエンドポイントは、発信通話のさまざまなステータスに対して呼び出されます。顧客が通話を開始すると、Amazon Chime SDK は、`NEW_OUTBOUND_CALL` 呼び出しイベントタイプでエンドポイントを呼び出します。

この例は、`NEW_OUTBOUND_CALL` の典型的な呼び出しイベントを示しています。

```
{
    "SchemaVersion": "1.0",
        "Sequence": 1,
        "InvocationEventType": "NEW_OUTBOUND_CALL",
        "CallDetails": {
            "TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234"
                }
            ]
    }
}
```

イベント関連の AWS Lambda 呼び出しに対する応答は無視されます。

受信者から `RINGING` 通知を受け取ると、Amazon Chime SDK は設定されたエンドポイントを再度呼び出します。

この例は、`RINGING` の典型的な呼び出しイベントを示しています。

```
{
    "SchemaVersion": "1.0",
        "Sequence": 1,
        "InvocationEventType": "RINGING",
        "CallDetails": {
            "TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234"
                }
           ]
    }
}
```

イベント関連の AWS Lambda 呼び出しに対する応答は無視されます。

受信者が発信に応答しない場合、またはエラーによって発信が失敗した場合、Chime は発信を切断し、`Hangup` イベントタイプでエンドポイントを呼び出します。`Hangup` イベントタイプの詳細については、「[Amazon Chime SDK PSTN オーディオサービスを使用した発信の終了](case-5.md)」を参照してください。

発信に応答した場合、Chime は `CALL_ANSWERED` アクションでエンドポイントを呼び出します。この例は、典型的な呼び出しイベントを示しています。

```
{
  "SchemaVersion": "1.0",
    "Sequence": 1,
    "InvocationEventType": "CALL_ANSWERED",
    "CallDetails": {
        ""TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

この時点で、アクションリストを使用して呼び出しに応答してアクションを返すことができます。アクションを実行しない場合は、空のリストで応答します。 AWS Lambda 呼び出しごとに最大 10 個のアクションで応答でき、呼び出しごとに 1,000 回 Lambda 関数を呼び出すことができます。一連のアクションによる応答の詳細については、「[Amazon Chime SDK PSTN オーディオサービスを使用したアクションリストによる呼び出しへの応答](invoke-on-call-leg.md)」を参照してください。

# Amazon Chime SDK PSTN オーディオサービスを使用した受信通話の受け取り
<a name="case-1"></a>

`NEW_INCOMING_CALL` イベントが発生すると、Audio Service は、`HANGUP` イベントが発生するまで、一意の `TransactionID` と `CallID` を作成します。

`NEW_INCOMING_CALL` イベントにはいくつかの方法で応答できます。例: 
+ `PlayAudio` または `RecordAudio` アクションを送信し、自動的に発信に応答します。
+ `Pause` アクションを送信します。
+ `Hangup` アクションを送信します。この場合、発信は応答されず、顧客への課金は発生しません。
+ `CallAndBridge` アクションを送信し、別のユーザーを発信に追加します。
+ 何もしなければ、30 秒後に発信がタイムアウトします。

新しい受信通話を受信すると、SIP メディアアプリケーションはこのペイロードで AWS Lambda 関数を呼び出します。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 2,
    "InvocationEventType": "NEW_INBOUND_CALL"
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

# Amazon Chime SDK PSTN オーディオサービスのテレフォニーイベントに応答してアクションを指定する
<a name="use-case-2"></a>

Audio Service では、SIP メディアアプリケーションは AWS Lambda 関数を呼び出します。これにより、Lambda 関数は、アクションと呼ばれる命令のリストを返すことができます。アクションとは、数字の送受信や会議への参加など、電話のレッグで実行する項目のことです。PSTN オーディオサービスによって呼び出されるアクションの詳細については、「[Amazon Chime SDK PSTN オーディオサービスのテレフォニーイベントについて](pstn-invocations.md)」を参照してください。

SIP メディアアプリケーションがアクションのリストを正常に実行すると、アプリケーションは呼び出しイベントタイプが の AWS Lambda 関数を呼び出します`ACTION_SUCCESSFUL`。いずれかのアクションが完了しない場合、SIP メディアアプリケーションは `ACTION_FAILED` イベントで AWS Lambda 関数を呼び出します。

リストのすべてのアクションが成功した場合、SIP メディアアプリケーションは `ACTION_SUCCESSFUL` を返すのみです。リスト内のいずれかのアクションが失敗した場合、SIP メディアアプリケーションは `ACTION_FAILED` イベントで AWS Lambda 関数を呼び出し、失敗したアクションの後にリスト内の残りのアクションをクリアします。次に、SIP メディアアプリケーションは、 AWS Lambda 関数によって返される次のアクションを実行します。`ActionData` キーを使用して、関数を呼び出した発信を識別します。

次のイベントは、`PlayAudioAndGetDigits` アクション後の `ACTION_SUCCESSFUL` 呼び出しイベントタイプのサンプルペイロードを示しています。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type": "PlayAudioAndGetDigits",
        "Parameters" : {
            "CallId": "call-id-1",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "failure-audio-file.wav"
            },
            "FailureAudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "failure-audio-file.wav"
            },
            "MinNumberOfDigits": 3,
            "MaxNumberOfDigits": 5,
            "TerminatorDigits": ["#"],
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "Repeat": 3,
            "RepeatDurationInMilliseconds": 10000
        },
        "ReceivedDigits": "123"
    }
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
                }
            ]
        }
    }
}
```

リスト内のアクションが正常に完了しなかった場合、SIP メディアアプリケーションは AWS Lambda 関数を呼び出して失敗を通知し、その呼び出しで実行する新しいアクションセットを取得します。次のイベントは、`PlayAudio` アクション実行後の `ACTION_FAILED` 呼び出しイベントタイプのサンプルペイロードを示しています。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "ACTION_FAILED",
    "ActionData": {
        "Type": "PlayAudio",
        "Parameters" : {
            "CallId": "call-id-1",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "audio-file.wav"            
            }
        },
        "ErrorType": "InvalidAudioSource",
        "ErrorMessage": "Audio Source parameter value is invalid."
    }
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
}
```

# Amazon Chime SDK PSTN オーディオサービスでの発信者の入力の受信
<a name="case-4"></a>

`ReceiveDigits` アクションを使用してインバウンド DTMF ディジットを収集し、正規表現と照合します。SIP メディアアプリケーションは、正規表現に一致する数字を受信すると、 `ACTION_SUCCESSFUL` イベントを含む AWS Lambda 関数を呼び出します。収集されたディジットは、`ActionData` オブジェクトの `ReceivedDigits` 値に表示されます。

例えば、次のようになります。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "ReceivedDigits": "",
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-1",
            "InputDigitsRegex": "^\d{2}#$",
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "FlushDigitsDurationInMilliseconds": 10000
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

発信者が正規表現パターンに一致する数字を入力すると、SIP メディアアプリケーションは次のタイプのペイロードを返す AWS Lambda 関数を呼び出します。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 5,
    "InvocationEventType": "DIGITS_RECEIVED",
    "ActionData": {
        "ReceivedDigits": "11#",
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-1",
            "InputDigitsRegex": "^\d{2}#$",
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "FlushDigitsDurationInMilliseconds": 10000
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

GitHub の実例を参照してください: [https://github.com/aws-samples/amazon-chime-sma-on-demand-recording](https://github.com/aws-samples/amazon-chime-sma-on-demand-recording)

# Amazon Chime SDK PTSN オーディオの進行中の通話の更新
<a name="update-sip-call"></a>

PSTN オーディオサービスの一部として、SIP メディアアプリケーションでは、着信通話や DTMF ディジットなどの通話イベントに基づいてユーザー定義の Lambda 関数を呼び出すことで、通話で実行されるアクションを設定できます。[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) API を使用すると、通話がアクティブであればいつでも Lambda 関数をトリガーして、この呼び出しによって返された新しいアクションで現在のアクションを置き換えることができます。

**ワークフロー**  
[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) API は、会議への参加者の追加、ユーザーのミュート/ミュート解除、接続解除など、さまざまな場面で使用できます。以下のユースケースでは、一般的なワークフローについて説明しています。

Amazon Chime SDK が会議をセットアップしている間、ユーザーは電話をかけたり音楽を聴いたりしています。セットアップが完了すると、Amazon Chime SDK は音声を停止し、発信者を会議に参加させます。次に、会議を管理する別のシステム、`MyMeetingService` を使用すると仮定します。すべての着信通話を保留にする必要があります。Chime は着信通話について MyMeetingService に通知し、MyMeetingService は通話ごとに出席者を作成します。MyMeetingService は、会議を開始する準備ができたら、SIP メディアアプリケーションに通知し、会議に参加するためのトークンを提供します。

このケースを処理するには、Lambda 関数は次のロジックを実装する必要があります。
+ 新しい着信通話が届くと、Lambda が `NEW_INBOUND_CALL` イベントで呼び出されます。Lambda は `MyMeetingService` を呼び出し、現在の通話を識別する `transactionId` を渡して、`PlayAudio` アクションを返します。
+ `MyMeetingService` は、発信者を会議に追加する準備が整うと、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) API を呼び出し、引数の一部として通話の `transactionId` と `JoinToken` を渡します。この API コールにより、今度は `CALL_UPDATE_REQUESTED` イベントで Lambda 関数が再度トリガーされます。MyMeetingService は、イベントの一部として `JoinToken` を Lambda 関数に渡します。このトークンを使用して、`JoinChimeMeeting` アクションを SIP メディアアプリケーションに返します。SIP メディアアプリケーションは `PlayAudio` アクションを中断し、発信者を会議に接続します。

![\[UpdateSipMediaApplicationCall API でのデータの流れを示す図。\]](http://docs.aws.amazon.com/ja_jp/chime-sdk/latest/dg/images/update-sip-call-flow3.png)


**注記**  
[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) API は HTTP 202 (Accepted) を返します。SIP メディアアプリケーションは、通話が進行中で更新可能であることを確認し、Lambda 関数を呼び出そうとします。呼び出しは非同期で実行されるため、API からの応答が成功しても、Lambda 関数が開始または完了したことは保証されません。

以下にリクエストの構文例を示します。

```
{
    "SipMediaApplicationId": "string",
    "TransactionId": "string",
    "Arguments": {
        "string": "string"
    } 
}
```

**リクエストパラメータ**
+ `SipMediaApplicationId` - 通話を処理する SIP メディアアプリケーションの ID。
+ `TransactionId` – 通話のトランザクション ID。受信通話の場合、`TransactionId` は、最初の呼び出しで Lambda 関数に渡された `NEW_INCOMING_CALL` イベントから取得できます。アウトバウンドコールの場合、`TransactionId` は [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html) のレスポンスで返されます。
+ **Arguments** - `CallUpdateRequest` アクションデータの一部として Lambda 関数で使用できるカスタム引数。キーと値のペアを 0～20 個含めることができます。

一般的なリクエストの例を次に示します。

```
aws chime update-sip-media-application-call --sip-media-application-id feb37a7e-2b66-49fb-b2dd-30f4780dc36d --transaction-id 1322a4e7-c106-4e70-aaaf-a8fa4c77c0cb --arguments '{"JoinToken": "abc123"}'
```

**レスポンスの構文**

```
{
  "SipMediaApplicationCall": {
  "TransactionId": "string"
  }
}
```

**レスポンス要素**
+ **TransactionId** - 通話トランザクションの ID。リクエストと同じ ID です。

次の例は、`CALL_UPDATE_REQUESTED` 呼び出しイベントを示しています。

```
{
  "SchemaVersion": "1.0",
  "Sequence": 2,
  "InvocationEventType": "CALL_UPDATE_REQUESTED",
  "ActionData": {
    "Type": "CallUpdateRequest",
    "Parameters": {
      "Arguments": {
        "string": "string"
      }
    }
  },
  "CallDetails": {
    ...
  }
}
```

**イベントの要素**
+ **SchemaVersion** - JSON スキーマのバージョン (1.0)
+ **Sequence** - 通話でのイベントのシーケンス番号
+ **InvocationEventType** - Lambda 呼び出しイベントのタイプ。ここでは `CALL_UPDATE_REQUESTED`
+ **ActionData** - `CallUpdateRequest` アクションに関連付けられたデータ
  + **Type** - アクションのタイプ。ここでは `CallUpdateRequest`
  + **Parameters** - アクションのパラメータ
    + **Arguments** - `UpdateSipMediaApplicationCall` API リクエストの一部として渡される引数
+ **CallDetails** - 現在の通話状態に関する情報

**割り込み可能なアクションと割り込みできないアクションについて**  
既存のアクションの実行中に Lambda 関数が新しいアクションのリストを返すと、進行中のアクションに続くすべてのアクションが新しいアクションに置き換えられます。場合によっては、新しいアクションをすぐに実行するために、Lambda 関数が進行中のアクションを中断することがあります。

次の図は、代表的な例を示しています。ロジックについては、図の下のテキストで説明しています。

![\[進行中の SIP メディアアプリケーション通話中にアクションを置き換える方法を示す図。\]](http://docs.aws.amazon.com/ja_jp/chime-sdk/latest/dg/images/update-sip-actions.png)


Action 2 が割り込み可能な場合は、これを停止し、代わりに新しい Action 1 を実行します。

Action 2 が割り込み可能でない場合は、これを完了してから新しい Action 1 を開始します。

いずれの場合も Action 3 は実行されません。

何かによってアクションが中断された場合は、`ACTION_INTERRUPTED` イベントによって Lambda 関数が呼び出されます。このイベントは、情報提供のみを目的として使用されます。SIP メディアアプリケーションは、この呼び出しによって返されるすべてのアクションを無視します。

割り込み可能なアクションのタイプ:
+ `PlayAudio`
+ `RecordAudio`
+ `Pause`

**サンプル Lambda 関数**  
以下の例は、音声ファイルを再生し、参加トークンを渡して、通話を更新する一般的な Lambda 関数を示しています。

```
const MMS = require('my-meeting-service');
const myMeetingServiceClient = new MMS.Client();

exports.handler = async (event) => {
    console.log('Request: ' + JSON.stringify(event));
    
    const playAudio = () => {
      return {
        Type: 'PlayAudio',
        Parameters: {
          ParticipantTag: 'LEG-A',
          AudioSource: {
            Type: 'S3',
            BucketName: 'chime-meetings-audio-files-bucket-name',
            Key: 'welcome.wav'
          }
        }
      }
    }
    
    const joinChimeMeeting = (joinToken) => {
      return {
        Type: 'JoinChimeMeeting',
        Parameters: {
          JoinToken: joinToken
        }
      }
    }
    
    const response = (...actions) => {
      const r = {
        SchemaVersion: '1.0',
        Actions: actions
      };
      console.log('Response: ' + JSON.stringify(r));
      return r;
    };
    
    switch (event.InvocationEventType) {
      case 'NEW_INBOUND_CALL': 
        myMeetingServiceClient.addPendingCall(event.CallDetails.TransactionId);         
        return response(playAudio());      
      case 'CALL_UPDATE_REQUESTED':
        const joinToken = event.ActionData.Parameters.Arguments['JoinToken']
        return response(joinChimeMeeting(joinToken));
      default:
        return response();
    }
}
```

# Amazon Chime SDK PSTN オーディオサービスを使用した発信の終了
<a name="case-5"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html) API を使用して発信通話を終了できます。API は、指定された **SIP メディアアプリケーション ID** のエンドポイントを呼び出します。SIP メディアアプリケーションにアクションを返すことで、発信のフローを制御できます。

レスポンスが成功した場合、API は 202 HTTP ステータスコードと `transactionId` を返します。これは、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html) API で使用して、進行中の発信を更新できます。

次の図は、アウトバウンドコールの AWS Lambda 関数エンドポイントに対して行われた呼び出しを示しています。

![\[CreateSipMediaApplicationCall API を呼び出したときのデータのフロー。API は、発信通話のステータスが変更されると、別のエンドポイントを呼び出します。\]](http://docs.aws.amazon.com/ja_jp/chime-sdk/latest/dg/images/sip-api-1.png)


SIP メディアアプリケーション用に設定されたエンドポイントは、発信通話のさまざまなステータスに対して呼び出されます。顧客が通話を終了すると、Amazon Chime SDK は、`HANGUP` 呼び出しイベントタイプでエンドポイントを呼び出します。

この例は、`HANGUP` の典型的な呼び出しイベントを示しています。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 6,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "Hangup",
        "Parameters": {
            "CallId": "call-id-1",
            "ParticipantTag": "LEG-A"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "Direction": "Inbound",
                 "To": "+12065551212",
                "From": "+15105550101",
                "StartTimeInMilliseconds": "1597009588",
                "Status": "Disconnected"
            }
        ]
    }
}

// if LEG-B receives a hangup in a bridged call, such as a meeting ending
{
    "SchemaVersion": "1.0",
    "Sequence": 6,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-2",
            "ParticipantTag": "LEG-B"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "Leg-A",
                 "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "1597009588",
                "Status": "Connected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "Leg-B",
                "To": "+17035550122",
                "From": "SMA",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "15010595",
                "Status": "Disconnected"
            }
        ]
    }
}
```

# Amazon Chime SDK PSTN オーディオサービスのエンドツーエンドの通話について
<a name="use-cases"></a>

このユースケースでは、PSTN 発信者からの通話の受信、音声メッセージによる発信者への挨拶、発信者からの会議 PIN の取得、音声の再生、および会議への発信者の参加の例を示します。

**呼び出しイベントと アクション**  
Audio Service は、呼び出しイベントを JSON オブジェクトとして AWS Lambda 関数に渡します。オブジェクトには、呼び出しイベントタイプと関連するメタデータが含まれます。また、 AWS Lambda 関数は、SIP メディアアプリケーションのアクションを JSON オブジェクトとして返し、それらのオブジェクトにはアクションタイプと関連するメタデータが含まれます。

次の表に、呼び出しイベントと、呼び出しイベントを受け取ったときに発生する可能性のある `ActionData.Type` の一覧を示します。


|  呼び出しイベント  |  ActionData.Type  | 
| --- | --- | 
|  ACTION\$1SUCCESSFUL  |  CallAndBridge ReceiveDigits PlayAudio PlayAudioAndGetDigits  JoinChimeMeeting ModifyChimeMeetingAttendees RecordMeeting  | 
|  ACTION\$1FAILED  |  CallAndBridge PlayAudio PlayAudioAndGetDigits ModifyChimeMeetingAttendees RecordMeeting  | 
| HANGUP |  HangUp  | 
|  DIGITS\$1RECEIVED  | ReceiveDigits | 

**注記**  
次のユースケースを実装するには、Amazon Chime SDK インベントリ、Amazon リソースネーム (ARN) と共に AWS Lambda 関数を使用する SIP メディアアプリケーションのマネージドオブジェクト、および電話番号をトリガーとして使用する SIP ルールに、1 つ以上の電話番号が必要です。

Amazon Chime SDK がルールで指定された電話番号への呼び出しを受信すると、PSTN オーディオサービスは`NEW_INBOUND_CALL`呼び出しイベントタイプで AWS Lambda 関数を呼び出します。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 1,
    "InvocationEventType": "NEW_INBOUND_CALL",
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

 AWS Lambda 関数をプログラムして、通話の詳細を検証し、後で使用するために保存できます。`NEW_INBOUND_CALL` イベントの場合、 AWS Lambda 関数はウェルカムプロンプトを再生し、会議 PIN を要求する一連のアクションで応答します。

オーディオファイルには、次の要件があります。
+ Amazon Simple Storage Service (S3) バケットから音声ファイルを再生する必要があります。S3 バケットは、SIP メディアアプリケーションと同じ AWS アカウントに属している必要があります。さらに、Amazon Chime SDK Voice Connector サービスプリンシパル (`voiceconnector.chime.amazonaws.com`) に `s3:GetObject` 許可を付与する必要があります。このためには、S3 コンソールまたはコマンドラインインターフェイス (CLI) を使用できます。
+ 50 MB 以下のサイズの PCM WAV ファイルを使用する必要があります。Amazon Chime SDK では、モノラル 8 kHz が推奨されます。
+ 各 WAV ファイルの S3 メタデータには、`{'ContentType': 'audio/wav'}` が含まれている必要があります。

```
{
    "SchemaVersion": "1.0",
    "Actions": [
        {
            "Type" : "PlayAudio",    
            "Parameters" : {
                "CallId": "call-id-1",
                
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "welcome-to-meetings.wav"
                }
            }
        },
        {
            "Type": "PlayAudioAndGetDigits",
            "Parameters" : {
                "ParticipantTag": "LEG-A",
                
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "enter-meeting-pin.wav"
                },
                "FailureAudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "invalid-meeting-pin.wav"
                },
                "MinNumberOfDigits": 3,
                "MaxNumberOfDigits": 5,
                "TerminatorDigits": ["#"],
                "InBetweenDigitsDurationInMilliseconds": 5000,
                "Repeat": 3,
                "RepeatDurationInMilliseconds": 10000
            }
        }
    ]
}
```

SIP メディアアプリケーションは、通話レッグ A でこれらのアクションを実行します。`PlayAudioAndGetDigits`アクションが数字を受信すると、SIP メディアアプリケーションは`ACTION_SUCCESSFUL`イベントタイプで AWS Lambda 関数を呼び出します。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 2,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type": "PlayAudioAndGetDigits",
        "Parameters" : {
            "ParticipantTag": "LEG-A",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "chime-meetings-audio-files-bucket-name",
                "Key": "enter-meeting-pin.wav"
            },
            "FailureAudioSource": {
                "Type": "S3",
                "BucketName": "chime-meetings-audio-files-bucket-name",
                "Key": "invalid-meeting-pin.wav"
            },
            "MinNumberOfDigits": 3,
            "MaxNumberOfDigits": 5,
            "TerminatorDigits": ["#"],
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "Repeat": 3,
            "RepeatDurationInMilliseconds": 10000
        },
        "ReceivedDigits": "12345" // meeting PIN
    },
    "CallDetails": {
        ... // same as in previous event
    }
}
}
```

データに基づいて発信者を識別するように AWS Lambda 関数をプログラムできます`CallDetails`。以前に受信した会議 PIN を検証することもできます。PIN が正しいと想定し、[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html) および [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateAttendee.html) API を使用して Amazon Chime SDK ミーティングを作成し、会議出席者が使用する参加トークンを生成します。 AWS Lambda 関数は、Amazon Chime SDK 会議に参加するアクションで応答します。

```
{
    "SchemaVersion": "1.0",
    "Actions": [
        {
            "Type": "JoinChimeMeeting",
            "Parameters": {
                "JoinToken": "meeting-attendee-join-token"
            }
        }
    ]
}
```

が有効であるとすると、SIP メディアアプリケーション`JoinToken`は Amazon Chime SDK 会議に参加し、 `ACTION_SUCCESSFUL` イベントで AWS Lambda 関数を呼び出します。 には、SIP メディアアプリケーションと Chime Media サービス (`LEG-B`) からのデータ`CallDetails`が含まれます。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type" : "JoinChimeMeeting",
        "Parameters" : {
            "JoinToken": "meeting-attendee-join-token"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id", 
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "LEG-B",
                "To": "SMA",
                "From": "+17035550122",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

この時点で発信または通話レッグでのアクションの実行を停止する場合は、空のアクションセットで応答できます。

```
{
    "SchemaVersion": "1.0"
    "Actions": []
}
```

発信者がハングアップすると、SIP メディアアプリケーションは `HANGUP` イベントで AWS Lambda 関数を呼び出します。

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "Hangup",
        "Parameters": {
            "CallId": "call-id-1",
            "ParticipantTag": "LEG-A"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id", 
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Disconnected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "LEG-B",
                "To": "SMA",
                "From": "+17035550122",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Disconnected"
            }
        ]
    }
}
```

アクションで `Hangup` イベントに応答すると、SIP メディアアプリケーションは、他の `Participants` が `Status` として `Connected` を示した場合、そのアクションを無視します。