Skip to main content

Integración con vivla-mobile

La app mobile de Vivla (vivla-mobile) consume endpoints específicos de este backend para ofrecer chat de soporte a los huéspedes. Estos endpoints están bajo /api/chat/mobile/ y manejan autenticación, tokens de Stream Chat y gestión de perfil.
El chat en vivla-mobile no usa el backend principal de Vivla. Todos los endpoints de chat se sirven desde este backend (Tools API).

Flujo de autenticación

  1. La app mobile obtiene un authToken del backend principal de Vivla
  2. Envía authToken + userId al endpoint de login de Tools API
  3. Tools API valida el usuario y verifica que tenga acceso al chat (chat_enabled)
  4. Si tiene acceso, genera un token de Stream Chat con expiración de 1 hora
  5. La app usa el streamToken para conectarse directamente a Stream Chat

Endpoints

Login

Autentica al usuario mobile y retorna un token de Stream Chat. Request:
Respuestas posibles:

Refresh token

Renueva el token de Stream Chat. Debe llamarse antes de que expire (1 hora). Request:
Response:

Actualizar perfil

Actualiza el perfil del usuario y sincroniza los cambios con Stream Chat (nombre y avatar). Request:

Crear invitación

Crea una invitación a un canal de chat con un deep link para compartir. Response:

Obtener información de invitación

Endpoint público (sin autenticación). Permite previsualizar un canal antes de aceptar la invitación. Response:

Endpoints de Surveys (Mobile)

La app mobile también consume endpoints de encuestas bajo /api/surveys/mobile/. Estos endpoints usan el mismo MobileAuthGuard para POST y son públicos para GET.

Obtener encuesta activa

Retorna la definición completa de la encuesta activa para el slug dado (ej: home-review). Público, sin autenticación. Soporta ?lang=es para resolución de i18n.

Guardar respuesta parcial

Guarda o actualiza una respuesta parcial. La app guarda localmente (MMKV) y sincroniza al backend por step y al salir. Request:

Completar encuesta

Marca la encuesta como completada y otorga automáticamente reward points. Una vez completada, la respuesta es inmutable.

Reanudar respuesta

Retorna la respuesta parcial existente. Es POST (no GET) porque el MobileAuthGuard necesita leer authToken y userId del body. Response:

Rewards

Consideraciones técnicas

  • Los tokens de Stream Chat expiran en 1 hora. La app debe implementar auto-refresh.
  • El MobileAuthGuard valida authToken y userId en el body de cada request POST. Los endpoints GET de surveys mobile son públicos.
  • Las actualizaciones de perfil se sincronizan bidireccionalmente con Stream Chat.
  • Los deep links usan el formato vivla://chat/invitation/{token} para abrir invitaciones directamente en la app.
  • El endpoint de invitaciones (GET /invitations/:token) es público para permitir previsualización sin autenticación.
  • Las encuestas se envían como deep links generados desde el panel de administración.
  • La persistencia parcial de respuestas sigue un flujo local-first: guarda en MMKV, sincroniza al backend por step, y al reabrir compara timestamps local vs backend (usa el más reciente).