O SDK da Web foi projetado para funcionar em todos os navegadores modernos para computadores e dispositivos móveis, mas oferecemos suporte oficial à versão mais recente dos seguintes navegadores:
Computador:
Chrome
Safari
Edge
Android:
Chrome
Edge
iOS:
Chrome
Safari
Edge
Acionadores proativos
Com os gatilhos proativos, é possível iniciar o SDK da Web e enviar uma mensagem aos consumidores de forma proativa. Você pode configurar acionadores de chat proativo na Contact Center AI Platform acessando Configurações > Chat > Acionadores de chat proativo na Web.
Para mais informações, consulte Gatilhos proativos do SDK da Web.

Acompanhar os usuários
Se você quiser identificar usuários recorrentes no seu CRM ou usar respostas
predefinidas com as informações dos usuários, adicione identifiers a eles.
Para usar respostas automáticas, é necessário ter um CRM.
A autenticação (atualização do identificador) pode ser feita no início ou no meio de uma sessão. Para mais informações sobre a autenticação no meio da sessão, consulte Autenticação no meio da sessão por API.
Identificador
Ao iniciar uma chamada ou um chat, nosso sistema usa um identificador para autenticação do usuário. É possível especificar seu valor preferido para o campo de identificador durante a configuração. Se você já tiver um GUID (identificador globalmente exclusivo) para seus usuários, poderá usá-lo para identificação. No entanto, se o identificador de um usuário for enumerável ou contiver informações de identificação pessoal (PII), gere um hash para aumentar a segurança.
Os identificadores precisam ser adicionados nos seguintes locais:
Transmitir para o back-end em
getAuthToken()function getAuthToken() { // YOU SHOULD HAVE THIS KIND OF API ON YOUR SERVER return fetch('/auth/token', { headers: { 'Content-Type': 'application/json' }, method: "POST", body: JSON.stringify({ payload: { identifier: 'c727f2851b64b29761da170d0adee67a9a89c2d9960c8eee0ae53737413cfa4e', name: 'Test user', email: 'test@user.com', phone: '18008675309' } }) }).then(function(resp) { return resp.json(); }); }Adicionar ao payload ao codificar o JWT.
const express = require('express'); const jwt = require('jsonwebtoken'); const port = process.env.PORT || 3000; const secret = process.env.COMPANY_SECRET || 'secret'; const app = express(); app.use(express.json()); app.post('/auth/token', function (req, res) { const payload = req.body.payload; payload['iss'] = 'YOUR_COMPANY_NAME'; const iat = parseInt(Date.now() / 1000, 10); payload['iat'] = iat; payload['exp'] = iat + 600; const token = jwt.sign(payload, secret, { algorithm: 'HS256' }); res.json({ token }); }); app.listen(port, function () { console.log(`Listening at http://localhost:${port}`); });Adicionar mais opções em
authentication()new UJET({` // ... authenticate: function() { return getAuthToken().then({ token } => { return { token: token, user: { identifier: YOUR_UNIQUE_USER_ID, name: 'Test user', //optional, email: 'test@user.com', //optional, phone: '000000000' //optional } }; }); }, })
Transferência de chatbot externo
Ao transferir uma conversa do agente virtual para o agente, é possível substituir
a mensagem de saudação e transmitir as transcrições para o agente preenchendo o
campo external_chat_transfer com os dados personalizados. O greeting_override
é compatível com a formatação Markdown.
ccaas.config({
customData: {
"external_chat_transfer": {
"greeting_override": "YOUR GREETING MESSAGE."
}
}
"agent": {
"name": "Agent Name",
"avatar": "https://ujet.s3.amazonaws.com/default-virtual-agent-avatar-1.png"
},
"transcript": [
{
"sender": "agent",
"timestamp": "2021-03-15 12:00:00Z",
"content": [
{
"type": "text",
"text": "Hello! How can I help you today?"
},
{
"type": "buttons",
"buttons": [
{
"label": "Create New Order",
"selected": false
},
{
"label": "Check Order Status",
"selected": true
},
{
"label": "Check Account Balance",
"selected": false
}
]
}
]
},
{
"sender": "end_user",
"timestamp": "2021-03-15 12:00:15Z",
"content": [
{
"type": "text",
"text": "Check Order Status"
}
]
},
{
"sender": "agent",
"timestamp": "2021-03-15 12:00:16Z",
"content": [
{
"type": "text",
"text": "I can help you with that, what's your order number?"
}
]
},
{
"sender": "end_user",
"timestamp": "2021-03-15 12:00:20Z",
"content": [
{
"type": "media",
"media": {
"type": "image",
"url": "https://ujet.s3.amazonaws.com/default-virtual-agent-avatar-1.png"
}
}
]
}
]
}
}
Nome da empresa
Escolha um name personalizado em vez do nome da API da empresa.
ccaas.config({
name: 'ACME',
})
Redução de chats
Quando os agentes estão indisponíveis, é possível especificar opções para lidar automaticamente com a situação usando desvios.
As opções de redirecionamento de chat podem ser encontradas no portal em Configurações > Chat > Redirecionamentos para Web e dispositivos móveis.

Pontos de acesso direto (DAP)
Você pode direcionar um usuário diretamente para uma fila específica na estrutura usando pontos de acesso direto.
Para usar um ponto de acesso direto, primeiro crie um no portal.
No portal da plataforma CCAI, clique em Configurações > Fila. Se o menu Configurações não aparecer, clique em Menu.
Ative a opção Usar no menu da Web e acesse EDITAR / VER.
Selecione qualquer fila na estrutura.

Clique em Criar ponto de acesso direto.
Tipo de ponto de acesso = Geral.

Adicione dados de entrada para o ponto de acesso direto na caixa de diálogo. O campo
General Access Point Labelcorresponde aoMenuKeymencionado na próxima etapa.Clique em CRIAR.
Depois de configurar usando o portal, você pode direcionar um usuário para uma fila específica usando
MenuKey:
ccaas.config({
menuKey: 'vip'
})
ID do tíquete
Se você tiver um tíquete para um consumidor, recupere o ID dele no CRM e transmita-o para o SDK da Web:
retrieveTicket().then(ticket => {
ccaas.config({ ticketId: ticket.id })
})
Seleção automática de canais
Com preferredChannel, é possível selecionar automaticamente um canal quando um consumidor
seleciona uma fila específica:
ccaas.config({
preferredChannel: 'chat'
})
Desativar anexos
Por padrão, o SDK da Web permite que os consumidores façam upload de fotos e vídeos durante uma sessão de chat. É possível desativar usando o seguinte script:
ccaas.config({
disableAttachment: false
})
Como transmitir dados personalizados
Quando um chat é iniciado, dados personalizados podem ser enviados com o objeto de chat. Os dados personalizados podem ser qualquer coisa, como SO, versão, local ou outros dados relevantes para a conversa.
É possível adicionar dados personalizados não assinados usando a configuração customData.
O formato de dados personalizado é semelhante a um objeto JSON e consiste em key, label e value.
ccaas.config({
customData: {
k1: {
label: 'Version',
value: '1.1.0'
},
k2: {
label: 'Platform',
value: navigator.platform
}
}
})
Key: um identificador exclusivo para dados. No exemplo anterior, k1 e k2 são chaves.
Label: o nome de exibição na página do CRM.
Value: o valor do rótulo.
É possível adicionar dados personalizados assinados usando a configuração signedCustomData:
ccaas.config({
signedCustomData: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.n...."
})
O signedCustomData é uma string JWT com o algoritmo HS256.
SIGN_JWT(
algorithm='HS256',
secret=YOUR_COMPANY_SECRET,
payload={
custom_data: {
version: {
label: 'Version',
value: '1.0.0'
},
...
},
iss: 'YOUR TENANT',
iat: NOW,
exp: NOW + 3600,
}
)
Compatibilidade com vários idiomas
O campo lang pode ser usado para controlar o idioma padrão no lançamento e oferecer suporte a vários idiomas. Se omitido, o padrão é inglês (en). O idioma padrão pode ser configurado por página do seu site. Se outros idiomas estiverem disponíveis no seu locatário, o consumidor poderá mudar para outro.
client.getMenus(key?: string, lang?: string)
O método .getMenus aceita um parâmetro lang opcional. Quando esse parâmetro não é transmitido para .getMenus, o método usa a opção de idioma padrão.
Exemplo:
const client = new Client({
// ...
lang: 'ja',
})
Essa opção pode ser acessada usando a seguinte propriedade:
console.log(client.lang)
Os seguintes idiomas são aceitos e usam as abreviações indicadas na tabela abaixo:
| Idioma | Abreviação |
| Inglês | en |
| Inglês (Canadá) | en-CA |
| Inglês (Reino Unido) | en-GB |
| Inglês (Austrália) | en-AU |
| Inglês (Índia) | en-IN |
| Espanhol (Espanha) | es |
| Espanhol (México) | es-MX |
| Francês (Canadá) | fr-CA |
| Alemão | de |
| Japonês | ja |
| Coreano | ko |
| Italiano | para recebê-los. |
| Chinês (simplificado) | zh |
| Chinês (tradicional) | zh-Hant |
| Sueco | sv |
| Português | pt |
| Português (Brasil) | pt-BR |
| Finlandês | fi |
| Norueguês | nb |
| Dinamarquês | da |
| Holandês | nl |
| Turco | tr |
| Vietnamita | vi |
| Tailandês | th |
| Árabe | ar |
| Tcheco | cs |
| Polonês | pl |
| Húngaro | hu |
| Russo | ru |
| Hindi | oi |
| Romeno | ro |
| Croata | h |
| Ucraniano | uk |
| Tagalo | tl |
Para mais informações sobre traduções, consulte a seção Personalizar mensagens e traduções.
Como iniciar a UI da Web de forma programática
Essa etapa permite abrir a interface da Web de maneira programática com o método
ccaas.start(options).
Em alguns casos, talvez você queira que o consumidor clique em um botão adicional para abrir a interface do SDK da Web.
Exemplo:
<button id="launcher">Click to open</button>
var ccass = new UJET({
companyId: "YOUR_COMPANY_ID",
host: "HOST_URL",
authenticate: getAuthToken,
});
ccass.config({disableLauncher: true})
var launcher = document.getElementById('launcher');
launcher.addEventListener('click', function() {
if (ccass.visible) {
ccaas.hide();
launcher.textContent = 'Click to open';
} else {
ccaas.show();
launcher.textContent = 'Click to close';
}
});
ccass.on('ready', function() {
launcher.textContent = 'ready to talk';
});
Você também pode fechar o widget com o método ccass.close() e remover
o widget com o método ccass.destroy().
Como fechar a UI da Web de maneira programática
Essa etapa permite chamar a função de callback quando o consumidor quiser fechar o SDK da Web.
ccass.on('visible', function(visible) {console.log(visible) })
Receber informações sobre sessões de chat ativas
Você pode receber informações sobre sessões de chat ativas, incluindo o ID do chat.
Veja o exemplo a seguir:
ccass.getOngoingChat()
Se houver uma sessão de chat ativa, isso vai retornar os metadados do chat. Se não houver sessões de chat ativas, isso vai retornar null.
Você pode usar isso para impedir que os consumidores abram várias sessões de chat ocultando condicionalmente o SDK se houver um chat ativo em andamento.
Acompanhar o status de abertura ou fechamento entre várias guias ou janelas
É possível sincronizar o status aberto ou fechado do SDK entre várias guias ou janelas do seu site. Use o snippet de código para rastrear o estado do SDK no armazenamento local:
ccass.on('visible', (isVisible) => {
localStorage['ujetOpen'] = isVisible ? 'yes' : 'no'
})
if (localStorage['ujetOpen'] == 'yes') {
ccass.show()
} else {
ccass.hide()
}
Personalizar caixas de diálogo de consentimento e o botão de encerramento do compartilhamento de tela
modelo
É possível personalizar o modelo de caixa de diálogo de compartilhamento de tela com essa opção. O padrão
template é:
<dialog open class="cobrowse-dialog">
<h1>$title</h1>
<div class="cobrowse-dialog_content">$content</div>
<div class="cobrowse-dialog_footer">
<button class="cobrowse-dialog_allow js-cobrowse-allow">$allow</button>
<button class="cobrowse-dialog_deny js-cobrowse-deny">$deny</button>
</div>
</dialog>
Este template é usado para:
Caixa de diálogo de confirmação da sessão
caixa de diálogo de confirmação do controle remoto
confirmar caixa de diálogo de dispositivo completo
Os parâmetros no modelo serão substituídos pelo conteúdo na opção messages.
confirmSessionTemplate
Essa opção é usada para personalizar a caixa de diálogo de confirmação da sessão.
confirmRemoteControlTemplate
Essa opção é usada para personalizar a caixa de diálogo de confirmação do controle remoto.
confirmFullDeviceTemplate
Essa opção é usada para personalizar a caixa de diálogo "Confirmar dispositivo completo".
sessionControlsTemplate
Essa opção é usada para personalizar o botão de controles da sessão. O modelo padrão é:
<button class="cobrowse-end js-cobrowse-end">$end</button>
Mensagens
Os modelos anteriores contêm as seguintes variáveis de mensagem:
$title$content$allow$deny
Essas variáveis serão substituídas por:
{
confirmSessionTitle: string; // $title
confirmSessionContent: string; // $content
confirmRemoteControlTitle: string; // $title
confirmRemoteControlContent: string; // $content
confirmFullDeviceTitle: string; // $title
confirmFullDeviceContent: string; // $content
allowText: string; // $allow
denyText: string; // $deny
endSessionText: string; // $end
}
Temos mensagens de compartilhamento de tela integradas, por exemplo, as mensagens para a localidade en:
{
"confirmSessionTitle": "Screen Share Session Request",
"confirmSessionContent": "Do you want to share your current screen with the agent?",
"endSessionText": "End Screen Share Session",
"confirmRemoteControlTitle": "Remote Access Request",
"confirmRemoteControlContent": "The agent would like to have access to your currently shared screen to further assist you. Do you want to allow this?",
"confirmFullDeviceTitle": "Screen Share Request",
"confirmFullDeviceContent": "Do you want to share your full screen with the agent? The agent will not be able to control anything on the screen.",
"allowText": "Allow",
"denyText": "Deny"
}