¿Cómo escuchar cambios de campos de documentos en tiempo real?

Tabla de contenidos

Athento permite escuchar cambios de campos de documentos en tiempo real. Esto se hace mediante el uso de websockets. Hay que seguir una serie de pasos para poder hacerlo.

 

Configuración previa

Antes de empezar con la integración, hay que configurar una serie de elementos en la instancia. Lo primero sería activar el setting USER_WEBSOCKET_ENABLED.

Cuando se haya activado, lo siguiente es ejecutar el comando flush_document_events_schedule.py para generar el schedule de q_cluster.

 

Autenticación por JWT

Para poder hacer la conexión al websocket de forma externa a Athento, lo primero que hay que hacer es obtener un token JWT. Para ello, hay que hacer una llamada api:

POST https://<host>/authentication/jwt/token/
{
  "username": <username>
  "password": <password>
}

Cuando se haya hecho la llamada, se devolverá un access y un refresh token. El access lo utilizaremos más adelante, y el refresh token habilita la posibilidad de generar otro token cuando vaya a caducar. Para ello, hay que llamar al siguiente endpoint:

POST https://<host>/authentication/jwt/token/refresh/
{
  "refresh": <refresh_token>
}

Este endpoint devuelve un nuevo access_token y refresh_token, ambos actualizados para poder mantener la integración.

 

Conexión al websocket

Para hacer la conexión al websocket, hay que hacerlo mediante la siguiente url:

wss://<host>/ws/user/?ctk=<access_token>

Una vez se ha establecido la conexión, comenzarán a llegar mensajes con el formato:

{
  "document": <document_uuid_1>,
  "event_type": "document_update",
  "metadatas": [
      {
        "uuid": <metadata_uuid_1>,
        "value": <new_value_1>,
        "type": {
          "uuid": <metadata_type_uuid_1>,
          "name": <metadata_type_name_1>
        },
      },
    ]
}

{
  "document": <document_uuid_2>,
  "event_type": "document_update",
  "metadatas": [
      {
        "uuid": <metadata_uuid_2>,
        "value": <new_value_2>,
        "type": {
          "uuid": <metadata_type_uuid_2>,
          "name": <metadata_type_name_2>
        },
      },
    ]
}

Llegará un mensaje de actualización por cada documento modificado. Este mensaje contendrá todos los cambios realizados en los campos del documento.