2026-07-16 — Soporte cliente-admin, device tokens y aviso fuera de la sala
Para front-end y mobile (cliente y conductor) y el panel admin.
Summary
El cliente ya puede abrir un hilo de soporte con el back-office sobre su pedido (antes solo el conductor). Las apps pueden registrar el token de push de su dispositivo mediante nuevos endpoints. Y en el chat cliente↔conductor se emite un aviso liviano al canal personal del destinatario cuando llega un mensaje y la sala no está abierta.
New
Chat de soporte cliente-admin
Se agrega el tipo de sala ORDER_ADMIN_CLIENT_SUPPORT: el hilo de soporte entre el
cliente del pedido y el back-office. Usa los mismos endpoints de chat que las demás
salas; solo cambia el type al resolver la sala.
| Método | Endpoint | Rol | Para qué sirve |
|---|---|---|---|
| POST | /orders/{orderId}/chat-rooms |
cliente | Abrir/resolver la sala de soporte del cliente. |
- Request:
typeahora aceptaORDER_CLIENT_DRIVER,ORDER_ADMIN_SUPPORToORDER_ADMIN_CLIENT_SUPPORT. Solo el cliente del pedido puede abrir la salaORDER_ADMIN_CLIENT_SUPPORT. - Disponibilidad: la sala existe mientras el pedido está activo
(
WAITING_FOR_PAYMENT/CONFIRMEDhastaARRIVED).
Lado admin (/admin/order-support):
- El inbox acepta un parámetro
kind(driveroclient; omitirlo incluye ambos). - Cada ítem del inbox expone
kind(driverparaORDER_ADMIN_SUPPORT,clientparaORDER_ADMIN_CLIENT_SUPPORT). - El bus
admin.order-support(eventoorder-support.queue) transporta ambos kinds; cada payload incluyekindpara clasificarlo. Los endpoints porroom_id(show/claim/messages/release/read) funcionan igual para cualquier kind.
Registro de device tokens (push)
Las apps registran el token de push del dispositivo para recibir notificaciones, y
lo dan de baja al cerrar sesión o desinstalar. La entrega usa FCM para ambas
plataformas; en iOS el token es el token de registro FCM del SDK de Firebase, no
un token APNs crudo.
| Método | Endpoint | Rol | Para qué sirve |
|---|---|---|---|
| POST | /device-tokens |
cliente, conductor | Registrar (o refrescar) el token de push del dispositivo. |
| DELETE | /device-tokens |
cliente, conductor | Dar de baja un token de push. |
- Request (
POST):token(string, 1–512, requerido) ·platform(string, requerido, uno deandroid,ios). - Response (
POST):201—{ "device_token": { "id", "platform" } }. Si el token ya existía (incluso bajo otro usuario) se reasigna al usuario actual. - Request (
DELETE):token(string, requerido). Response200—{ "ok": true }, idempotente. - Errores:
422 ValidationErrorsi falta o es inválidotoken/platform.
WebSocket
| Evento | Canal | Rol |
|---|---|---|
chat.message_received_notice |
orders.{id}.client / orders.{id}.driver |
cliente, conductor |
En cada mensaje del chat cliente↔conductor se emite además este aviso liviano al
canal personal del destinatario (el rol opuesto al emisor): orders.{id}.driver
cuando escribe el cliente, orders.{id}.client cuando escribe el conductor. No
transporta el contenido: solo room_id y room_type
({ "room_id": 7, "room_type": "ORDER_CLIENT_DRIVER" }), para mostrar un badge y
abrir la sala a leer.
- Acción: escuchar el evento para avisar de mensajes nuevos con la sala cerrada.
Las salas de soporte (
ORDER_ADMIN_SUPPORT,ORDER_ADMIN_CLIENT_SUPPORT) no lo emiten; el admin se entera poradmin.order-support.