Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation WebSockets pour recevoir des messages
Vous pouvez utiliser Amazon Chime JS SDK
Suivez ces rubriques dans l'ordre indiqué pour commencer à utiliser WebSockets :
Rubriques
Définition d'une IAM politique
Pour commencer, définissez une IAM politique qui vous autorise à établir une WebSocket connexion. L'exemple de politique suivant donne AppInstanceUser
l'autorisation d'établir une WebSocket connexion.
"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": [ "*" ] } ] }
Récupération du point de terminaison
Les étapes suivantes expliquent comment récupérer le point de terminaison utilisé dans une WebSocket connexion.
Utilisation de la GetMessagingSessionEndpointAPIpour récupérer le WebSocket point de terminaison.
Utilisez le URL renvoyé par GetMessagingSessionEndpointAPIpour créer une signature version 4 signée WebSocket URL. Si vous avez besoin d'aide pour cela, vous pouvez suivre les instructions duÉtablissement de la connexion.
Note
WebSocket URLsont le formulaire suivant :
id
.region
.ws-messaging.chime.aws
Établissement de la connexion
Après avoir récupéré un point de terminaison, vous utilisez la connexion API pour établir une WebSocket connexion avec le serveur principal Amazon Chime SDK et recevoir des messages pour un. AppInstanceUser
Vous devez utiliser AWS la version 4 de Signature pour signer les demandes. Pour plus d'informations sur la signature d'une demande, voir Signature des AWS
demandes avec signature version 4.
Note
Pour récupérer le point de terminaison, vous pouvez invoquer le GetMessagingSessionEndpointAPI. Vous pouvez utiliser la bibliothèque WebSocket cliente de votre choix pour vous connecter au point de terminaison.
Syntaxe de la demande
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
URIParamètres de demande
Tous les paramètres de URI requête doivent être URL codés.
Algorithme X-Amz
Identifie la version de AWS Signature et l'algorithme que vous avez utilisé pour calculer la signature. L'Amazon Chime ne SDK prend en charge que l'authentification AWS Signature version 4, donc la valeur de cette option est de. AWS4-HMAC-SHA256
Identifiant X-Amz
Outre l'ID de votre clé d'accès, ce paramètre indique également la AWS région et le service (étendue) pour lesquels la signature est valide. Cette valeur doit correspondre à l'étendue que vous utilisez dans les calculs de signature. La forme générale de cette valeur de paramètre est la suivante :
<
yourAccessKeyId
>/<date
>/<awsRegion
>/<awsService
>/aws4_request
Par exemple :
AKIAIOSFODNN7EXAMPLE/20201214/us-east-1/chime/aws4_request
X-Amz-Date
Le format de date et d'heure doit être conforme à la norme ISO 8601, et vous devez le formater comme yyyyMMddTHHmmssZ
suit. Par exemple, vous devez convertir le 01/08/2020 15:32:41.982-700 en temps universel coordonné () et le soumettre sous le format. UTC 20200801T083241Z
En-têtes signés X-Amz
Répertorie les en-têtes que vous avez utilisés pour calculer la signature. Les en-têtes suivants sont obligatoires pour les calculs de signature :
L'en-tête de l'HTTPhôte.
Tous les en-têtes x-amz-* que vous prévoyez d'ajouter à la demande.
Note
Pour plus de sécurité, signez tous les en-têtes de demande que vous comptez inclure dans votre demande.
Signatures X-Amz
Fournit la signature pour authentifier votre demande. Cette signature doit correspondre à la signature calculée par Amazon Chime. SDK Si ce n'est pas le cas, Amazon Chime SDK refuse la demande. Par exemple, 733255ef022bec3f2a8701cd61d4b371f3f28c9f19EXAMPLEd48d5193d7
.
Jeton de sécurité X-Amz
Paramètre d'identification facultatif si vous utilisez des informations d'identification provenant du service de jeton de sécurité. Pour plus d'informations sur le service, consultez le https://docs.aws.amazon.com/STS/dernier//APIReference.
SessionId
Indique un identifiant unique pour la WebSocket connexion en cours d'établissement.
UserArn
Indique l'identité de la AppInstanceUser
personne qui tente d'établir une connexion. La valeur doit être ARN égale àAppInstanceUser
. Par exemple, arn:aws:chime:
us%2Deast%2D1
:123456789012
:app%2Dinstance/694d2099%2Dcb1e%2D463e%2D9d64%2D697ff5b8950e
/user/johndoe
Utilisation de prefetch pour fournir des informations sur les chaînes
Lorsque vous établissez une WebSocket connexion, vous pouvez spécifier prefetch-on=connect
dans votre requête les paramètres de diffusion des CHANNEL_DETAILS
événements. La fonction de prélecture est fournie avec la connexionAPI, et elle permet aux utilisateurs de voir une vue de discussion enrichie sans appels supplémentairesAPI. Les utilisateurs peuvent :
Consultez un aperçu du dernier message de la chaîne, ainsi que son horodatage.
Voir les membres d'une chaîne.
Consultez les marqueurs non lus d'une chaîne.
Une fois qu'un utilisateur s'est connecté avec le paramètre de prélecture spécifié, il reçoit l'événement d'établissement de session, qui indique que la connexion a été établie. L'utilisateur reçoit ensuite jusqu'à 50 CHANNEL_DETAILS
événements. Si l'utilisateur possède moins de 50 canaux, le connect API extrait tous les canaux via CHANNEL_DETAILS
des événements. Si l'utilisateur possède plus de 50 canaux, il API préextrait les 50 principaux canaux contenant des messages non lus et les dernières valeurs. LastMessageTimestamp
Les CHANNEL_DETAILS
événements arrivent dans un ordre aléatoire et vous recevez des événements pour les 50 chaînes.
De plus, prefetch renvoie les informations suivantes pour ChannelMessages
et : ChannelMemberships
ChannelMessages— Liste des ChannelMessageSummaryobjets, triés par
CreatedTimestamp
ordre décroissant. Inclut uniquement les 20 derniers messages visibles par l'utilisateur. Si certains messages ciblés du canal ne sont pas visibles pour l'utilisateur actuel, moins de 20 messages peuvent être renvoyés. LeChannelMessagesHasMore
booléen sera défini sur true pour indiquer qu'il y a d'autres messages. Limite souple, ajustable au niveau du AWS compte.ChannelMemberships— Liste des ChannelMembershipSummaryobjets. Inclut un maximum de 30 membres de la chaîne. Limite souple, ajustable au niveau du AWS compte.
Cet exemple montre comment utiliserprefetch-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
Cet exemple montre la réponse pour un canal. Vous recevrez des réponses pour les 50 chaînes.
{ "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 }) }
Traitement des événements
Pour qu'un AppInstanceUser
homme puisse recevoir des messages après avoir établi une connexion, vous devez les ajouter à une chaîne. Pour ce faire, utilisez CreateChannelMembership API.
Note
An reçoit AppInstanceUser
toujours des messages pour tous les canaux auxquels ils appartiennent. La messagerie s'arrête lorsque l'AppInstance
utilisateur se déconnecte.
An AppInstanceAdmin
et a ChannelModerator
ne reçoivent pas de messages sur une chaîne, sauf si vous utilisez le CreateChannelMembershipAPIpour les ajouter explicitement.
Les rubriques suivantes expliquent comment traiter les événements.
Comprendre les structures des messages
Chaque WebSocket message que vous recevez respecte le format suivant :
{ "Headers": {"
key
": "value
"}, "Payload": "{\"key
\": \"value
\"}" }
En-têtes
La SDK messagerie Amazon Chime utilise les clés d'en-tête suivantes :
x-amz-chime-event-type
x-amz-chime-message-type
x-amz-chime-event-reason
La section suivante répertorie et décrit les valeurs et charges utiles possibles de l'en-tête.
Charge utile
Les messages Websocket renvoient des JSON chaînes de caractères. La structure des JSON chaînes dépend des x-amz-event-type
en-têtes. Le tableau suivant répertorie les x-amz-chime-event-type
valeurs et les charges utiles possibles :
EventType | Format de charge utile |
---|---|
|
N/A. Ce message est envoyé une fois que l'utilisateur se connecte au WebSocket. Cela indique que tout message ou événement sur un canal qui arrive après que l'utilisateur a reçu le |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x-amz-chime-message-type
Le tableau suivant répertorie les types de x-amz-chime-message-type
messages.
Type de message | Description |
---|---|
|
Envoyé lorsque le websocket reçoit un message de STANDARD canal. |
|
Envoyé lorsqu'il WebSocket reçoit un message de CONTROL chaîne. |
|
Tous les autres messages Websocket envoyés par Amazon SDK Chime Messaging. |
x-amz-chime-event-raison
Il s'agit d'un en-tête facultatif pris en charge pour un cas d'utilisation spécifique. L'en-tête fournit des informations sur la raison pour laquelle un événement spécifique a été reçu.
Motif de l'événement | Description |
---|---|
sous-canal_ DELETED |
|
Gestion des déconnexions
Les Websockets peuvent se déconnecter en raison de modifications de la connectivité réseau ou lorsque les informations d'identification expirent. Une fois que vous avez ouvert un WebSocket, Amazon Chime SDK envoie régulièrement des pings au client de messagerie pour s'assurer qu'il est toujours connecté. Si la connexion se ferme, le client reçoit un code de WebSocket fermeture. Le client peut essayer de se reconnecter ou non, selon le code de fermeture. Les tableaux suivants indiquent les codes de fermeture que le client peut utiliser pour se reconnecter.
Pour 1 000 à 4 000 codes de fermeture, reconnectez-vous uniquement pour les messages suivants :
Codes de fermeture |
Peut se reconnecter |
Raison |
---|---|---|
1001 |
Oui |
Fermeture normale |
1006 |
Oui |
Fermeture anormale |
1011 |
Oui |
Erreur interne du serveur |
1012 |
Oui |
Redémarrage du service |
1013 |
Oui |
Réessayez plus tard |
1014 |
Oui |
Le serveur agissait en tant que passerelle ou proxy et a reçu une réponse non valide du serveur en amont. Ceci est similaire au code de HTTP statut 502. |
Pour 4 XXX codes, reconnectez-vous toujours, à l'exception des messages suivants :
Codes de fermeture |
Peut se reconnecter |
Raison |
---|---|---|
4002 |
Non |
Initié par le client |
4003 |
Non |
Accès interdit |
4401 |
Non |
Non autorisé |
Lorsque l'application utilise un code de fermeture pour se reconnecter, elle doit :
-
Appelez le GetMessagingSessionEndpointAPIencore une fois pour obtenir une nouvelle baseURL.
Actualisez les IAM informations d'identification si elles ont expiré.
-
Connectez-vous via le WebSocket.
Si vous utilisez la amazon-chime-sdk-js bibliothèque, cela est géré pour vous si vous implémentez la propriété needsRefresh() et la méthode refresh (). Pour un exemple pratique, consultez https://github.com/aws-samples/amazon-chime-sdk/blob/dc11c4c76c78d28f618577706bba2087919a5635/apps/chat/src/providers/ .jsx #L93 -L101 AuthProvider