<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.tech-sed.com/pt-BR/</id>
    <title>Tech-Sed Blog</title>
    <updated>2026-06-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://blog.tech-sed.com/pt-BR/"/>
    <subtitle>El blog de Tech-Sed</subtitle>
    <icon>https://blog.tech-sed.com/pt-BR/img/favicon.ico</icon>
    <rights>Copyright © 2026 Tech-Sed.</rights>
    <entry>
        <title type="html"><![CDATA[Live Chat do Odoo em aplicativos externos]]></title>
        <id>https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas</id>
        <link href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas"/>
        <updated>2026-06-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Como conectamos o chat de suporte de qualquer app da empresa com o Odoo, deixando cada conversa vinculada ao seu contato.]]></summary>
        <content type="html"><![CDATA[<p><strong>Suporte conversacional com os dados centralizados no ERP.</strong> 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.</p>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-problema-que-queríamos-resolver">O problema que queríamos resolver<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#o-problema-que-quer%C3%ADamos-resolver" class="hash-link" aria-label="Link direto para O problema que queríamos resolver" title="Link direto para O problema que queríamos resolver" translate="no">​</a></h2>
<p>Vários dos nossos aplicativos precisavam de um canal de <strong>suporte ao vivo</strong>. Um exemplo
concreto é o nosso <strong>módulo Yurumi, de controle de frota</strong>, 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.</p>
<p>Não queríamos reinventar um sistema de chat nem somar <strong>outra ferramenta externa</strong> (tipo
Intercom ou Zendesk) que acaba fragmentando os dados dos clientes em silos separados do
ERP. O Odoo <strong>já tem Live Chat</strong>, então a pergunta era: como usá-lo a partir dos nossos
apps?</p>
<p>O problema: o widget de Live Chat, incorporado em um app externo, <strong>abre sempre como
"Visitante" anônimo e não pode ser vinculado a um contato</strong>. 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 <strong>já identificado no nosso app</strong> inicia uma conversa,
ela fique <strong>vinculada automaticamente ao seu contato</strong> no Odoo — sem pedir que ele faça
login de novo e sem quebrar a conversa em andamento.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-que-usar-o-live-chat-do-odoo-e-não-outra-coisa">Por que usar o Live Chat do Odoo (e não outra coisa)<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#por-que-usar-o-live-chat-do-odoo-e-n%C3%A3o-outra-coisa" class="hash-link" aria-label="Link direto para Por que usar o Live Chat do Odoo (e não outra coisa)" title="Link direto para Por que usar o Live Chat do Odoo (e não outra coisa)" translate="no">​</a></h2>
<ul>
<li class=""><strong>Já está onde o negócio vive:</strong> vendas, projetos, estoque, contatos… está tudo no
Odoo. O suporte também deveria estar ali.</li>
<li class=""><strong>Sem ferramentas nem licenças novas:</strong> os operadores atendem pelo Discuss, o mesmo
lugar onde já trabalham.</li>
<li class=""><strong>Incorporável em qualquer app:</strong> o widget é inserido com um par de scripts, em um app,
um portal web ou um app móvel.</li>
<li class=""><strong>Dados centralizados:</strong> histórico, métricas e contatos ficam dentro do Odoo, e não em
um terceiro.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-desafio-técnico">O desafio técnico<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#o-desafio-t%C3%A9cnico" class="hash-link" aria-label="Link direto para O desafio técnico" title="Link direto para O desafio técnico" translate="no">​</a></h2>
<p>Resolver isso teve sua complexidade. Três restrições marcaram o design:</p>
<ul>
<li class=""><strong>O widget abre como convidado.</strong> Incorporado cross-origin, o único identificador que o
navegador expõe da conversa é um <code>guest_token</code> que o Odoo guarda no <code>localStorage</code>.</li>
<li class=""><strong>Os usuários não são usuários do Odoo.</strong> 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.</li>
<li class=""><strong>Não dá para quebrar a conversa ativa.</strong> 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.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-solução-um-addon-pequeno-e-genérico">A solução: um addon pequeno e genérico<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#a-solu%C3%A7%C3%A3o-um-addon-pequeno-e-gen%C3%A9rico" class="hash-link" aria-label="Link direto para A solução: um addon pequeno e genérico" title="Link direto para A solução: um addon pequeno e genérico" translate="no">​</a></h2>
<p>Construímos um módulo do Odoo, <strong><code>livechat_partner_link</code></strong>, cujo único trabalho é
<strong>vincular uma conversa em andamento a um contato</strong> (um <code>res.partner</code>). É deliberadamente
pequeno e genérico: depende apenas de <code>im_livechat</code>, então pode ser reutilizado em
qualquer app da empresa.</p>
<figure class="lcd-fig"><style>.lcd-fig{font-family:var(--ifm-font-family-base,"IBM Plex Sans",system-ui,sans-serif);margin:2rem 0;container-type:inline-size}.lcd-card{box-sizing:border-box;background:#fff;border:1px solid #e6e9ef;border-radius:24px;padding:40px 40px 36px;box-shadow:0 1px 2px #0f172a0a,0 20px 48px -32px #0f172a47}.lcd-cap{text-align:center;color:#64748b;margin:.7rem 0 0;font-size:.9rem;font-style:italic}.lcd-title{color:#0f172a;letter-spacing:-.02em;margin:0;font-size:1.85rem;font-weight:700;line-height:1.12}.lcd-sub{color:#64748b;margin:.4rem 0 0;font-size:1.1rem;line-height:1.4}.lcd-mono{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,monospace}.lcd-chip{border-radius:5px;padding:1px 6px;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.82em}.lcd-legend{flex-wrap:wrap;gap:10px 24px;margin-top:18px;display:flex}.lcd-legend span.dot{border-radius:3px;width:12px;height:12px;display:inline-block}.lcd-legend>div{color:#475569;align-items:center;gap:8px;font-size:.92rem;font-weight:500;display:flex}.lcd-steps{align-items:stretch;gap:0;margin-top:28px;display:flex}.lcd-step{border-radius:18px;flex-direction:column;flex:1;display:flex;overflow:hidden}.lcd-step .bar{height:6px}.lcd-step .pad{flex-direction:column;gap:13px;padding:22px 20px 24px;display:flex}.lcd-step .head{align-items:center;gap:12px;display:flex}.lcd-badge{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:19px;font-weight:700;display:flex}.lcd-step .st{color:#0f172a;font-size:1.12rem;font-weight:700;line-height:1.15}.lcd-step .tx{color:#475569;font-size:.95rem;line-height:1.55}.lcd-arrow{color:#cbd5e1;flex:0 0 40px;justify-content:center;align-items:center;display:flex}.lcd-arrow.down{display:none}.lcd-key{background:#f6fdf9;border:1px solid #c9efd7;border-radius:16px;align-items:center;gap:15px;margin-top:28px;padding:18px 22px;display:flex}.lcd-key .ic{background:#16a34a;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;display:flex}.lcd-key .tx{color:#14532d;font-size:1rem;line-height:1.5}.lcd-central{align-items:center;gap:0;margin-top:30px;display:flex}.lcd-apps{flex-direction:column;flex:0 0 360px;gap:22px;display:flex}.lcd-app{box-sizing:border-box;border-radius:16px;flex-direction:column;justify-content:center;gap:6px;min-height:104px;padding:18px 22px;display:flex}.lcd-app .nm{color:#0f172a;font-size:1.18rem;font-weight:700}.lcd-app .sm{color:#64748b;font-size:.95rem}.lcd-mid{flex:0 0 220px;height:356px;position:relative}.lcd-mid svg{position:absolute;inset:0}.lcd-mid .lbl{white-space:nowrap;position:absolute;top:118px;left:50%;transform:translate(-50%)}.lcd-mid .lbl span{color:#475569;text-align:center;background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:6px 12px;font-family:IBM Plex Mono,monospace;font-size:.82rem;font-weight:500;line-height:1.5;display:inline-block}.lcd-mid-mobile{display:none}.lcd-odoo{box-sizing:border-box;background:#f8fafc;border:1.5px solid #1e293b;border-radius:20px;flex-direction:column;flex:auto;gap:16px;min-width:0;padding:24px 26px;display:flex}.lcd-odoo .oh{align-items:center;gap:12px;display:flex}.lcd-odoo .oh .tab{background:#7c3aed;border-radius:4px;width:11px;height:32px}.lcd-odoo .oh .nm{color:#0f172a;font-size:1.4rem;font-weight:700;line-height:1.1}.lcd-odoo .oh .sm{color:#64748b;font-size:.92rem}.lcd-sub-card{background:#fff;border:1px solid #e2e8f0;border-radius:13px;flex-direction:column;gap:4px;padding:14px 18px;display:flex}.lcd-sub-card .t{color:#0f172a;font-size:1.05rem;font-weight:600}.lcd-sub-card .d{color:#64748b;font-size:.92rem}@container (width<=860px){.lcd-card{border-radius:18px;padding:26px 20px 24px}.lcd-title{font-size:1.5rem}.lcd-sub{font-size:1rem}.lcd-steps{flex-direction:column}.lcd-step{flex:none}.lcd-arrow{flex:none;height:34px;transform:rotate(90deg)}.lcd-central{flex-direction:column;align-items:stretch}.lcd-apps{flex:none}.lcd-mid{display:none}.lcd-mid-mobile{color:#94a3b8;flex-direction:column;align-items:center;gap:8px;padding:8px 0 4px;display:flex}.lcd-mid-mobile .lbl{color:#475569;text-align:center;background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:6px 12px;font-family:IBM Plex Mono,monospace;font-size:.8rem;line-height:1.5}}</style><div class="lcd-card"><h3 class="lcd-title">Como uma conversa é vinculada a um contato</h3><p class="lcd-sub">O visitante continua conversando na mesma conversa; apenas a identidade do contato é adicionada.</p><div class="lcd-legend"><div><span class="dot" style="background:#16a34a"></span>Cliente (navegador)</div><div><span class="dot" style="background:#2563eb"></span>Servidor do app</div><div><span class="dot" style="background:#7c3aed"></span>Odoo</div></div><div class="lcd-steps"><div class="lcd-step" style="background:#f6fdf9;border:1px solid #c9efd7"><div class="bar" style="background:#16a34a"></div><div class="pad"><div class="head"><div class="lcd-badge" style="background:#16a34a;box-shadow:0 4px 10px -2px rgba(22,163,74,.5)">1</div><div class="st">Widget incorporado</div></div><div class="tx">O usuário abre o live chat do Odoo no app. A conversa começa anônima <code class="lcd-chip" style="color:#15803d;background:#e7f8ee">guest</code>.</div></div></div><div class="lcd-arrow"><svg width="30" height="20" viewBox="0 0 32 22" fill="none" aria-hidden="true"><path d="M2 11h25M21 4l8 7-8 7" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="lcd-step" style="background:#f6fdf9;border:1px solid #c9efd7"><div class="bar" style="background:#16a34a"></div><div class="pad"><div class="head"><div class="lcd-badge" style="background:#16a34a;box-shadow:0 4px 10px -2px rgba(22,163,74,.5)">2</div><div class="st lcd-mono" style="font-size:1.02rem;font-weight:600">guest_token</div></div><div class="tx">O navegador o guarda no <code class="lcd-chip" style="color:#15803d;background:#e7f8ee">localStorage</code>: o único identificador que o widget expõe.</div></div></div><div class="lcd-arrow"><svg width="30" height="20" viewBox="0 0 32 22" fill="none" aria-hidden="true"><path d="M2 11h25M21 4l8 7-8 7" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="lcd-step" style="background:#f4f8ff;border:1px solid #c7dcfb"><div class="bar" style="background:#2563eb"></div><div class="pad"><div class="head"><div class="lcd-badge" style="background:#2563eb;box-shadow:0 4px 10px -2px rgba(37,99,235,.5)">3</div><div class="st">Resolver contato</div></div><div class="tx">O backend (usuário técnico) busca o <code class="lcd-chip" style="color:#1d4ed8;background:#e6effd">res.partner</code> por e-mail e o cria se não existir.</div></div></div><div class="lcd-arrow"><svg width="30" height="20" viewBox="0 0 32 22" fill="none" aria-hidden="true"><path d="M2 11h25M21 4l8 7-8 7" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="lcd-step" style="background:#f4f8ff;border:1px solid #c7dcfb"><div class="bar" style="background:#2563eb"></div><div class="pad"><div class="head"><div class="lcd-badge" style="background:#2563eb;box-shadow:0 4px 10px -2px rgba(37,99,235,.5)">4</div><div class="st">Vincular</div></div><div class="tx"><code class="lcd-chip" style="color:#1d4ed8;background:#e6effd">POST /livechat/partner-link</code> com o token e o partner. O módulo associa a conversa.</div></div></div><div class="lcd-arrow"><svg width="30" height="20" viewBox="0 0 32 22" fill="none" aria-hidden="true"><path d="M2 11h25M21 4l8 7-8 7" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="lcd-step" style="background:#faf6ff;border:1px solid #e0caf9"><div class="bar" style="background:#7c3aed"></div><div class="pad"><div class="head"><div class="lcd-badge" style="background:#7c3aed;box-shadow:0 4px 10px -2px rgba(124,58,237,.5)">5</div><div class="st">Operador</div></div><div class="tx">No Odoo o operador vê o contato e o botão <strong style="color:#6d28d9;font-weight:600">“View Contact”</strong>, e fica no reporting.</div></div></div></div><div class="lcd-key"><div class="ic"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M5 13l4 4L19 7" stroke="#fff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="tx"><strong style="font-weight:700">Chave:</strong> o “membro vivo” da conversa continua sendo o convidado, assim a sessão do widget não quebra. O contato é adicionado na camada de <strong style="font-weight:600">reporting</strong>.</div></div></div><figcaption class="lcd-cap">Fluxo de ponta a ponta: do widget anônimo ao contato identificado no Odoo.</figcaption></figure>
<p>O percurso é simples: o usuário abre o chat, o navegador guarda o <code>guest_token</code>, 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.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="os-aspectos-técnicos-interessantes">Os aspectos técnicos interessantes<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#os-aspectos-t%C3%A9cnicos-interessantes" class="hash-link" aria-label="Link direto para Os aspectos técnicos interessantes" title="Link direto para Os aspectos técnicos interessantes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="uma-solução-não-invasiva">Uma solução não invasiva<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#uma-solu%C3%A7%C3%A3o-n%C3%A3o-invasiva" class="hash-link" aria-label="Link direto para Uma solução não invasiva" title="Link direto para Uma solução não invasiva" translate="no">​</a></h3>
<p>A chave do design final: <strong>o "membro vivo" da conversa continua sendo o convidado</strong>.
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.</p>
<p>O contato é adicionado na <strong>camada de reporting</strong>: aponta-se o histórico do visitante
para o <code>res.partner</code>, renomeia-se o convidado com o nome do contato e expõe-se um botão
<strong>"View Contact"</strong> no painel do operador. O visitante simplesmente continua conversando,
agora identificado.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>dica</div><div class="admonitionContent_BuS1"><p><strong>A chave</strong>
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.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-endpoint">O endpoint<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#o-endpoint" class="hash-link" aria-label="Link direto para O endpoint" title="Link direto para O endpoint" translate="no">​</a></h3>
<p>O app, autenticado como um <strong>usuário técnico</strong>, chama um único endpoint:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">POST /livechat/partner-link</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"guest_token"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"42|&lt;token&gt;"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"partner_id"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">17</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">Resposta</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"ok"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"data"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"linked"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"thread_id"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">42</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"..."</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"..."</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>É <strong>idempotente</strong> (vincular de novo a mesma conversa não faz nada) e genérico: <strong>resolver
ou criar o contato</strong> — por exemplo, buscando por e-mail e cadastrando se não existir — é
feito por cada app com a API padrão de <code>res.partner</code>. O módulo não se mete nisso, por isso
serve para qualquer integração.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="casos-de-uso">Casos de uso<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#casos-de-uso" class="hash-link" aria-label="Link direto para Casos de uso" title="Link direto para Casos de uso" translate="no">​</a></h2>
<ul>
<li class=""><strong>Apps totalmente separados do Odoo:</strong> os usuários abrem o suporte pelo app e a equipe
de suporte já sabe quem escreve e de qual app.</li>
<li class=""><strong>Portal de clientes / site:</strong> o cliente logado conversa e a conversa fica atada à sua
ficha no CRM.</li>
<li class=""><strong>Apps móveis ou satélites:</strong> qualquer app com seus próprios usuários pode oferecer
suporte sem duplicar contatos.</li>
<li class=""><strong>Pós-venda e onboarding:</strong> acompanhamento conversacional com o histórico completo do
cliente à mão.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-grande-vantagem-tudo-centralizado-no-odoo">A grande vantagem: tudo centralizado no Odoo<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#a-grande-vantagem-tudo-centralizado-no-odoo" class="hash-link" aria-label="Link direto para A grande vantagem: tudo centralizado no Odoo" title="Link direto para A grande vantagem: tudo centralizado no Odoo" translate="no">​</a></h2>
<p>Além da comodidade, o verdadeiro valor está na <strong>centralização dos dados</strong>. Cada app da
empresa incorpora o seu próprio canal de suporte, e tudo termina em um só lugar.</p>
<figure class="lcd-fig"><style>.lcd-fig{font-family:var(--ifm-font-family-base,"IBM Plex Sans",system-ui,sans-serif);margin:2rem 0;container-type:inline-size}.lcd-card{box-sizing:border-box;background:#fff;border:1px solid #e6e9ef;border-radius:24px;padding:40px 40px 36px;box-shadow:0 1px 2px #0f172a0a,0 20px 48px -32px #0f172a47}.lcd-cap{text-align:center;color:#64748b;margin:.7rem 0 0;font-size:.9rem;font-style:italic}.lcd-title{color:#0f172a;letter-spacing:-.02em;margin:0;font-size:1.85rem;font-weight:700;line-height:1.12}.lcd-sub{color:#64748b;margin:.4rem 0 0;font-size:1.1rem;line-height:1.4}.lcd-mono{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,monospace}.lcd-chip{border-radius:5px;padding:1px 6px;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.82em}.lcd-legend{flex-wrap:wrap;gap:10px 24px;margin-top:18px;display:flex}.lcd-legend span.dot{border-radius:3px;width:12px;height:12px;display:inline-block}.lcd-legend>div{color:#475569;align-items:center;gap:8px;font-size:.92rem;font-weight:500;display:flex}.lcd-steps{align-items:stretch;gap:0;margin-top:28px;display:flex}.lcd-step{border-radius:18px;flex-direction:column;flex:1;display:flex;overflow:hidden}.lcd-step .bar{height:6px}.lcd-step .pad{flex-direction:column;gap:13px;padding:22px 20px 24px;display:flex}.lcd-step .head{align-items:center;gap:12px;display:flex}.lcd-badge{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:19px;font-weight:700;display:flex}.lcd-step .st{color:#0f172a;font-size:1.12rem;font-weight:700;line-height:1.15}.lcd-step .tx{color:#475569;font-size:.95rem;line-height:1.55}.lcd-arrow{color:#cbd5e1;flex:0 0 40px;justify-content:center;align-items:center;display:flex}.lcd-arrow.down{display:none}.lcd-key{background:#f6fdf9;border:1px solid #c9efd7;border-radius:16px;align-items:center;gap:15px;margin-top:28px;padding:18px 22px;display:flex}.lcd-key .ic{background:#16a34a;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;display:flex}.lcd-key .tx{color:#14532d;font-size:1rem;line-height:1.5}.lcd-central{align-items:center;gap:0;margin-top:30px;display:flex}.lcd-apps{flex-direction:column;flex:0 0 360px;gap:22px;display:flex}.lcd-app{box-sizing:border-box;border-radius:16px;flex-direction:column;justify-content:center;gap:6px;min-height:104px;padding:18px 22px;display:flex}.lcd-app .nm{color:#0f172a;font-size:1.18rem;font-weight:700}.lcd-app .sm{color:#64748b;font-size:.95rem}.lcd-mid{flex:0 0 220px;height:356px;position:relative}.lcd-mid svg{position:absolute;inset:0}.lcd-mid .lbl{white-space:nowrap;position:absolute;top:118px;left:50%;transform:translate(-50%)}.lcd-mid .lbl span{color:#475569;text-align:center;background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:6px 12px;font-family:IBM Plex Mono,monospace;font-size:.82rem;font-weight:500;line-height:1.5;display:inline-block}.lcd-mid-mobile{display:none}.lcd-odoo{box-sizing:border-box;background:#f8fafc;border:1.5px solid #1e293b;border-radius:20px;flex-direction:column;flex:auto;gap:16px;min-width:0;padding:24px 26px;display:flex}.lcd-odoo .oh{align-items:center;gap:12px;display:flex}.lcd-odoo .oh .tab{background:#7c3aed;border-radius:4px;width:11px;height:32px}.lcd-odoo .oh .nm{color:#0f172a;font-size:1.4rem;font-weight:700;line-height:1.1}.lcd-odoo .oh .sm{color:#64748b;font-size:.92rem}.lcd-sub-card{background:#fff;border:1px solid #e2e8f0;border-radius:13px;flex-direction:column;gap:4px;padding:14px 18px;display:flex}.lcd-sub-card .t{color:#0f172a;font-size:1.05rem;font-weight:600}.lcd-sub-card .d{color:#64748b;font-size:.92rem}@container (width<=860px){.lcd-card{border-radius:18px;padding:26px 20px 24px}.lcd-title{font-size:1.5rem}.lcd-sub{font-size:1rem}.lcd-steps{flex-direction:column}.lcd-step{flex:none}.lcd-arrow{flex:none;height:34px;transform:rotate(90deg)}.lcd-central{flex-direction:column;align-items:stretch}.lcd-apps{flex:none}.lcd-mid{display:none}.lcd-mid-mobile{color:#94a3b8;flex-direction:column;align-items:center;gap:8px;padding:8px 0 4px;display:flex}.lcd-mid-mobile .lbl{color:#475569;text-align:center;background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:6px 12px;font-family:IBM Plex Mono,monospace;font-size:.8rem;line-height:1.5}}</style><div class="lcd-card"><h3 class="lcd-title">Um único Odoo como fonte da verdade</h3><p class="lcd-sub">Cada app da empresa incorpora o mesmo canal de suporte; todos os dados ficam centralizados no Odoo.</p><div class="lcd-central"><div class="lcd-apps"><div class="lcd-app" style="background:#f6fdf9;border:1.5px solid #16a34a"><div class="nm">PWA de Operações</div><div class="sm">Funcionários (crachá / magic link)</div></div><div class="lcd-app" style="background:#f4f8ff;border:1.5px solid #2563eb"><div class="nm">Portal / Site</div><div class="sm">Clientes finais</div></div><div class="lcd-app" style="background:#faf6ff;border:1.5px solid #7c3aed"><div class="nm">Outro app da empresa</div><div class="sm">Mobile, ERP satélite, etc.</div></div></div><div class="lcd-mid"><svg width="220" height="356" viewBox="0 0 220 356" fill="none" aria-hidden="true"><defs><marker id="lcdah" markerWidth="9" markerHeight="9" refX="6.5" refY="4.5" orient="auto"><path d="M1 1L7 4.5L1 8" stroke="#94a3b8" stroke-width="1.7" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></marker></defs><path d="M0 52 C110 52, 130 178, 214 178" stroke="#94a3b8" stroke-width="3" fill="none" marker-end="url(#lcdah)"></path><path d="M0 178 L214 178" stroke="#94a3b8" stroke-width="3" fill="none" marker-end="url(#lcdah)"></path><path d="M0 304 C110 304, 130 178, 214 178" stroke="#94a3b8" stroke-width="3" fill="none" marker-end="url(#lcdah)"></path><circle cx="0" cy="52" r="4" fill="#94a3b8"></circle><circle cx="0" cy="178" r="4" fill="#94a3b8"></circle><circle cx="0" cy="304" r="4" fill="#94a3b8"></circle></svg><div class="lbl"><span>mesmo widget<br>+ /livechat/partner-link</span></div></div><div class="lcd-mid-mobile"><div class="lbl">mesmo widget + /livechat/partner-link</div><svg width="22" height="30" viewBox="0 0 22 30" fill="none" aria-hidden="true"><path d="M11 2v23M4 19l7 7 7-7" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="lcd-odoo"><div class="oh"><div class="tab"></div><div><div class="nm">Odoo</div><div class="sm">Fonte única da verdade</div></div></div><div class="lcd-sub-card"><div class="t">Contatos <span class="lcd-mono" style="font-size:.82em;font-weight:500;color:#7c3aed">(res.partner)</span></div><div class="d">Um único contato por pessoa, sem duplicar dados por app.</div></div><div class="lcd-sub-card"><div class="t">Conversas de Live Chat</div><div class="d">Cada conversa ligada ao seu contato, atendida pelo Discuss.</div></div><div class="lcd-sub-card"><div class="t">Reporting e histórico</div><div class="d">Métricas de suporte e rastreabilidade por cliente, em um só lugar.</div></div></div></div></div><figcaption class="lcd-cap">Vários apps, uma única fonte da verdade: contatos, conversas e reporting no Odoo.</figcaption></figure>
<ul>
<li class=""><strong>Um único contato por pessoa:</strong> sem dados duplicados nem dessincronizados entre
aplicativos.</li>
<li class=""><strong>Conversas e histórico em um só lugar:</strong> a equipe de suporte trabalha pelo Discuss, com
o contexto completo do CRM (vendas, projetos, tickets).</li>
<li class=""><strong>Reporting e rastreabilidade:</strong> métricas de suporte e acompanhamento por cliente,
nativos do Odoo.</li>
<li class=""><strong>Menos custos e menos integrações frágeis:</strong> nada de licenças de terceiros nem
sincronizações que quebram.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="perguntas-frequentes">Perguntas frequentes<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#perguntas-frequentes" class="hash-link" aria-label="Link direto para Perguntas frequentes" title="Link direto para Perguntas frequentes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dá-para-usar-o-live-chat-do-odoo-dentro-de-um-aplicativo-externo">Dá para usar o Live Chat do Odoo dentro de um aplicativo externo?<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#d%C3%A1-para-usar-o-live-chat-do-odoo-dentro-de-um-aplicativo-externo" class="hash-link" aria-label="Link direto para Dá para usar o Live Chat do Odoo dentro de um aplicativo externo?" title="Link direto para Dá para usar o Live Chat do Odoo dentro de um aplicativo externo?" translate="no">​</a></h3>
<p>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
<code>livechat_partner_link</code> a conversa fica vinculada automaticamente ao contato
(<code>res.partner</code>) do usuário já identificado no app.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="como-uma-conversa-de-live-chat-é-vinculada-a-um-contato-do-odoo">Como uma conversa de Live Chat é vinculada a um contato do Odoo?<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#como-uma-conversa-de-live-chat-%C3%A9-vinculada-a-um-contato-do-odoo" class="hash-link" aria-label="Link direto para Como uma conversa de Live Chat é vinculada a um contato do Odoo?" title="Link direto para Como uma conversa de Live Chat é vinculada a um contato do Odoo?" translate="no">​</a></h3>
<p>O aplicativo, autenticado como usuário técnico, chama um único endpoint idempotente
(<code>POST /livechat/partner-link</code>) com o <code>guest_token</code> da conversa. O módulo aponta o
histórico do visitante para o <code>res.partner</code>, renomeia o convidado com o nome do contato e
expõe um botão <strong>View Contact</strong> no painel do operador.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="é-preciso-uma-ferramenta-externa-como-intercom-ou-zendesk">É preciso uma ferramenta externa como Intercom ou Zendesk?<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#%C3%A9-preciso-uma-ferramenta-externa-como-intercom-ou-zendesk" class="hash-link" aria-label="Link direto para É preciso uma ferramenta externa como Intercom ou Zendesk?" title="Link direto para É preciso uma ferramenta externa como Intercom ou Zendesk?" translate="no">​</a></h3>
<p>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.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-módulo-quebra-a-sessão-do-widget-ao-vincular-o-contato">O módulo quebra a sessão do widget ao vincular o contato?<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#o-m%C3%B3dulo-quebra-a-sess%C3%A3o-do-widget-ao-vincular-o-contato" class="hash-link" aria-label="Link direto para O módulo quebra a sessão do widget ao vincular o contato?" title="Link direto para O módulo quebra a sessão do widget ao vincular o contato?" translate="no">​</a></h3>
<p>Não. É uma solução <strong>não invasiva</strong>: 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.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusão">Conclusão<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#conclus%C3%A3o" class="hash-link" aria-label="Link direto para Conclusão" title="Link direto para Conclusão" translate="no">​</a></h2>
<p>Com um addon pequeno, genérico e <strong>não invasivo</strong>, 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:
<strong>dentro do Odoo</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tem-um-desafio-parecido-com-o-odoo">Tem um desafio parecido com o Odoo?<a href="https://blog.tech-sed.com/pt-BR/livechat-odoo-apps-externas#tem-um-desafio-parecido-com-o-odoo" class="hash-link" aria-label="Link direto para Tem um desafio parecido com o Odoo?" title="Link direto para Tem um desafio parecido com o Odoo?" translate="no">​</a></h2>
<p>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.</p>
<p>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.</p>
<p><strong>Vamos conversar? Escreva para <a href="mailto:hola@tech-sed.com" target="_blank" rel="noopener noreferrer" class="">hola@tech-sed.com</a> e conte o
que você precisa.</strong></p>]]></content>
        <author>
            <name>Nacho Althabe</name>
            <uri>https://www.linkedin.com/in/nachoalthabe</uri>
        </author>
        <category label="Odoo" term="Odoo"/>
        <category label="Live Chat" term="Live Chat"/>
        <category label="Integrações" term="Integrações"/>
        <category label="Suporte" term="Suporte"/>
    </entry>
</feed>