Saltar al contenido principal

Live Chat de Odoo en aplicaciones externas

· 8 min de lectura
Nacho Althabe
Tech Team

Soporte conversacional con los datos centralizados en el ERP. Cómo en TechSed conectamos el chat de soporte de cualquier app de la empresa con Odoo, dejando cada conversación vinculada a su contacto y proyecto.

El problema que queríamos resolver

Varias de nuestras aplicaciones necesitaban un canal de soporte en vivo. Un ejemplo concreto es nuestro modulo Yurumi, para control de flota, que usa el personal de campo para registrar despachos y partes diarios: cuando algo no funciona, necesitan poder escribirle a soporte sin salir de la app.

No queríamos reinventar un sistema de chat ni sumar otra herramienta externa (tipo Intercom o Zendesk) que termine fragmentando los datos de los clientes en silos separados del ERP. Odoo ya tiene Live Chat, así que la pregunta era: ¿cómo lo usamos desde nuestras apps?

El problema: el widget de Live Chat, embebido en una app externa, abre siempre como “Visitante” anónimo y no se puede vincular con un contacto. El operador no sabe quién está del otro lado y la conversación no queda asociada a ningún contacto, falta contexto. Queríamos que, cuando un usuario ya identificado en nuestra app inicia una charla, esa conversación quede vinculada automáticamente a su contacto en Odoo — sin pedirle que se loguee de nuevo y sin romper la charla en curso.

Por qué usar el Live Chat de Odoo (y no otra cosa)

  • Ya está donde vive el negocio: ventas, proyectos, inventario, contactos… todo está en Odoo. El soporte también debería estar ahí.
  • Sin herramientas ni licencias nuevas: los operadores atienden desde Discuss, el mismo lugar donde ya trabajan.
  • Embebible en cualquier app: el widget se inserta con un par de scripts, en un app, un portal web o una app móvil.
  • Datos centralizados: historial, métricas y contactos quedan dentro de Odoo, no en un tercero.

El desafío técnico

Resolverlo tuvo su complejidad. Tres restricciones marcaron el diseño:

  • El widget abre como invitado. Embebido cross-origin, el único identificador que el navegador expone de la charla es un guest_token que Odoo guarda en localStorage.
  • Los usuarios no son usuarios de Odoo. En nuestras apps la gente se autentica con sus credenciales propias (empleado, magic link). No se puede usar el login nativo de Odoo.
  • No se puede romper la charla viva. Un primer intento “fuerte” —reasignar el miembro de la conversación del invitado al contacto— rompía la sesión: al recargar, el widget perdía la charla y abría una nueva. Ese fue el gran aprendizaje.

La solución: un addon chico y genérico

Construimos un módulo de Odoo, livechat_partner_link, cuyo único trabajo es vincular una charla en curso a un contacto (un res.partner). Es deliberadamente pequeño y genérico: depende solo de im_livechat, así que se puede reutilizar en cualquier app de la empresa.

Cómo se vincula una conversación a un contacto

El visitante sigue chateando en la misma charla; solo se le agrega la identidad del contacto.

Cliente (navegador)
Servidor de la app
Odoo
1
Widget embebido
El usuario abre el live chat de Odoo en la app. La charla arranca anónima guest.
2
guest_token
El navegador lo guarda en localStorage: el único identificador que expone el widget.
3
Resolver contacto
El backend (usuario técnico) busca el res.partner por email y lo crea si no existe.
4
Vincular
POST /livechat/partner-link con el token y el partner. El módulo asocia la charla.
5
Operador
En Odoo el operador ve el contacto y el botón “View Contact”, y queda en el reporting.
Clave: el “miembro vivo” de la charla sigue siendo el invitado, así la sesión del widget no se rompe. El contacto se agrega en la capa de reporting.
Flujo de punta a punta: del widget anónimo al contacto identificado en Odoo.

El recorrido es simple: el usuario abre el chat, el navegador guarda el guest_token, el backend de la app resuelve (o crea) el contacto y llama al endpoint del módulo para asociar la charla. A partir de ahí, el operador ve quién es el cliente.

Los aspectos técnicos interesantes

Una solución no invasiva

La clave del diseño final: el “miembro vivo” de la charla sigue siendo el invitado. Nunca lo reasignamos. Así, todo lo que el widget necesita sigue funcionando intacto: la membresía del canal, la restauración de la sesión al recargar, el bus en tiempo real y el envío de mensajes.

El contacto se agrega en la capa de reporting: se apunta el historial del visitante al res.partner, se renombra al invitado con el nombre del contacto y se expone un botón “View Contact” en el panel del operador. El visitante simplemente sigue chateando, ahora identificado.

tip

La clave El “miembro actual” de la charla sigue siendo el invitado, así la sesión del widget no se rompe. El contacto se agrega en la capa de reporting.

El endpoint

La app, autenticada como un usuario técnico, llama a un único endpoint:

POST /livechat/partner-link
{ "guest_token": "42|<token>", "partner_id": 17 }
Respuesta
{ "ok": true, "data": { "linked": true, "thread_id": 42, "...": "..." } }

Es idempotente (volver a vincular la misma charla no hace nada) y genérico: resolver o crear el contacto —por ejemplo, buscándolo por email y dándolo de alta si no existe— lo hace cada app con la API estándar de res.partner. El módulo no se mete en eso, por eso sirve para cualquier integración.

Casos de uso

  • Apps totalmente separadas de Odoo: Los usuarios abre soporte desde la app y el equipo de soporte ya sabe quién escribe y desde qué app.
  • Portal de clientes / sitio web: el cliente logueado chatea y la conversación queda atada a su ficha del CRM.
  • Apps móviles o satélites: cualquier app con sus propios usuarios puede ofrecer soporte sin duplicar contactos.
  • Post-venta y onboarding: seguimiento conversacional con el historial completo del cliente a mano.

La gran ventaja: todo centralizado en Odoo

Más allá de la comodidad, el verdadero valor está en la centralización de datos. Cada app de la empresa embebe su propio canal de soporte, y todo termina en un solo lugar.

Un solo Odoo como fuente de verdad

Cada app de la empresa embebe el mismo canal de soporte; todo el dato queda centralizado en Odoo.

PWA de Operaciones
Empleados (badge / magic link)
Portal / Sitio Web
Clientes finales
Otra app de la empresa
Mobile, ERP satélite, etc.
mismo widget
+ /livechat/partner-link
mismo widget + /livechat/partner-link
Odoo
Fuente única de verdad
Contactos (res.partner)
Un único contacto por persona, sin duplicar datos por app.
Conversaciones de Live Chat
Cada charla ligada a su contacto, atendida desde Discuss.
Reporting e historial
Métricas de soporte y trazabilidad por cliente, en un solo lugar.
Múltiples apps, una sola fuente de verdad: contactos, conversaciones y reporting en Odoo.
  • Un solo contacto por persona: sin datos duplicados ni desincronizados entre aplicaciones.
  • Conversaciones e historial en un solo lugar: el equipo de soporte trabaja desde Discuss, con el contexto completo del CRM (ventas, proyectos, tickets).
  • Reporting y trazabilidad: métricas de soporte y seguimiento por cliente, nativos de Odoo.
  • Menos costos y menos integraciones frágiles: nada de licencias de terceros ni sincronizaciones que se rompen.

Preguntas frecuentes

¿Se puede usar el Live Chat de Odoo dentro de una aplicación externa?

Sí. El widget de Live Chat de Odoo se puede embeber en cualquier aplicación, incluso cross-origin. Por defecto abre como visitante anónimo; con el módulo livechat_partner_link la conversación queda vinculada automáticamente al contacto (res.partner) del usuario ya identificado en la app.

¿Cómo se vincula una conversación de Live Chat con un contacto de Odoo?

La aplicación, autenticada como usuario técnico, llama a un único endpoint idempotente (POST /livechat/partner-link) con el guest_token de la charla. El módulo apunta el historial del visitante al res.partner, renombra al invitado con el nombre del contacto y expone un botón View Contact en el panel del operador.

¿Hace falta una herramienta externa como Intercom o Zendesk?

No. Odoo ya incluye Live Chat, así que el soporte conversacional vive dentro del mismo ERP donde están ventas, proyectos, inventario y contactos, sin fragmentar los datos de los clientes en silos separados.

¿El módulo rompe la sesión del widget al vincular el contacto?

No. Es una solución no invasiva: el “miembro vivo” de la charla sigue siendo el invitado, así que la membresía del canal, la restauración de sesión al recargar y el bus en tiempo real siguen funcionando. El contacto se agrega solo en la capa de reporting.

Conclusión

Con un addon chico, genérico y no invasivo, cualquier aplicación de la empresa puede ofrecer soporte en vivo usando el Live Chat de Odoo, dejando cada conversación atada a su contacto. Reutilizable, sin herramientas externas y con todos los datos donde tienen que estar: dentro de Odoo.

¿Tenés un desafío parecido con Odoo?

En TechSed trabajamos con Odoo todos los días. Este módulo nació de una necesidad concreta de un proyecto y lo dejamos genérico como para reutilizarlo; nos pasa seguido que un requerimiento puntual, bien resuelto, termina siendo una pieza sólida y reutilizable.

Si estás pensando en algo así —conectar Odoo con una aplicación propia, automatizar un proceso o una customización a medida— escribínos y lo vemos juntos. Preferimos entender bien el problema antes de proponer: muchas veces la mejor solución es la más simple y, a veces, lo más honesto es recomendar no desarrollar nada.

¿Charlamos? Escribinos a [email protected] y contanos qué necesitás.