Widget B2B — histórico noutros dispositivos
Esta secção cobre o restauro do histórico pessoal do widget quando a mesma pessoa abre o site a partir de outro browser ou dispositivo.
O site tem de autenticar a pessoa. O backend obtém e guarda em privado a credencial de restauro para esse utilizador e esse widget. O browser passa-a a init() juntamente com o perfil.
Para o script apenas, ou para pré-preencher perfil e empresa ficando em sessão de convidado, vê Widget B2C. Endpoints, persistência e concorrência de restore_id: Integração técnica.
O que acrescenta em relação à sessão de convidado
| Convidado | Restauro | |
|---|---|---|
| Login no site | Não exigido | Exigido, porque a credencial sai do teu backend |
| Dados que identificam o chat | Credencial de convidado do browser, ou perfil passado a init() |
external_user_id e restore_id em conjunto |
| Continuidade | Mesmo browser | Browsers e dispositivos diferentes, no canal widget autorizado |
| Quem emite a credencial | Loader | Backend do site, através da Quoting24 |
name, phone, email, external_id, company_name e external_user_id, por si sós, não restauram o histórico. external_user_id sem restore_id não chega. O campo é restore_id, em snake case: restoreId não é um campo do loader.
O restauro não junta sessões de convidado antigas e não partilha o histórico entre colegas da mesma empresa. Diz respeito apenas ao canal widget.
Podes enviar os campos de empresa no mesmo init(). A associação ou a criação segue as regras do payload de convidado: é independente do restauro e não prova a identidade.
Fluxo
- O cliente inicia sessão no portal
- O backend autenticado pede à Quoting24 uma credencial (
provisionRestoreId) ou reutiliza a já guardada - A página chama
init()com o mesmoexternal_user_id, orestore_ide, se forem precisos, os dados da empresa - A Quoting24 verifica a credencial e mostra as conversas do widget visíveis para essa pessoa, incluindo as já fechadas
- No logout, ou na mudança de pessoa, a página chama
reset()para o chat anterior não ficar no browser
widget.init({
external_id: "52",
company_name: "Ricambi Stella S.r.l.",
name: "Mario Rossi",
phone: "+393331234567",
email: "mario.rossi@ricambi-stella.example",
external_user_id: "1042",
restore_id: session.restore_id,
});
restore_id é a resposta do backend para o utilizador autenticado. Usa-a sem a modificar. Máximo de 200 caracteres. Exige o external_user_id correspondente: ID estável da pessoa, não vazio, máximo de 100 caracteres após o trim. Não é um ID de empresa partilhado.
external_id compara-se com web_code. Juntamente com company_name pode criar a empresa em falta. Não autentica o utilizador e não substitui restore_id.
Pré-requisitos
Além do branding, dos domínios e do código de incorporação:
- integração de backend autorizada na Quoting24
- segredo privado da integração, só no servidor
- endpoint de provisioning, normalmente
widget.provisionRestoreId - arquivo privado na base do site, uma credencial por utilizador e widget
A chave pública no URL do script e o segredo de integração são valores diferentes. Vê a visão geral.
Endpoint no backend do site
/api/widget/session é um exemplo a implementar no portal. Não é um URL público da Quoting24.
{
"external_user_id": "1042",
"external_id": "52",
"company_name": "Ricambi Stella S.r.l.",
"name": "Mario Rossi",
"phone": "+393331234567",
"email": "mario.rossi@ricambi-stella.example",
"restore_id": "<credencial-devolvida-pela-quoting24>"
}
- A identidade obtém-se da sessão do servidor, não de um ID escolhido pelo browser
Cache-Control: no-store- Não registes nem coloques em cache
restore_id - Não ponhas segredos no URL do script nem em atributos
data-* - Guarda a credencial antes de a devolver ao browser
O contrato para a Quoting24 (attempt_id, saved_restore_id, bloqueio, reutilização da chave) está na integração técnica.
Se o portal já tiver um endpoint autenticado que, para o utilizador atual, devolve o restore_id deste widget, usa essa resposta. Combina-a com o ID da pessoa e a referência da empresa na chamada a init().
Login, recarregamento, mudança de conta, logout
Distingue um recarregamento de página de uma mudança real de pessoa ou de conta.
- Recarregamento com o mesmo login ainda ativo:
init()semreset(), para manter a sessão de convidado guardada se apenas voltas a passar o perfil. Com o restauro, reutiliza a credencial já persistida: não geres uma nova em cada visualização de página - Mudança de pessoa, mudança de conta, logout:
reset()de imediato, depois o perfil novo, ou nenhuminit()se o utilizador saiu - Descarta as respostas de restauro chegadas depois da mudança: uma resposta antiga não é um login novo
- Numa SPA mantém uma única instância no layout principal. Uma mudança de rota não volta a lançar o provisioning
Se o restauro não estiver disponível podes oferecer o chat de convidado: reset(), depois init() sem restore_id. Esse chat fica separado do histórico restaurado.
Uma credencial inválida, de outro utilizador ou revogada é rejeitada. A Quoting24 não a converte em sessão de convidado. O botão «Riprova» do widget não pede por si só um restore_id novo ao teu backend. A interface atual está em italiano, por isso essa etiqueta está em italiano.
Exemplo de applyWidgetAuth e desmontagem: Integração técnica.
reset() esquece a sessão de convidado desta instância e a credencial guardada no browser. Não revoga restore_id no servidor e não fecha as sessões noutros dispositivos. O site tem de atualizar os outros separadores abertos.
Conversas anteriores
No histórico restaurado os chats já fechados podem aparecer como conversa anterior.
- Abri-los para consulta não reabre a conversa antiga
- As mensagens novas ficam na conversa ativa
Lista de verificação antes da entrada em produção
- [ ] Segredo de integração só no servidor
- [ ]
external_user_idestável e por pessoa, idêntico entre o provisioning einit() - [ ]
restore_idpersistido antes da resposta ao browser, e reutilizado nas visitas seguintes - [ ] O mesmo utilizador num segundo browser: o mesmo histórico
- [ ] Dois utilizadores da mesma empresa: históricos distintos
- [ ]
external_idecompany_nameverificados no ficheiro, sem esperar que restaurem o chat - [ ] Logout ou mudança de conta durante o fetch: nenhum chat do utilizador anterior no ecrã
- [ ] Passagem convidado ↔ restauro com
reset()pelo meio - [ ] Credencial revogada ou inválida: erro, sem recurso silencioso a convidado
Testes e sintomas: Verificar a integração · Resolução de problemas.