Live Chat do Odoo em aplicativos externos
Suporte conversacional com os dados centralizados no ERP. Como na TechSed conectamos o chat de suporte de qualquer app da empresa com o Odoo, deixando cada conversa vinculada ao seu contato e projeto.
O problema que queríamos resolver
Vários dos nossos aplicativos precisavam de um canal de suporte ao vivo. Um exemplo concreto é o nosso módulo Yurumi, de controle de frota, usado pela equipe de campo para registrar despachos e relatórios diários: quando algo não funciona, eles precisam falar com o suporte sem sair do app.
Não queríamos reinventar um sistema de chat nem somar outra ferramenta externa (tipo Intercom ou Zendesk) que acaba fragmentando os dados dos clientes em silos separados do ERP. O Odoo já tem Live Chat, então a pergunta era: como usá-lo a partir dos nossos apps?
O problema: o widget de Live Chat, incorporado em um app externo, abre sempre como "Visitante" anônimo e não pode ser vinculado a um contato. O operador não sabe quem está do outro lado e a conversa não fica associada a nenhum contato, falta contexto. Queríamos que, quando um usuário já identificado no nosso app inicia uma conversa, ela fique vinculada automaticamente ao seu contato no Odoo — sem pedir que ele faça login de novo e sem quebrar a conversa em andamento.
Por que usar o Live Chat do Odoo (e não outra coisa)
- Já está onde o negócio vive: vendas, projetos, estoque, contatos… está tudo no Odoo. O suporte também deveria estar ali.
- Sem ferramentas nem licenças novas: os operadores atendem pelo Discuss, o mesmo lugar onde já trabalham.
- Incorporável em qualquer app: o widget é inserido com um par de scripts, em um app, um portal web ou um app móvel.
- Dados centralizados: histórico, métricas e contatos ficam dentro do Odoo, e não em um terceiro.
O desafio técnico
Resolver isso teve sua complexidade. Três restrições marcaram o design:
- O widget abre como convidado. Incorporado cross-origin, o único identificador que o
navegador expõe da conversa é um
guest_tokenque o Odoo guarda nolocalStorage. - Os usuários não são usuários do Odoo. Nos nossos apps as pessoas se autenticam com as próprias credenciais (funcionário, magic link). Não dá para usar o login nativo do Odoo.
- Não dá para quebrar a conversa ativa. Uma primeira tentativa "forte" — reatribuir o membro da conversa do convidado para o contato — quebrava a sessão: ao recarregar, o widget perdia a conversa e abria uma nova. Esse foi o grande aprendizado.
A solução: um addon pequeno e genérico
Construímos um módulo do Odoo, livechat_partner_link, cujo único trabalho é
vincular uma conversa em andamento a um contato (um res.partner). É deliberadamente
pequeno e genérico: depende apenas de im_livechat, então pode ser reutilizado em
qualquer app da empresa.
Como uma conversa é vinculada a um contato
O visitante continua conversando na mesma conversa; apenas a identidade do contato é adicionada.
guest.localStorage: o único identificador que o widget expõe.res.partner por e-mail e o cria se não existir.POST /livechat/partner-link com o token e o partner. O módulo associa a conversa.O percurso é simples: o usuário abre o chat, o navegador guarda o guest_token, o
backend do app resolve (ou cria) o contato e chama o endpoint do módulo para associar a
conversa. A partir daí, o operador vê quem é o cliente.
Os aspectos técnicos interessantes
Uma solução não invasiva
A chave do design final: o "membro vivo" da conversa continua sendo o convidado. Nunca o reatribuímos. Assim, tudo o que o widget precisa continua funcionando intacto: a participação no canal, a restauração da sessão ao recarregar, o bus em tempo real e o envio de mensagens.
O contato é adicionado na camada de reporting: aponta-se o histórico do visitante
para o res.partner, renomeia-se o convidado com o nome do contato e expõe-se um botão
"View Contact" no painel do operador. O visitante simplesmente continua conversando,
agora identificado.
A chave O "membro atual" da conversa continua sendo o convidado, assim a sessão do widget não quebra. O contato é adicionado na camada de reporting.
O endpoint
O app, autenticado como um usuário técnico, chama um único endpoint:
{ "guest_token": "42|<token>", "partner_id": 17 }
{ "ok": true, "data": { "linked": true, "thread_id": 42, "...": "..." } }
É idempotente (vincular de novo a mesma conversa não faz nada) e genérico: resolver
ou criar o contato — por exemplo, buscando por e-mail e cadastrando se não existir — é
feito por cada app com a API padrão de res.partner. O módulo não se mete nisso, por isso
serve para qualquer integração.
Casos de uso
- Apps totalmente separados do Odoo: os usuários abrem o suporte pelo app e a equipe de suporte já sabe quem escreve e de qual app.
- Portal de clientes / site: o cliente logado conversa e a conversa fica atada à sua ficha no CRM.
- Apps móveis ou satélites: qualquer app com seus próprios usuários pode oferecer suporte sem duplicar contatos.
- Pós-venda e onboarding: acompanhamento conversacional com o histórico completo do cliente à mão.
A grande vantagem: tudo centralizado no Odoo
Além da comodidade, o verdadeiro valor está na centralização dos dados. Cada app da empresa incorpora o seu próprio canal de suporte, e tudo termina em um só lugar.
Um único Odoo como fonte da verdade
Cada app da empresa incorpora o mesmo canal de suporte; todos os dados ficam centralizados no Odoo.
+ /livechat/partner-link
- Um único contato por pessoa: sem dados duplicados nem dessincronizados entre aplicativos.
- Conversas e histórico em um só lugar: a equipe de suporte trabalha pelo Discuss, com o contexto completo do CRM (vendas, projetos, tickets).
- Reporting e rastreabilidade: métricas de suporte e acompanhamento por cliente, nativos do Odoo.
- Menos custos e menos integrações frágeis: nada de licenças de terceiros nem sincronizações que quebram.
Perguntas frequentes
Dá para usar o Live Chat do Odoo dentro de um aplicativo externo?
Sim. O widget de Live Chat do Odoo pode ser incorporado em qualquer aplicativo, mesmo
cross-origin. Por padrão ele abre como visitante anônimo; com o módulo
livechat_partner_link a conversa fica vinculada automaticamente ao contato
(res.partner) do usuário já identificado no app.
Como uma conversa de Live Chat é vinculada a um contato do Odoo?
O aplicativo, autenticado como usuário técnico, chama um único endpoint idempotente
(POST /livechat/partner-link) com o guest_token da conversa. O módulo aponta o
histórico do visitante para o res.partner, renomeia o convidado com o nome do contato e
expõe um botão View Contact no painel do operador.
É preciso uma ferramenta externa como Intercom ou Zendesk?
Não. O Odoo já inclui Live Chat, então o suporte conversacional vive dentro do mesmo ERP onde estão vendas, projetos, inventário e contatos, sem fragmentar os dados dos clientes em silos separados.
O módulo quebra a sessão do widget ao vincular o contato?
Não. É uma solução não invasiva: o “membro vivo” da conversa continua sendo o convidado, então a participação no canal, a restauração da sessão ao recarregar e o bus em tempo real continuam funcionando. O contato é adicionado apenas na camada de reporting.
Conclusão
Com um addon pequeno, genérico e não invasivo, qualquer aplicação da empresa pode oferecer suporte ao vivo usando o Live Chat do Odoo, deixando cada conversa atada ao seu contato. Reutilizável, sem ferramentas externas e com todos os dados onde devem estar: dentro do Odoo.
Tem um desafio parecido com o Odoo?
Na TechSed trabalhamos com Odoo todos os dias. Este módulo nasceu de uma necessidade concreta de um projeto e o deixamos genérico para reutilizá-lo; acontece com frequência de um requisito pontual, bem resolvido, acabar virando uma peça sólida e reutilizável.
Se você está pensando em algo assim — conectar o Odoo com uma aplicação própria, automatizar um processo ou uma customização sob medida — escreva para nós e vamos ver isso juntos. Preferimos entender bem o problema antes de propor: muitas vezes a melhor solução é a mais simples e, às vezes, o mais honesto é recomendar não desenvolver nada.
Vamos conversar? Escreva para [email protected] e conte o que você precisa.
