

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Integrare le chiamate in-app, web e video e la condivisione dello schermo in modo nativo in un’applicazione
<a name="config-com-widget2"></a>

Come integrare le chiamate in-app, web e video e la condivisione dello schermo di Amazon Connect in un’applicazione

1. Usa l'[StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API Amazon Connect per creare il contatto.

1. Utilizza quindi i dettagli restituiti dalla chiamata API per partecipare alla chiamata utilizzando la libreria Amazon Chime client per [iOS](https://github.com/aws/amazon-chime-sdk-ios), [Android](https://github.com/aws/amazon-chime-sdk-android) o [JavaScript](https://github.com/aws/amazon-chime-sdk-js). 

Per ulteriori informazioni sulla creazione di partecipanti aggiuntivi, consulta [Abilitare le chiamate multiutente in-app, web e video](enable-multiuser-inapp.md). 

[Vedi il seguente repository Github per applicazioni di esempio: -calling-examples. amazon-connect-in-app](https://github.com/amazon-connect/amazon-connect-in-app-calling-examples) 

**Topics**
+ [In che modo un dispositivo client avvia una chiamata in-app o web](#diagram-option2)
+ [Nozioni di base](#diagram-option2-gs)
+ [Passaggi facoltativi](#optional-steps)

## In che modo un dispositivo client avvia una chiamata in-app o web
<a name="diagram-option2"></a>

Il diagramma seguente mostra la sequenza di eventi necessari per avviare una chiamata in-app o web da un dispositivo client (applicazione per dispositivi mobili o browser).

![Un diagramma concettuale che mostra in che modo un dispositivo client avvia una chiamata.](http://docs.aws.amazon.com/it_it/connect/latest/adminguide/images/netra-gs-diagram.png)


1. Il cliente utilizza l'applicazione client (sito web o applicazione) per avviare una chiamata in-app o web.

1. L'applicazione client (sito Web o applicazione mobile) o il server Web utilizza l' Connect Customer [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API per avviare il contatto a cui passa qualsiasi attributo o contesto. Connect Customer

1. L'applicazione client si unisce alla chiamata utilizzando i dettagli restituiti dal [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)passaggio 2.

1. (Facoltativo) Il client utilizza l'[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)API per ricevere un `ConnectionToken` messaggio utilizzato per inviare DTMF tramite l'API. [SendMessage](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_SendMessage.html)

1. Il contatto raggiunge il flusso, viene instradato in base al flusso e messo in coda.

1. L'agente accetta il contatto.

1. (Facoltativo) Se il video è abilitato per il cliente e l'agente, questi possono avviare il video.

1. (Facoltativo, non mostrato nel diagramma) È possibile aggiungere altri partecipanti utilizzando e. [CreateParticipant[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipant.html) APIs 

## Nozioni di base
<a name="diagram-option2-gs"></a>

Di seguito sono riportati i passaggi di alto livello per iniziare:

1. Utilizza l'[StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API per creare il contatto. L’API restituisce i dettagli necessari per il client dell’SDK di Amazon Chime per partecipare alla chiamata.

1. Crea un'istanza dell'oggetto `MeetingSessionConfiguration` client Amazon Chime SDK utilizzando le configurazioni restituite da. [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)

1. Crea un’istanza di `DefaultMeetingSession` del client dell’SDK di Amazon Chime con `MeetingSessionConfiguration`, che è stata creata nel passaggio 2 per creare una sessione di riunione con il cliente. 
   + 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. Usa il metodo `meetingSession.audioVideo.start()` per partecipare alla chiamata con il contatto WebRTC con l'audio.
   + iOS/Android

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

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

1. Usa il metodo `meetingSession.audioVideo.stop()` per riagganciare la chiamata con il contatto WebRTC.
   + iOS/Android

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

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

## Passaggi facoltativi
<a name="optional-steps"></a>

Per ulteriori operazioni e una documentazione completa sulle API, consulta le guide generali sulle API specifiche della piattaforma:
+ **iOS**: [panoramica delle API](https://aws.github.io/amazon-chime-sdk-ios/guides/api_overview.html)
+ **Android**: [panoramica delle API](https://aws.github.io/amazon-chime-sdk-android/guides/api_overview.html)
+ **JavaScript**[: Panoramica delle API](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/03_API_Overview.md)

### Inviare toni DTMF
<a name="send-dtmf-tones"></a>

Per inviare DTMF alla chiamata, APIs sono necessari due Amazon Connect Participant Service: e rispettivamente. [CreateParticipantConnection[SendMessage](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_SendMessage.html)](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)

**Nota**  
`contentType`perché l'API deve essere. SendMessage `audio/dtmf`

1. [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)Invoca per recuperare`ConnectionToken`. (`ParticipantToken`è necessario per chiamare questa API. Puoi trovarlo nella [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)risposta.)

1. Con`ConnectionToken`, chiama [SendMessage](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_SendMessage.html)per l'invio di cifre DTMF.

### Selezionare i dispositivi audio
<a name="select-audio-devices"></a>

Per selezionare il input/output dispositivo audio, puoi utilizzare i metodi del client Amazon Chime SDK per Android e iOS o le funzionalità iOS native [per 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);
```

### Disattivare e riattivare l’audio
<a name="mute-unmute-audio"></a>

Per disattivare e riattivare l'audio, usa `meetingSession.audioVideo.realtimeLocalMute()` e `meetingSession.audioVideo.realtimeLocalUnmute()`.

**iOS/Android**

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

**JavaScript**

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

### Avviare il video dell’utente
<a name="start-self-video"></a>

Per avviare un video di te stesso o te stessa, utilizza `meetingSession.audioVideo.startLocalVideo()`. Consulta le guide alle API della libreria client per ulteriori informazioni su come enumerare e scegliere dispositivi specifici.

**iOS/Android**

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

**JavaScript**

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

### Interrompere il video dell’utente
<a name="stop-self-video"></a>

Per interrompere la riproduzione del video di te stesso o te stessa, utilizza `meetingSession.audioVideo.stopLocalVideo()`.

**iOS/Android**

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

**JavaScript**

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

### Abilitare il video dell’agente
<a name="enable-agent-video"></a>

Per consentire la ricezione e il caricamento di video dell’agente all’interno dell’applicazione, utilizza `meetingSession.audioVideo.startRemoteVideo()`. Dovrai inoltre implementare gli osservatori di riquadri video e associare i riquadri video alle visualizzazioni.

**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);
```

Consulta le guide agli SDK specifiche della piattaforma per i dettagli completi sull’implementazione dei riquadri video.

### Disabilitare il video dell’agente
<a name="disable-agent-video"></a>

Per interrompere la ricezione e il caricamento di video dell’agente all’interno dell’applicazione, utilizza `meetingSession.audioVideo.stopRemoteVideo()`.

**iOS/Android**

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

**JavaScript**

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

### Utilizzare i messaggi di dati
<a name="use-data-messages"></a>

Puoi utilizzare [messaggi di dati](https://github.com/aws/amazon-chime-sdk-js/blob/main/guides/03_API_Overview.md#9-send-and-receive-data-messages-optional) se devi inviare qualsiasi stato dal lato agente all’utente finale. Ad esempio, quando i clienti sono in attesa, puoi inviare un messaggio di dati all'applicazione del cliente per visualizzare un messaggio per informarli che sono in attesa e che la video/screen condivisione è ancora in corso di invio, oppure puoi disattivare la condivisione. video/screen 

**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);
```

### Ascoltare gli eventi di arresto
<a name="listen-for-stop-events"></a>

Puoi ascoltare gli eventi quando la partecipazione di un contatto termina tramite l’osservatore `audioVideoDidStop`. I codici di stato specifici possono variare in base alla piattaforma.

#### Limite di capacità raggiunto per una chiamata
<a name="call-reaches-capacity"></a>

Quando più di sei persone tentano di partecipare alla chiamata, i partecipanti aggiuntivi riceveranno il seguente messaggio di errore e non potranno partecipare finché qualche persona non avrà abbandonato la chiamata.
+ **iOS:** `MeetingSessionStatusCode.audioCallAtCapacity` o `MeetingSessionStatusCode.audioAuthenticationRejected`
+ **Android:** `MeetingSessionStatusCode.AudioCallAtCapacity` o `MeetingSessionStatusCode.AudioAuthenticationRejected`
+ **JavaScript:** `MeetingSessionStatusCode.AudioCallAtCapacity` o `MeetingSessionStatusCode.AudioAuthenticationRejected`

#### Partecipante rimosso da una chiamata
<a name="participant-removed-from-call"></a>

Quando un partecipante viene rimosso dalla chiamata dall’agente ma il contatto continua per gli altri partecipanti, il partecipante rimosso riceverà il seguente codice di stato. Tieni presente che se la rimozione del partecipante comporta la fine del contatto, il partecipante riceverà questo stato o lo stato di fine contatto.
+ **iOS:** `MeetingSessionStatusCode.audioServerHungup` o `MeetingSessionStatusCode.audioAuthenticationRejected`
+ **Android:** `MeetingSessionStatusCode.AudioServerHungup` o `MeetingSessionStatusCode.AudioAuthenticationRejected`
+ **JavaScript:** `MeetingSessionStatusCode.AudioAttendeeRemoved` o `MeetingSessionStatusCode.AudioAuthenticationRejected`

#### Termine di un contatto
<a name="contact-ends"></a>

Quando il contatto effettivo termina completamente per tutti i partecipanti, questi riceveranno il seguente codice di stato.
+ **iOS:** `MeetingSessionStatusCode.audioCallEnded`
+ **Android:** `MeetingSessionStatusCode.AudioCallEnded`
+ **JavaScript:** `MeetingSessionStatusCode.AudioCallEnded`