

# Introducción al Chat de Amazon IVS
<a name="getting-started-chat"></a>

El chat de Amazon Interactive Video Service (IVS) es una función de chat en directo administrada para acompañar sus transmisiones de vídeo en directo. (El Chat de IVS también se puede utilizar sin transmisión de video). Puede crear salas de chat y habilitar las sesiones de chat entre sus usuarios.

El chat de Amazon IVS le permite centrarse en crear experiencias de chat personalizadas junto con vídeos en directo. No necesita administrar la infraestructura ni desarrollar y configurar componentes de sus flujos de trabajo de chat. El chat de Amazon IVS es escalable, seguro, fiable y rentable.

El chat de Amazon IVS funciona mejor para facilitar la mensajería entre los participantes de una transmisión de vídeo en directo con un principio y un final. 

El resto de este documento lo guiará a través de los pasos necesarios para crear su primera aplicación de chat mediante el chat de Amazon IVS.

**Ejemplos:** están disponibles las siguientes aplicaciones de demostración (tres aplicaciones de cliente de muestra y una aplicación de servidor backend para la creación de tokens):
+ [Demostración web de chat de Amazon IVS](https://github.com/aws-samples/amazon-ivs-chat-web-demo)
+ [Demo de chat de Amazon IVS para Android](https://github.com/aws-samples/amazon-ivs-chat-for-android-demo)
+ [Demostración de chat de Amazon IVS para iOS](https://github.com/aws-samples/amazon-ivs-chat-for-ios-demo)
+ [Backend de demostración de chat de Amazon IVS](https://github.com/aws-samples/amazon-ivs-chat-web-demo/tree/main/serverless)

**Importante:** Las salas de chat que no tienen conexiones o actualizaciones nuevas durante 24 meses se eliminan automáticamente.

**Topics**
+ [Paso 1: realizar la configuración inicial](getting-started-chat-create-account.md)
+ [Paso 2: crear una sala de chat](getting-started-chat-create-room.md)
+ [Paso 3: crear un token de chat](getting-started-chat-auth.md)
+ [Paso 4: enviar y recibir su primer mensaje](getting-started-chat-send-and-receive.md)
+ [Paso 5: verificar sus limites de Service-Quota (opcional)](getting-started-chat-check-service-quota.md)

# Paso 1: realizar la configuración inicial
<a name="getting-started-chat-create-account"></a>

Antes de continuar, debe realizar lo siguiente:

1. Crear una cuenta de AWS

1. Configurar los usuarios raíz y administrativo

1. Configurar los permisos de AWS Identity and Access Management (IAM) Utilizar la política que se especifica a continuación

Para conocer los pasos específicos sobre lo que se ha mencionado anteriormente, consulte [Introducción al streaming de baja latencia de IVS](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/getting-started.html) en la *Guía del usuario de Amazon IVS*. **Importante**: En el “Paso 3: configurar permisos de IAM”, utilice esta política para el chat de IVS:

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "ivschat:CreateChatToken",
            "ivschat:CreateLoggingConfiguration",
            "ivschat:CreateRoom",
            "ivschat:DeleteLoggingConfiguration",
            "ivschat:DeleteMessage",
            "ivschat:DeleteRoom",
            "ivschat:DisconnectUser",
            "ivschat:GetLoggingConfiguration",
            "ivschat:GetRoom",
            "ivschat:ListLoggingConfigurations",
            "ivschat:ListRooms",
            "ivschat:ListTagsForResource",
            "ivschat:SendEvent",
            "ivschat:TagResource",
            "ivschat:UntagResource",
            "ivschat:UpdateLoggingConfiguration",
            "ivschat:UpdateRoom"
          ],
          "Resource": "*"
      },
      {
         "Effect": "Allow",
         "Action": [
            "servicequotas:ListServiceQuotas",
            "servicequotas:ListServices",
            "servicequotas:ListAWSDefaultServiceQuotas",
            "servicequotas:ListRequestedServiceQuotaChangeHistoryByQuota",
            "servicequotas:ListTagsForResource",
            "cloudwatch:GetMetricData",
            "cloudwatch:DescribeAlarms"
         ],
         "Resource": "*"
      },
      {
         "Effect": "Allow",
         "Action": [
            "logs:CreateLogDelivery",
            "logs:GetLogDelivery",
            "logs:UpdateLogDelivery",
            "logs:DeleteLogDelivery",
            "logs:ListLogDeliveries",
            "logs:PutResourcePolicy",
            "logs:DescribeResourcePolicies",
            "logs:DescribeLogGroups",
            "s3:PutBucketPolicy",
            "s3:GetBucketPolicy",
            "iam:CreateServiceLinkedRole",
            "firehose:TagDeliveryStream"
         ],
         "Resource": "*"
      }
   ]
}
```

------

# Paso 2: crear una sala de chat
<a name="getting-started-chat-create-room"></a>

Una sala de chat de Amazon IVS tiene asociada información de configuración (por ejemplo, longitud máxima del mensaje).

En las instrucciones de esta sección, se muestra cómo utilizar la consola o AWS CLI para configurar salas de chat (incluida la configuración opcional para revisar o registrar los mensajes) y crear salas.

# Instrucciones de la consola para crear una sala de Chat de IVS
<a name="create-room-console"></a>

Estos pasos se dividen en fases, que empiezan con la configuración de la sala inicial y terminan con la creación de la sala final.

Opcionalmente, puede configurar una sala para que se revisen los mensajes. Por ejemplo, puede actualizar el contenido de los mensajes o los metadatos, denegar mensajes para evitar que se envíen o dejar pasar el mensaje original. Esto se explica en [Configuración para revisar mensajes de sala (opcional)](#create-room-console-review-messages).

De forma opcional, puede configurar una sala para que se registren los mensajes. Por ejemplo, si sus mensajes se envían a una sala de chat, puede registrarlos en un bucket de Amazon S3, en Amazon CloudWatch o Amazon Kinesis Data Firehose. Esto se explica en [Configuración para registrar los mensajes (opcional)](#create-room-console-log-messages).

## Configuración inicial de sala
<a name="create-room-console-setup"></a>

1. Abra la [consola de chat de Amazon IVS](https://console.aws.amazon.com/ivs/chat). 

   (También puede acceder a la consola de Amazon IVS a través de la [consola de administración de AWS](https://console.aws.amazon.com/)).

1. En la barra de navegación, utilice el menú desplegable **Select a Region (Seleccionar una región)** para elegir una región. Su nueva sala se creará en esta región.

1. En la casilla **Introducción** (parte superior derecha), elija **Sala de chat de Amazon IVS**. Aparece la ventana **Crear sala**.  
![\[Creación de una sala de chat.\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/images/Chat_Create_Room.png)

1. Abajo de **Configuración**, especifique opcionalmente un **Nombre de sala**. Los nombres de las salas no son únicos, pero proporcionan una forma de distinguir otras salas además del ARN (nombre de recurso de Amazon) del canal.

1. Abajo de **Configuración > Configuración de salas**, acepte la **Configuración predeterminada** o bien, seleccione **Configuración personalizada **y, a continuación, configure la **Longitud máxima del mensaje** o **Velocidad máxima de mensajes**.

1. Si desea revisar los mensajes, continúe con [Configuración para revisar mensajes de sala (opcional)](#create-room-console-review-messages) a continuación. De lo contrario, omita eso (es decir, acepte el **Controlador de revisión de mensajes > Deshabilitado**) y proceda directamente a [Creación final de sala](#create-room-console-final).

## Configurar para revisar mensajes de sala (opcional)
<a name="create-room-console-review-messages"></a>

1. Abajo de **Controlador de revisión de mensajes**, seleccione **Controlar con AWS Lambda**. La sección del **Controlador de revisión de mensajes** se expande para mostrar opciones adicionales.

1. Configuración del **Resultado alternativo** para **Permitir** o **Negar** el mensaje si el controlador no devuelve una respuesta válida, encuentra un error o supera el período de espera.

1. Especifique su **Función de Lambda** existente o utilice **Creación de una función de Lambda** para crear una nueva función.

   La función Lambda debe estar en la misma cuenta región de AWS y en la misma cuenta de AWS que la sala de chat. Debe dar permiso al servicio SDK de Amazon Chat para invocar su recurso lambda. La política basada en recursos se creará automáticamente para la función lambda que ha seleccionado. Para obtener más información sobre los permisos, consulte [Resource-Based Policy for Amazon IVS Chat](security-iam.md#security-chat-policy-examples).

## Configurar para registrar mensajes (opcional)
<a name="create-room-console-log-messages"></a>

1. En **Registro de mensajes**, seleccione **Registrar los mensajes de chat de forma automática**. La sección del **Registro de mensajes** se expande para mostrar opciones adicionales. Puede agregar una configuración de registro actual a esta sala o crear una nueva seleccionando **Crear configuración de registro**.

1. Si elige una configuración de registro actual, aparece un menú desplegable que muestra todas las que ya creó. Seleccione una de la lista y sus mensajes de chat se registrarán en este destino de forma automática.

1. Si elige **Create logging configuration** (Crear configuración de registro), aparece una ventana modal que le permite crear y personalizar una configuración de registro nueva.

   1. Si lo desea, especifique un **nombre para la configuración de registro**. Estos nombres, como los de las salas, no son únicos, pero permiten distinguir las configuraciones de registro diferentes a las del ARN.

   1. En **Destination** (Destino), seleccione el **grupo de registros de CloudWatch**, el **flujo de entrega de Kinesis Firehose** o el **bucket de Amazon S3** para elegir el destino de sus registros.

   1. Según el Destino, seleccione la opción para crear un **grupo de registro de CloudWatch** nuevo o utilizar uno actual, un **flujo de entrega de Kinesis Firehose** o un **bucket de Amazon S3**.

   1. Después de revisar, elija **Create** (Crear) para crear una configuración de registro nueva un ARN único. Esto adjunta la configuración de registro nueva a la sala de chat automáticamente.

## Creación final de sala
<a name="create-room-console-final"></a>

1. Después de revisar, elija **Create chat room** (Crear sala de chat) para crear una nueva con un ARN único.

# Instrucciones de la CLI para crear una sala de Chat de IVS
<a name="create-room-cli"></a>

Este documento explica los pasos necesarios para crear una sala de Chat de Amazon IVS mediante la AWS CLI.

## Creación de una sala de chat
<a name="create-room-cli-chat-room"></a>

Crear una sala de chat con la AWS CLI es una opción avanzada y requiere que primero descargue y configure la CLI en su equipo. Para obtener más información, consulte la [Guía del usuario de la interfaz de línea de comandos de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).

1. Ejecute el comando `create-room` de chat y pase un nombre opcional:

   ```
   aws ivschat create-room --name test-room
   ```

1. Esto devuelve una nueva sala de chat:

   ```
   {  
      "arn": "arn:aws:ivschat:us-west-2:123456789012:room/g1H2I3j4k5L6",
      "id": "string",
      "createTime": "2021-06-07T14:26:05-07:00",
      "maximumMessageLength": 200, 
      "maximumMessageRatePerSecond": 10,
      "name": "test-room",
      "tags": {},
      "updateTime": "2021-06-07T14:26:05-07:00"
   }
   ```

1. Tenga en cuenta el campo `arn`. Lo necesitará para crear un token de cliente y conectarse a una sala de chat.

## Preparación de una configuración de registro (opcional)
<a name="create-room-cli-logging"></a>

Tal como sucede con la creación de una sala de chat, la preparación de la configuración de registro es una opción avanzada y requiere que primero descargue y configure la CLI en su equipo. Para obtener más información, consulte la [Guía del usuario de la interfaz de línea de comandos de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).

1. Ejecute el comando `create-logging-configuration` de chat y pase un nombre opcional y una configuración de destino que apunte a un bucket de Amazon S3 por nombre. Este bucket de Amazon S3 debe existir antes de crear la configuración de registro. (Para obtener información sobre la creación de un bucket de Amazon S3, consulte la [Documentación de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)).

   ```
   aws ivschat create-logging-configuration \
      --destination-configuration s3={bucketName=demo-logging-bucket} \
      --name "test-logging-config"
   ```

1. Esto devuelve una configuración de registro nueva:

   ```
   {
      "Arn": "arn:aws:ivschat:us-west-2:123456789012:logging-configuration/ABcdef34ghIJ",
      "createTime": "2022-09-14T17:48:00.653000+00:00",
      "destinationConfiguration": { 
         "s3": {"bucketName": "demo-logging-bucket"}
      },
      "id": "ABcdef34ghIJ",
      "name": "test-logging-config",
      "state": "ACTIVE",
      "tags": {},
      "updateTime": "2022-09-14T17:48:01.104000+00:00"
   }
   ```

1. Tenga en cuenta el campo `arn`. Lo necesita para adjuntar la configuración de registro a la sala de chat.

   1. Si está creando una sala de chat nueva, ejecute el comando `create-room` y pase el `arn` de la configuración de registro:

      ```
      aws ivschat create-room --name test-room \ 
      --logging-configuration-identifiers \
      "arn:aws:ivschat:us-west-2:123456789012:logging-configuration/ABcdef34ghIJ"
      ```

   1. Si está actualizando una sala de chat actual, ejecute el comando `update-room` y pase el `arn` de la configuración de registro:

      ```
      aws ivschat update-room --identifier \
      "arn:aws:ivschat:us-west-2:12345689012:room/g1H2I3j4k5L6" \
      --logging-configuration-identifiers \
      "arn:aws:ivschat:us-west-2:123456789012:logging-configuration/ABcdef34ghIJ"
      ```

# Paso 3: crear un token de chat
<a name="getting-started-chat-auth"></a>

Para que un participante del chat se conecte a una sala y comience a enviar y recibir mensajes, se debe crear un token de chat. Los tokens de chat se utilizan para autenticar y autorizar a los clientes de chat.

Este diagrama ilustra el flujo de trabajo para crear un token de chat de IVS:

![\[Autentique y autorice a sus clientes para su sala de chat recién creada.\]](http://docs.aws.amazon.com/es_es/ivs/latest/ChatUserGuide/images/Chat_Getting_Started_Auth.png)


Como se muestra arriba, una aplicación cliente solicita un token a su aplicación del lado del servidor y la aplicación del lado del servidor llama a CreateChatToken mediante solicitudes firmadas por AWS SDK o [Sigv4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html). Como las credenciales de AWS se utilizan para llamar a la API, el token debe generarse en una aplicación segura del lado del servidor, no en la aplicación del lado del cliente.

Una aplicación de servidor backend que muestra la generación de tokens está disponible en [Backend de demostración de chat de Amazon IVS](https://github.com/aws-samples/amazon-ivs-chat-web-demo/tree/main/serverless).

*Duración de la sesión* hace referencia a cuánto tiempo puede permanecer activa una sesión establecida antes de que finalice automáticamente. Es decir, la duración de la sesión es el tiempo que el cliente puede permanecer conectado a la sala de chat antes que se deba generar un nuevo token y establecer una nueva conexión. Durante la creación de tokens, puede especificar la duración de la sesión como opción.

Cada token solo se puede utilizar una vez para establecer una conexión para un usuario final. Si una conexión está cerrada, se debe crear un nuevo token antes de restablecer una conexión. El token en sí es válido hasta la fecha de caducidad del token incluida en la respuesta.

Cuando un usuario final quiere conectarse a una sala de chat, el cliente debe solicitar un token a la aplicación del servidor. La aplicación de servidor crea un token y lo envía al cliente. Los tokens deben crearse para los usuarios finales a pedido.

Para crear un token de autenticación de chat, siga las instrucciones debajo. Al crear un token de chat, utilice los campos de solicitud para transferir datos sobre el usuario final del chat y las capacidades de mensajería del usuario final; para obtener más información, consulte [CreateChatToken](https://docs.aws.amazon.com//ivs/latest/ChatAPIReference/API_CreateChatToken.html) en la *Referencia de la API del Chat de IVS*.

## Instrucciones del SDK de AWS
<a name="auth-sdk"></a>

Crear un token de chat con el SDK de AWS requiere que descargue y configure primero el SDK en su aplicación. A continuación, se muestran las instrucciones para el SDK de AWS mediante JavaScript.

**Importante:** Este código debe ejecutarse en el lado del servidor y su salida se debe pasar al cliente.

**Requisito previo**: para utilizar el ejemplo de código siguiente, debe cargar el SDK de JavaScript de AWS en su aplicación. Para obtener más información, consulte [Introducción a SDK de AWS para JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/getting-started.html).

```
async function createChatToken(params) {
  const ivs = new AWS.Ivschat();
  const result = await ivs.createChatToken(params).promise();
  console.log("New token created", result.token);
}
/*
Create a token with provided inputs. Values for user ID and display name are 
from your application and refer to the user connected to this chat session.
*/
const params = {
  "attributes": {
    "displayName": "DemoUser",
  }",
  "capabilities": ["SEND_MESSAGE"],
  "roomIdentifier": "arn:aws:ivschat:us-west-2:123456789012:room/g1H2I3j4k5L6",
  "userId": 11231234
};
createChatToken(params);
```

## Instrucciones de la CLI
<a name="auth-cli"></a>

Crear un token de chat con la AWS CLI es una opción avanzada y requiere que primero descargue y configure la CLI en su equipo. Para obtener más información, consulte la [Guía del usuario de la interfaz de línea de comandos de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html). Nota: La generación de tokens con la CLI de AWS es buena para realizar pruebas, pero para uso en producción, le recomendamos que genere tokens en el lado del servidor con el SDK de AWS (consulte las instrucciones anteriores).

1. Ejecute el comando `create-chat-token` junto con el identificador de sala y el identificador de usuario del cliente. Incluya cualquiera de las siguientes capacidades: `"SEND_MESSAGE"`, `"DELETE_MESSAGE"`, `"DISCONNECT_USER"`. (Opcionalmente, incluya la duración de la sesión [en minutos] o atributos personalizados [metadatos] sobre esta sesión de chat. Estos campos no se muestran a continuación.)

   ```
   aws ivschat create-chat-token --room-identifier "arn:aws:ivschat:us-west-2:123456789012:room/g1H2I3j4k5L6" --user-id "11231234" --capabilities "SEND_MESSAGE"
   ```

1. Esto devuelve un token de cliente:

   ```
   {
     "token": "abcde12345FGHIJ67890_klmno1234PQRS567890uvwxyz1234.abcd12345EFGHI67890_jklmno123PQRS567890uvwxyz1234abcde12345FGHIJ67890_klmno1234PQRS567890uvwxyz1234abcde",
     "sessionExpirationTime": "2022-03-16T04:44:09+00:00",
     "tokenExpirationTime": "2022-03-16T03:45:09+00:00"
   }
   ```

1. Guarde este token. Lo necesitará para conectarse a la sala de chat y enviar o recibir mensajes. Tendrá que generar otro token de chat antes de que finalice la sesión (como se indica en `sessionExpirationTime`).

# Paso 4: enviar y recibir su primer mensaje
<a name="getting-started-chat-send-and-receive"></a>

Utilice el token de chat para conectarse a una sala de chat y enviar su primer mensaje. A continuación, se proporciona un código JavaScript de prueba. Los SDK de los clientes de IVS también están disponibles: consulte [SDK de chat: guía para Android](chat-sdk-android.md), [SDK de chat: guía para iOS](chat-sdk-ios.md) y [SDK de chat: guía para JavaScript](chat-sdk-js.md).

**Servicio regional:** el código de prueba que aparece a continuación se refiere a la “región de elección admitida”. El chat de Amazon IVS ofrece puntos de conexión regional que puede utilizar para realizar sus solicitudes. Para la API de mensajería de chat de Amazon IVS, la sintaxis general de un punto de conexión regional es:
+ wss://edge.ivschat.<region-code>.amazonaws.com

Por ejemplo, el punto de conexión de la región Oeste de EE. UU. (Oregón) es wss://edge.ivschat.us-west-2.amazonaws.com. Para obtener una lista de las regiones admitidas, consulte la información de chat de Amazon IVS en [Página de Amazon IVS](https://docs.aws.amazon.com/general/latest/gr/ivs.html) en la *Referencia general de AWS*.

```
/*
1. To connect to a chat room, you need to create a Secure-WebSocket connection
using the client token you created in the previous steps. Use one of the provided 
endpoints in the Chat Messaging API, depending on your AWS region.
*/
const chatClientToken = "GENERATED_CHAT_CLIENT_TOKEN_HERE";
const socket = "wss://edge.ivschat.us-west-2.amazonaws.com"; // Replace “us-west-2” with supported region of choice.
const connection = new WebSocket(socket, chatClientToken);

/*
2. You can send your first message by listening to user input 
in the UI and sending messages to the WebSocket connection.
*/
const payload = {
  "Action": "SEND_MESSAGE",
  "RequestId": "OPTIONAL_ID_YOU_CAN_SPECIFY_TO_TRACK_THE_REQUEST",
  "Content": "text message",
  "Attributes": {
    "CustomMetadata": "test metadata"
  }
}
connection.send(JSON.stringify(payload));

/*
3. To listen to incoming chat messages from this WebSocket connection 
and display them in your UI, you must add some event listeners.
*/
connection.onmessage = (event) => {
  const data = JSON.parse(event.data);
  displayMessages({
    display_name: data.Sender.Attributes.DisplayName,
    message: data.Content,
    timestamp: data.SendTime
  });
}

function displayMessages(message) {
  // Modify this function to display messages in your chat UI however you like.
  console.log(message);
}

/*
4. Delete a chat message by sending the DELETE_MESSAGE action to the WebSocket 
connection. The connected user must have the "DELETE_MESSAGE" permission to 
perform this action.
*/

function deleteMessage(messageId) {
  const deletePayload = {
    "Action": "DELETE_MESSAGE",
    "Reason": "Deleted by moderator",
    "Id": "${messageId}"
  }
  connection.send(deletePayload);
}
```

¡Enhorabuena, está listo\$1 Ahora tiene una aplicación de chat sencilla que puede enviar o recibir mensajes.

# Paso 5: verificar sus limites de Service-Quota (opcional)
<a name="getting-started-chat-check-service-quota"></a>

Sus salas de chat se ampliarán junto con la transmisión en directo de Amazon IVS para permitir que todos los espectadores participen en conversaciones de chat. Sin embargo, todas las cuentas de Amazon IVS tienen límites en el número de participantes en el chat simultáneo y la velocidad de entrega de mensajes. 

*Asegúrese de que sus límites son adecuados y solicite un aumento si es necesario, especialmente si está planificando un evento de streaming grande*. Para obtener más información, consulte [Service Quotas (Low-Latency Streaming)](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/service-quotas.html), [Service Quotas (Real-Time Streaming)](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/service-quotas.html) y [Cuotas de servicio (Chat)](service-quotas.md).