

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

# アプリ内通話、ウェブ通話、ビデオ通話、および画面共有をアプリケーションにネイティブに統合する
<a name="config-com-widget2"></a>

Amazon Connect のアプリ内通話、ウェブ通話、ビデオ通話、画面共有をアプリケーションに統合する手順は、次のとおりです。

1. Amazon Connect の [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) API を使用してコンタクトを作成します。

1. 次に、API コールによって返された詳細を使用して、[iOS](https://github.com/aws/amazon-chime-sdk-ios)、[Android](https://github.com/aws/amazon-chime-sdk-android)、または [JavaScript](https://github.com/aws/amazon-chime-sdk-js) 用の Amazon Chime クライアントライブラリを使って通話に参加します。

追加の参加者の作成については、「[マルチユーザーのアプリ内通話、ウェブ通話、ビデオ通話を有効にする](enable-multiuser-inapp.md)」を参照してください。

サンプルアプリケーションについては、Github リポジトリで [amazon-connect-in-app-calling-examples](https://github.com/amazon-connect/amazon-connect-in-app-calling-examples) を参照してください。

**Topics**
+ [クライアントデバイスでアプリ内通話またはウェブ通話を開始する方法](#diagram-option2)
+ [はじめに](#diagram-option2-gs)
+ [オプションのステップ](#optional-steps)

## クライアントデバイスでアプリ内通話またはウェブ通話を開始する方法
<a name="diagram-option2"></a>

次の図は、クライアントデバイス (モバイルアプリケーションまたはブラウザ) がアプリ内通話またはウェブ通話を開始するためのイベントの順序を示しています。

![\[クライアントデバイスの通話開始方法を示す概念図\]](http://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/images/netra-gs-diagram.png)


1. 顧客はクライアントアプリケーション (ウェブサイトまたはアプリケーション) を使用してアプリ内通話またはウェブ通話を開始します。

1. クライアントアプリケーション (ウェブサイトまたはモバイルアプリケーション) またはウェブサーバーは Amazon Connect [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) API を使用してコンタクトを開始し、 Amazon Connectに属性やコンテキストを渡します。

1. クライアントアプリケーションは、ステップ 2 で [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) から返された詳細を使用して通話に参加します。

1. (オプション) クライアントは [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html) API を使用して、[SendMessage](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_SendMessage.html) API を介して DTMF を送信するために `ConnectionToken` を受け取ります。

1. コンタクトがフローに到達し、フローに基づいてルーティングされ、キューに入れられます。

1. エージェントがコンタクトを受け入れます。

1. (オプション) 顧客とエージェントに対してビデオを有効にしている場合、顧客ととエージェントはビデオを開始できます。

1. (オプション - 図には示されていません) [CreateParticipant](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipant.html) API と [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html) API を使用して、参加者を追加できます。

## はじめに
<a name="diagram-option2-gs"></a>

開始するための高レベルのステップは、次のとおりです。

1. [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) API を使用してコンタクトを作成します。この API は、Amazon Chime SDK クライアントが通話に参加するのに必要な詳細を返します。

1. [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) が返した設定を使用して、Amazon Chime SDK クライアントの `MeetingSessionConfiguration` オブジェクトをインスタンス化します。

1. クライアントの会議セッションを作成するためにステップ 2 で作成した `MeetingSessionConfiguration` を使用して、Amazon Chime SDK クライアントの `DefaultMeetingSession` をインスタンス化します。
   + iOS

     ```
     let logger = ConsoleLogger(name: "logger") 
     let meetingSession = DefaultMeetingSession(
         configuration: meetingSessionConfig, 
         logger: logger
     )
     ```
   + Android

     ```
     val logger = ConsoleLogger()
     val meetingSession = DefaultMeetingSession(
         configuration = meetingSessionConfig,
         logger = logger,
         context = applicationContext
     )
     ```
   + JavaScript

     ```
     const logger = new ConsoleLogger('MeetingLogs', LogLevel.INFO);
     const deviceController = new DefaultDeviceController(logger);
     const configuration = new MeetingSessionConfiguration(
         meetingResponse, 
         attendeeResponse
     );
     const meetingSession = new DefaultMeetingSession(
         configuration, 
         logger, 
         deviceController
     );
     ```

1. WebRTC コンタクトに音声で参加するには、`meetingSession.audioVideo.start()` メソッドを使用します。
   + iOS/Android

     ```
     meetingSession.audioVideo.start()
     ```
   + JavaScript

     ```
     await meetingSession.audioVideo.start();
     ```

1. WebRTC コンタクトの接続を解除するには、`meetingSession.audioVideo.stop()` メソッドを使用します。
   + iOS/Android

     ```
     meetingSession.audioVideo.stop()
     ```
   + JavaScript

     ```
     meetingSession.audioVideo.stop();
     ```

## オプションのステップ
<a name="optional-steps"></a>

追加のオペレーションと包括的な API ドキュメントについては、プラットフォーム固有の API 概要ガイドを参照してください。
+ **iOS**: [API の概要](https://aws.github.io/amazon-chime-sdk-ios/guides/api_overview.html)
+ **Android**: [API の概要](https://aws.github.io/amazon-chime-sdk-android/guides/api_overview.html)
+ **JavaScript**: [API の概要](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/03_API_Overview.md)

### DTMF トーンを送信する
<a name="send-dtmf-tones"></a>

通話に DTMF を送信するには、[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html) と [SendMessage](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_SendMessage.html) のそれぞれ 2 つの Amazon Connect Participant Service API が必要となります。

**注記**  
SendMessage API の `contentType` は、`audio/dtmf` である必要があります。

1. [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html) を呼び出して、`ConnectionToken` を取得します(この API を呼び出すには、`ParticipantToken` が必要です。これは、[StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) で見つかります)。

1. `ConnectionToken` を使用する場合は、[SendMessage](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_SendMessage.html) を呼び出して DTMF 数値を送信します。

### オーディオデバイスを選択する
<a name="select-audio-devices"></a>

音声入出力デバイスを選択するには、Android および iOS 向け Amazon Chime SDK クライアントのメソッド、または iOS 向けの[ネイティブ iOS 機能](https://developer.apple.com/documentation/avkit/avroutepickerview)を使用できます。

**iOS/Android**

```
meetingSession.audioVideo.listAudioDevices()
meetingSession.audioVideo.chooseAudioDevice(mediaDevice)
```

**JavaScript**

```
await meetingSession.audioVideo.listAudioInputDevices();
await meetingSession.audioVideo.listAudioOutputDevices();
await meetingSession.audioVideo.startAudioInput(device);
await meetingSession.audioVideo.chooseAudioOutput(deviceId);
```

### 音声をミュートまたはミュート解除する
<a name="mute-unmute-audio"></a>

ミュートしたりミュートを解除したりするには、`meetingSession.audioVideo.realtimeLocalMute()` と `meetingSession.audioVideo.realtimeLocalUnmute()` を使用します。

**iOS/Android**

```
meetingSession.audioVideo.realtimeLocalMute()
meetingSession.audioVideo.realtimeLocalUnmute()
```

**JavaScript**

```
meetingSession.audioVideo.realtimeMuteLocalAudio();
meetingSession.audioVideo.realtimeUnmuteLocalAudio();
```

### 自撮り動画を開始する
<a name="start-self-video"></a>

自撮り動画を開始するには、`meetingSession.audioVideo.startLocalVideo()` を使用します。特定のデバイスを列挙して選択する方法については、クライアントライブラリ API ガイドを参照してください。

**iOS/Android**

```
meetingSession.audioVideo.startLocalVideo()
```

**JavaScript**

```
meetingSession.audioVideo.startLocalVideoTile();
```

### 自撮り動画を停止する
<a name="stop-self-video"></a>

自撮り動画を停止するには、`meetingSession.audioVideo.stopLocalVideo()` を使用します。

**iOS/Android**

```
meetingSession.audioVideo.stopLocalVideo()
```

**JavaScript**

```
meetingSession.audioVideo.stopLocalVideoTile();
```

### エージェントのビデオを有効にする
<a name="enable-agent-video"></a>

アプリケーション内でエージェントのビデオを受信してロードすることを許可するには、`meetingSession.audioVideo.startRemoteVideo()` を使用します。また、ビデオタイルオブザーバーを実装し、ビデオタイルを表示ビューにバインドする必要があります。

**iOS/Android**

```
meetingSession.audioVideo.startRemoteVideo()
// Implement VideoTileObserver to handle video tiles
meetingSession.audioVideo.addVideoTileObserver(observer)
// In videoTileDidAdd callback:
meetingSession.audioVideo.bindVideoView(videoView, tileId: tileState.tileId)
```

**JavaScript**

```
// Remote video is received automatically when available
// Implement AudioVideoObserver to handle video tiles
meetingSession.audioVideo.addObserver(observer);
// In videoTileDidUpdate callback:
meetingSession.audioVideo.bindVideoElement(tileId, videoElement);
```

ビデオタイルの実装の詳細については、プラットフォーム固有の SDK ガイドを参照してください。

### エージェントのビデオを無効にする
<a name="disable-agent-video"></a>

アプリケーション内でエージェントのビデオの受信やロードを禁止するには、`meetingSession.audioVideo.stopRemoteVideo()` を使用します。

**iOS/Android**

```
meetingSession.audioVideo.stopRemoteVideo()
meetingSession.audioVideo.unbindVideoView(tileId)
```

**JavaScript**

```
meetingSession.audioVideo.unbindVideoElement(tileId);
```

### データメッセージを使用する
<a name="use-data-messages"></a>

エージェント側からエンドユーザーにステータスを送信する必要がある場合は、[データメッセージ](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/03_API_Overview.md#9-send-and-receive-data-messages-optional)を使用できます。例えば、顧客が保留中の場合、顧客のアプリケーションにデータメッセージを送信して、顧客が保留中であることとビデオ/画面共有がまだ有効になっていることを知らせるメッセージを表示したり、ビデオ/画面共有をオフにしたりできます。

**iOS/Android**

```
meetingSession.audioVideo.realtimeSendDataMessage(topic, data, lifetimeMs)
meetingSession.audioVideo.addRealtimeDataMessageObserver(topic, observer)
```

**JavaScript**

```
meetingSession.audioVideo.realtimeSendDataMessage(topic, data, lifetimeMs);
meetingSession.audioVideo.realtimeSubscribeToReceiveDataMessage(topic, callback);
```

### 停止イベントをリッスンする
<a name="listen-for-stop-events"></a>

`audioVideoDidStop` オブザーバーを通じて、コンタクトへの参加が終了したときのイベントをリッスンできます。具体的なステータスコードはプラットフォームによって異なる場合があります。

#### 通話参加者が上限に達した場合
<a name="call-reaches-capacity"></a>

6 人以上のユーザーが通話に参加しようとすると、追加の参加者は次のエラーを受け取り、他の参加者が退出するまで参加できません。
+ **iOS:** `MeetingSessionStatusCode.audioCallAtCapacity` または `MeetingSessionStatusCode.audioAuthenticationRejected`
+ **Android:** `MeetingSessionStatusCode.AudioCallAtCapacity` または `MeetingSessionStatusCode.AudioAuthenticationRejected`
+ **JavaScript:** `MeetingSessionStatusCode.AudioCallAtCapacity` または `MeetingSessionStatusCode.AudioAuthenticationRejected`

#### 通話から参加者が削除された場合
<a name="participant-removed-from-call"></a>

特定の参加者がエージェントによって通話から削除されても、他の参加者のコンタクトが続行される場合は、参加者に次のステータスコードが表示されます。参加者の削除によってコンタクトが終了する場合、参加者にはこのステータスかコンタクト終了のステータスのいずれかが表示されることに注意してください。
+ **iOS:** `MeetingSessionStatusCode.audioServerHungup` または `MeetingSessionStatusCode.audioAuthenticationRejected`
+ **Android:** `MeetingSessionStatusCode.AudioServerHungup` または `MeetingSessionStatusCode.AudioAuthenticationRejected`
+ **JavaScript:** `MeetingSessionStatusCode.AudioAttendeeRemoved` または `MeetingSessionStatusCode.AudioAuthenticationRejected`

#### コンタクトが終了した場合
<a name="contact-ends"></a>

すべての参加者の実際のコンタクトが完全に終了すると、次のステータスコードが表示されます。
+ **iOS:** `MeetingSessionStatusCode.audioCallEnded`
+ **Android:** `MeetingSessionStatusCode.AudioCallEnded`
+ **JavaScript:** `MeetingSessionStatusCode.AudioCallEnded`