Utilizzo WebSockets per ricevere messaggi - SDK Amazon Chime

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à.

Utilizzo WebSockets per ricevere messaggi

Puoi utilizzare l'SDK Amazon Chime JS per ricevere messaggi oppure puoi utilizzare la libreria WebSocket client di tua scelta. WebSockets

Segui questi argomenti nell'ordine elencato per iniziare a utilizzare: WebSockets

Definizione di una policy IAM

Per iniziare, definisci una policy IAM che ti dia il permesso di stabilire una WebSocket connessione. La seguente politica di esempio fornisce AppInstanceUser il permesso di stabilire una WebSocket connessione.

"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action: [ "chime:Connect" ], "Resource": [ "arn:aws:chime:region:{aws_account_id}:app-instance/{app_instance_id}/user/{app_instance_user_id}" ] }, { "Effect": "Allow", "Action: [ "chime:GetMessagingSessionEndpoint" ], "Resource": [ "*" ] } ] }

Recupero dell'endpoint

I passaggi seguenti spiegano come recuperare l'endpoint utilizzato in una connessione. WebSocket

  1. Utilizza l'GetMessagingSessionEndpointAPI per recuperare l'endpoint. WebSocket

  2. Utilizza l'URL restituito dall'GetMessagingSessionEndpointAPI per creare un URL firmato Signature Version 4. WebSocket Se hai bisogno di aiuto per farlo, puoi seguire le istruzioni in. Stabilire la connessione

    Nota

    WebSocket Gli URL hanno il seguente formato: id.region.ws-messaging.chime.aws

Stabilire la connessione

Dopo aver recuperato un endpoint, utilizzi l'API connect per stabilire una WebSocket connessione al server back-end Amazon Chime SDK e ricevere messaggi per un. AppInstanceUser È necessario utilizzare AWS Signature Version 4 per firmare le richieste. Per ulteriori informazioni sulla firma di una richiesta, consulta Firmare AWS le richieste con la versione 4 della firma.

Nota

Per recuperare l'endpoint, puoi richiamare l'API. GetMessagingSessionEndpoint Puoi utilizzare la libreria WebSocket client di tua scelta per connetterti all'endpoint.

Sintassi della richiesta

GET /connect ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIARALLEXAMPLE%2F20201214%2Fregion%2Fchime%2Faws4_request &X-Amz-Date=20201214T171359Z &X-Amz-Expires=10 &X-Amz-SignedHeaders=host &sessionId={sessionId} &userArn={appInstanceUserArn} &X-Amz-Signature=db75397d79583EXAMPLE

Parametri di richiesta URI

Tutti i parametri di query di richiesta URI devono essere codificati tramite URL.

Algoritmo X-Amz

Identifica la versione di AWS Signature e l'algoritmo utilizzato per calcolare la firma. L'SDK Amazon Chime supporta solo l'autenticazione AWS Signature Version 4, quindi il suo valore è. AWS4-HMAC-SHA256

Credenziale X-Amz

Oltre all'ID della chiave di accesso, questo parametro fornisce anche la AWS regione e il servizio, ovvero l'ambito, per i quali la firma è valida. Questo valore deve corrispondere all'ambito utilizzato nei calcoli delle firme. La forma generale per questo valore di parametro è:

<yourAccessKeyId>/<date>/<awsRegion>/<awsService >/aws4_request

Per esempio:

AKIAIOSFODNN7EXAMPLE/20201214/us-east-1/chime/aws4_request

X-Amz-Date

Il formato di data e ora deve essere conforme allo standard ISO 8601 ed è necessario formattarlo come. yyyyMMddTHHmmssZ Ad esempio, è necessario convertire 08/01/2020 15:32:41.982-700 in Coordinated Universal Time (UTC) e inviarlo come. 20200801T083241Z

Intestazioni firmate da X-Amz

Elenca le intestazioni che hai utilizzato per calcolare la firma. Per i calcoli delle firme sono necessarie le seguenti intestazioni:

  • L'intestazione dell'host HTTP.

  • Qualsiasi intestazione x-amz-* che intendi aggiungere alla richiesta.

Nota

Per una maggiore sicurezza, firma tutte le intestazioni di richiesta che intendi includere nella richiesta.

Firme X-Amz

Fornisce la firma per autenticare la richiesta. Questa firma deve corrispondere alla firma calcolata da Amazon Chime SDK. In caso contrario, Amazon Chime SDK nega la richiesta. Ad esempio, 733255ef022bec3f2a8701cd61d4b371f3f28c9f19EXAMPLEd48d5193d7.

Token di sicurezza X-Amz

Parametro di credenziale opzionale se si utilizzano credenziali provenienti dal servizio Security Token. Per ulteriori informazioni sul servizio, vedere https://docs.aws.amazon.com/STS/latest/APIReference/.

SessionId

Indica un ID univoco per la WebSocket connessione che si sta stabilendo.

UserArn

Indica l'identità del AppInstanceUser tentativo di stabilire una connessione. Il valore deve essere l'ARN di. AppInstanceUser Ad esempio, arn:aws:chime:us%2Deast%2D1:123456789012:app%2Dinstance/694d2099%2Dcb1e%2D463e%2D9d64%2D697ff5b8950e/user/johndoe

Utilizzo di prefetch per fornire i dettagli del canale

Quando si stabilisce una WebSocket connessione, è possibile specificare prefetch-on=connect nei parametri di interrogazione per fornire CHANNEL_DETAILS eventi. La funzionalità di prefetch viene fornita con l'API connect e consente agli utenti di visualizzare una visualizzazione della chat arricchita senza chiamate API aggiuntive. Gli utenti possono:

  • Visualizza un'anteprima dell'ultimo messaggio del canale, più il relativo timestamp.

  • Visualizza i membri di un canale.

  • Visualizza i marker non letti di un canale.

Dopo che un utente si connette con il parametro prefetch specificato, riceve l'evento di sessione stabilita, che indica che la connessione è stata stabilita. L'utente riceve quindi fino a 50 CHANNEL_DETAILS eventi. Se l'utente ha meno di 50 canali, l'API connect precarica tutti i canali tramite CHANNEL_DETAILS eventi. Se l'utente ha più di 50 canali, l'API prerecupera i primi 50 canali che contengono messaggi non letti e i valori più recenti. LastMessageTimestamp Gli CHANNEL_DETAILS eventi arrivano in ordine casuale e tu ricevi eventi per tutti i 50 canali.

Inoltre, prefetch restituisce quanto segue per ChannelMessages e: ChannelMemberships

  • ChannelMessages— Elenco di ChannelMessageSummaryoggetti, ordinati per CreatedTimestamp ordine decrescente. Include solo gli ultimi 20 messaggi visibili all'utente. Se nel canale sono presenti messaggi mirati che non sono visibili all'utente corrente, potrebbero essere restituiti meno di 20 messaggi. Il valore ChannelMessagesHasMore booleano verrà impostato su true per indicare che ci sono più messaggi. Limite flessibile, regolabile a livello di AWS account.

  • ChannelMemberships— Elenco degli ChannelMembershipSummaryoggetti. Include un massimo di 30 membri del canale. Limite flessibile, regolabile a livello di AWS account.

Questo esempio mostra come usareprefetch-on=connect.

GET /connect ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIARALLEXAMPLE%2F20201214%2Fregion%2Fchime%2Faws4_request &X-Amz-Date=20201214T171359Z &X-Amz-Expires=10 &X-Amz-SignedHeaders=host &sessionId=sessionId &prefetch-on=connect &userArn=appInstanceUserArn &X-Amz-Signature=db75397d79583EXAMPLE

Questo esempio mostra la risposta per un canale. Riceverai risposte per tutti i 50 canali.

{ "Headers": { "x-amz-chime-event-type": "CHANNEL_DETAILS", "x-amz-chime-message-type": "SYSTEM" }, "Payload": JSON.stringify"({ Channel: ChannelSummary ChannelMessages: List of ChannelMessageSummary ChannelMemberships: List of ChannelMembershipSummary ReadMarkerTimestamp: Timestamp ChannelMessagesHasMore: Boolean }) }

Elaborazione degli eventi

AppInstanceUserPer ricevere messaggi dopo aver stabilito una connessione, è necessario aggiungerli a un canale. Per farlo, usa l'CreateChannelMembershipAPI.

Nota

An riceve AppInstanceUser sempre messaggi per tutti i canali a cui appartiene. La messaggistica si interrompe quando l'AppInstanceutente si disconnette.

An AppInstanceAdmin e a ChannelModerator non ricevono messaggi su un canale a meno che non si utilizzi l'CreateChannelMembershipAPI per aggiungerli esplicitamente.

I seguenti argomenti spiegano come elaborare gli eventi.

Comprendere le strutture dei messaggi

Ogni WebSocket messaggio che ricevi è conforme a questo formato:

{ "Headers": {"key": "value"}, "Payload": "{\"key\": \"value\"}" }
Headers

La messaggistica di Amazon Chime SDK utilizza le seguenti chiavi di intestazione:

  • x-amz-chime-event-type

  • x-amz-chime-message-type

  • x-amz-chime-event-reason

La sezione successiva elenca e descrive i valori e i payload possibili dell'intestazione.

Payload

I messaggi Websocket restituiscono stringhe JSON. La struttura delle stringhe JSON dipende dalle intestazioni. x-amz-event-type La tabella seguente elenca i x-amz-chime-event-type valori e i payload possibili:

EventType Formato del payload

SESSION_ESTABLISHED

N/A. Questo messaggio viene inviato una volta dopo che l'utente si è connesso a. WebSocket Indica che è garantito che qualsiasi messaggio o evento su un canale che arriva dopo che l'utente ha ricevuto il SESSION_ESTABLISHED messaggio verrà recapitato all'utente fintanto che il messaggio WebSocket rimane aperto.

CREATE_CHANNEL_MESSAGE

ChannelMessage

REDACT_CHANNEL_MESSAGE

UPDATE_CHANNEL_MESSAGE

DELETE_CHANNEL_MESSAGE

PENDING_CREATE_CHANNEL_MESSAGE

PENDING_UPDATE_CHANNEL_MESSAGE

FAILED_CREATE_CHANNEL_MESSAGE

FAILED_UPDATE_CHANNEL_MESSAGE

DENIED_CREATE_CHANNEL_MESSAGE

DENIED_UPDATE_CHANNEL_MESSAGE

CHANNEL_DETAILS

Canale

L'oggetto ChannelSummary.

ChannelMessages

Elenco di ChannelMessageSummaryoggetti, ordinati per CreatedTimestamp ordine decrescente. Include gli ultimi 20 messaggi, ma puoi modificare tale limite a livello di account AWS.

ChannelMemberships

Elenco di oggetti ChannelMembershipSummary Restituisce un massimo di 30 membri del canale, ma puoi modificare tale limite a livello di account AWS.

ReadMarkerTimestamp

L'ora in cui l'AppInstanceUserultimo ha contrassegnato il canale come letto.

UPDATE_CHANNEL

Channel

DELETE_CHANNEL

BATCH_CREATE_CHANNEL_MEMBERSHIP

BatchChannelMembership

CREATE_CHANNEL_MEMBERSHIP

ChannelMembership

DELETE_CHANNEL_MEMBERSHIP

UPDATE_CHANNEL_MEMBERSHIP

tipo di messaggio x-amz-chime-

La tabella seguente elenca i tipi di messaggio. x-amz-chime-message-type

Tipo di messaggio Descrizione

STANDARD

Inviato quando il websocket riceve un messaggio sul canale STANDARD.

CONTROL

Inviato quando WebSocket riceve un messaggio dal canale CONTROL.

SYSTEM

Tutti gli altri messaggi websocket inviati da Amazon Chime SDK Messaging.

x-amz-chime-event-reason

Questa è un'intestazione opzionale supportata per un caso d'uso specifico. L'intestazione fornisce informazioni sul motivo per cui è stato ricevuto un evento specifico.

Motivo dell'evento Descrizione

SubChannel_deleted

DELETE_CHANNEL_MEMBERSHIPeventi ricevuti dai moderatori del canale elastico. Visualizzato dai moderatori solo dopo il bilanciamento degli abbonamenti, elimina un sottocanale a cui appartenevano.

Gestione delle disconnessioni

I Websocket possono disconnettersi a causa di cambiamenti nella connettività di rete o alla scadenza delle credenziali. Dopo aver aperto un WebSocket, l'SDK Amazon Chime invia ping regolari al client di messaggistica per assicurarsi che sia ancora connesso. Se la connessione si chiude, il client riceve un codice di chiusura. WebSocket Il client può provare a riconnettersi o meno, a seconda del codice di chiusura. Le tabelle seguenti mostrano i codici di chiusura che il client può utilizzare per riconnettersi.

Per 1000 o 4000 codici di chiusura, riconnettiti solo per i seguenti messaggi:

Codici di chiusura

Può riconnettersi

Motivo

1001

Chiusura normale

1006

Chiusura anomala

1011

Errore interno del server

1012

Riavvio del servizio

1013

Riprova più tardi

1014

Il server fungeva da gateway o proxy e ha ricevuto una risposta non valida dal server upstream. È simile al codice di stato HTTP 502.

Per i codici 4XXX, riconnettiti sempre ad eccezione dei seguenti messaggi:

Codici di chiusura

Può riconnettersi

Motivo

4002

No

Client avviato

4003

No

Accesso negato

4401

No

Not authorized (Non autorizzato)

Quando l'applicazione utilizza un codice di chiusura per riconnettersi, l'applicazione deve:

  1. Richiama nuovamente l'GetMessagingSessionEndpointAPI per ottenere un nuovo URL di base.

  2. Aggiorna le credenziali IAM se sono scadute.

  3. Connect tramite WebSocket.

Se si utilizza la amazon-chime-sdk-js libreria, questa operazione viene gestita automaticamente se si implementano la proprietà needsRefresh () e il metodo refresh (). Per un esempio funzionante, vedete https://github.com/aws-samples/amazon-chime-sdk/blob/dc11c4c76c78d28f618577706bba2087919a5635/apps/chat/src/providers/ .jsx #L93 -L101. AuthProvider