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
- La app mobile obtiene un
authToken del backend principal de Vivla
- Envía
authToken + userId al endpoint de login de Tools API
- Tools API valida el usuario y verifica que tenga acceso al chat (
chat_enabled)
- Si tiene acceso, genera un token de Stream Chat con expiración de 1 hora
- 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:
Acceso completo
Sin acceso
Usuario no encontrado
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:
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).