Recursos
Aqui estão os recursos que você pode configurar no Oracle Web SDK.
Timestamps Absolutos e Relativos
- Flag de recurso:
timestampMode: 'relative' | 'absolute'
(padrão:'relative'
) - Configuração do recurso:
timestampMode
Você pode ativar timestamps absolutos ou relativos para mensagens de chat. Os timestamps absolutos exibem a hora exata de cada mensagem. Os carimbos de data/hora relativos só são exibidos na mensagem mais recente e expressam o tempo em termos de segundos, dias, horas, meses ou anos atrás em relação à mensagem anterior.
Descrição da ilustração relative-v-absolute-timestamps.png
A precisão Com os carimbos de data/hora absolutos, eles são ideais para tarefas de arquivamento, mas dentro do contexto limitado de uma sessão de chat, essa precisão é extraída da experiência do usuário porque os usuários devem comparar os carimbos de data/hora para descobrir a passagem de tempo entre as mensagens. Os timestamps relativos permitem que os usuários rastreiem a conversa facilmente por meio de termos como Há Pouco e Há alguns momentos que podem ser imediatamente compreendidos. Os timestamps relativos melhoram a experiência do usuário de outra forma, além de também simplificar suas tarefas de desenvolvimento: como os timestamps relativos marcam as mensagens em termos de segundos, dias, horas, meses ou anos atrás, você não precisa convertê-las em fusos horários.
Como os Timestamps Relativos Se Comportam
timestampMode: 'relative'
ou timestampMode: 'default'
), um data e hora absoluto é exibido antes da primeira mensagem do dia como cabeçalho. Esse cabeçalho é exibido quando a conversa não foi limpa e mensagens mais antigas ainda estão disponíveis no histórico. Um timestamp relativo será exibido em cada nova mensagem.

Descrição da ilustração most-recent-message-timestamp.png
Esse timestamp é atualizado nos seguintes intervalos regulares (segundos, minutos etc.) até que uma nova mensagem seja recebida.
- Nos primeiros 10s
- Entre 10s e 60s
- Cada minuto entre 1m e 60m
- Cada hora entre 1hr e 24hr
- Cada dia entre 1d e 30d
- Cada mês entre 1m e 12m
- Todo ano após o primeiro ano
Adicionar um Timestamp Relativo
- Ativar timestamps relativos –
timestampMode: 'relative'
- Etapas opcionais:
- Defina a cor do timestamp relativo –
timestamp
: '<a hexadecimal color value>
' - Para habilidades multilíngues, localize o texto do timestamp usando estas chaves:
Chave Texto Padrão Descrição relTimeNow
Now
O timestamp inicial, que é exibido nos primeiros 9 segundos. Esse timestamp também é exibido quando a conversa é redefinida. relTimeMoment
a few moments ago
Exibido por 10 a 60 segundos. relTimeMin
{0}min ago
Atualizações a cada minuto relTimeHr
{0}hr ago
Atualizações a cada hora relTimeDay
{0}d ago
Atualizações todos os dias do primeiro mês. relTimeMon
{0}mth ago
Atualizações todos os meses nos primeiros doze meses. relTimeYr
{0}yr ago
Atualizações a cada ano. - Use as definições
timeStampFormat
para alterar o formato do timestamp absoluto que é exibido antes da primeira mensagem de cada dia.
- Defina a cor do timestamp relativo –
Conclusão Automática
- Flag de recurso:
enableAutocomplete: true
(padrão:false
) - Ativar cache no lado do cliente:
enableAutocompleteClientCache
enableAutocomplete: true
e adicione um conjunto de mensagens otimizadas do usuário à página Criar Intenção. Uma vez ativado, um pop-up exibe essas mensagens depois que os usuários inserem três ou mais caracteres. As palavras nas mensagens sugeridas que correspondem à entrada do usuário são definidas em negrito. Desse ponto em diante, os usuários podem inserir suas próprias entradas ou optar por uma das mensagens de preenchimento automático.
Este recurso só está disponível em WebSocket.
Quando um assistente digital é associado ao canal Oracle Web, todas as declarações de amostra configuradas para qualquer uma das habilidades registradas para esse assistente digital pode ser usada como sugestões de preenchimento automático.
Envio automático de um campo
Quando um campo tem a propriedade autoSubmit
definida como true
, o cliente envia um FormSubmissionMessagePayload
com o mapa submittedField
contendo os valores de campo válidos que foram informados até o momento. Todos os campos que ainda não foram definidos (independentemente de serem obrigatórios) ou campos que violam uma validação do cliente não são incluídos no mapa submittedField
. Se o próprio campo enviado automaticamente contiver um valor que não seja válido, a mensagem de envio não será enviada e a mensagem de erro do cliente será exibida para esse campo específico. Quando um envio automático for bem-sucedido, o partialSubmitField
na mensagem de envio do formulário será definido como id
do campo autoSubmit
.
Substituindo um formulário de entrada anterior
Quando o usuário final envia o formulário, porque um campo tem autosubmit
definido como true
, a habilidade pode enviar um novo EditFormMessagePayload
. Essa mensagem deve substituir a mensagem anterior do formulário de entrada. Definindo a propriedade de extensão do canal replaceMessage
como true
, você ativa o SDK para substituir a mensagem anterior do form de entrada pela mensagem atual do form de entrada.
Layout de RTL Automático
Quando a direção base da página do host é definida com <html dir="rtl">
para acomodar idiomas da direita para a esquerda (RTL), o widget de chat é automaticamente renderizado no lado esquerdo. Como o widget está alinhado à esquerda para idiomas RTL, seus ícones e elementos de texto são igualmente reposicionados. Os ícones ficam nas posições opostas de onde estariam em uma renderização da esquerda para a direita (LTR). Por exemplo, os ícones de envio, mic e anexo são invertidos para que os ícones mic e envio ocupem o lado esquerdo do campo de entrada (com o ícone de envio direcional apontando para a esquerda), enquanto o ícone de anexo fica no lado direito do campo de entrada. O alinhamento dos elementos de texto, como inputPlaceholder
e chatTitle
, se baseia no fato de o idioma do texto ser LTR ou RTL. Para os idiomas RTL, o texto inputPlaceHolder e chatTitle aparecem no lado direito do campo de entrada.
Avatars
avatarBot
- O URL da origem da imagem ou a string de origem da imagem SVG exibida ao lado das mensagens da habilidade.avatarUser
- O URL da origem da imagem ou a string de origem da imagem SVG exibida ao lado das mensagens do usuário. Além disso, se a habilidade tiver uma integração de agente ao vivo, o SDK poderá ser configurado para mostrar outro ícone para mensagens do agente.avatarAgent
- O URL da origem da imagem ou a string de origem da imagem SVG que é exibida ao lado das mensagens do agente. Se esse valor não for fornecido, masavatarBot
estiver definido, o íconeavatarBot
será usado.
Essas definições só podem ser informadas nas definições de inicialização. Elas não podem ser modificadas dinamicamente.
new WebSDK({
URI: '<URI>',
//...,
icons: {
avatarBot: '../assets/images/avatar-bot.png',
avatarUser: '../assets/images/avatar-user.jpg',
avatarAgent: '<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24"><path d="M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 9c2.7 0 5.8 1.29 6 2v1H6v-.99c.2-.72 3.3-2.01 6-2.01m0-11C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"/></svg>'
}
})
Sincronização de Conversa entre Guias
Flag de recurso: enableTabsSync: true
(padrão: true
)
Os usuários podem precisar abrir o site em várias abas por vários motivos. Com enableTabsSync: true
, você pode sincronizar e continuar a conversa do usuário em qualquer guia, desde que os parâmetros de conexão (URI
, channelId
e userId
) sejam os mesmos em todas as guias. Esse recurso garante que os usuários possam exibir mensagens da habilidade em qualquer guia e responder da mesma guia ou de qualquer outra. Além disso, se o usuário limpar o histórico de conversas em uma guia, ele também será excluído das outras guias. Se o usuário atualizar o idioma do bate-papo em uma guia, o idioma do bate-papo será sincronizado com as outras guias.
- Uma nova guia é sincronizada com a(s) guia(s) existente(s) para as novas mensagens entre o usuário e a habilidade ao abrir. Se você não tiver configurado o SDK para exibir mensagens do histórico de conversas, o widget de chat inicial na nova guia aparecerá vazio quando aberto.
- Se você tiver configurado o SDK para exibir o histórico de conversas, as mensagens do chat atual nas guias existentes aparecerão como parte do histórico de conversas em uma nova guia. A definição de
disablePastActions
comoall
oupostback
pode impedir a interação com as ações das mensagens na nova guia. - O navegador Safari atualmente não suporta esse recurso.
Renderização de Mensagem Personalizada
Flag de recurso: delegate.render: (message) => boolean (default: undefined)
render
que usa o modelo de mensagem como entrada e retorna um flag booliano como saída. Ele deve retornar true
para substituir a renderização padrão por sua renderização personalizada para um tipo de mensagem específico. Se false
for retornado, a mensagem padrão será renderizada.
Para renderização personalizada, todo o tratamento de cliques da ação e a desativação ou ativação da ação devem ser tratados explicitamente.
samples
do SDK para verificar como você pode usar esse recurso com estruturas como React, Angular e Oracle JavaScript Extension Toolkit (JET).
Respostas Padrão do Cliente
Flag de recurso: enableDefaultClientResponse: true
(padrão: false
)
Use esse flag para fornecer respostas padrão do cliente juntamente com um indicador de digitação quando a resposta da habilidade tiver sido atrasada ou quando não houver resposta da habilidade. Se o usuário enviar a primeira mensagem/consulta, mas a habilidade não responder dentro do número de segundos definido pelo flag defaultGreetingTimeout
, a habilidade poderá exibir uma mensagem de saudação configurada usando a string de tradução defaultGreetingMessage
. Em seguida, o cliente verifica novamente a resposta da habilidade. O cliente exibirá a resposta da habilidade se ela tiver sido recebida, mas se não tiver sido recebida, o cliente exibirá uma mensagem de espera (configurada com a string de tradução defaultWaitMessage
) em intervalos definidos por defaultWaitMessageInterval
. Quando a espera pela resposta da habilidade excede o limite definido pelo flag typingIndicatorTimeout
, o cliente exibe uma resposta lamentável ao usuário e interrompe o indicador de digitação. Você pode configurar a resposta de desculpas usando a string de tradução defaultSorryMessage
.
Delegação
Configuração de recurso: delegate
delegate
ou use o método setDelegate
. O objeto delegado pode, opcionalmente, conter as funções delegadas beforeDisplay
, beforeSend
, beforePostbackSend
, beforeEndConversation
e render
.const delegate = {
beforeDisplay: function(message) {
return message;
},
beforeSend: function(message) {
return message;
},
beforePostbackSend: function(postback) {
return postback;
},
beforeEndConversation: function(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(message);
}, 2000);
});
},
render: function(message) {
if (message.messagePayload.type === 'card') {
// Perform custom rendering for card using msgId
return true;
}
return false;
}
}
Bots.setDelegate(delegate);
beforeDisplay
O delegado beforeDisplay
permite que a mensagem de uma habilidade seja modificada antes de ser exibida na conversa. A mensagem retornada pelo delegado é exibida em vez da mensagem original. A mensagem retornada não será exibida se o delegado retornar um valor falso como null
, undefined
ou false
. Se o delegado apresentar erros, a mensagem original será exibida em vez da mensagem retornada pelo delegado. Use a delegação beforeDisplay
para aplicar seletivamente o comportamento de link da WebView in-widget.
beforeSend
O delegado beforeSend
permite que uma mensagem de usuário seja modificada antes de ser enviada ao servidor de chat como parte de sendMessage
. A mensagem retornada pelo delegador é enviada à habilidade, em vez da mensagem original. A mensagem retornada pelo delegado não será definida se o delegado retornar um valor falso como null
, undefined
ou false
; em seguida, a mensagem não será enviada. Se houver erros, a mensagem original será enviada em vez da mensagem retornada pelo delegado.
beforePostbackSend
O delegado beforePostbackSend
é semelhante a beforeSend
, aplicado apenas às mensagens de postback do usuário. O postback retornado pelo delegado é enviado à habilidade. Se retornar um valor falso, como null
, undefined
ou false
, nenhuma mensagem será enviada.
beforeEndConversation
beforeEndConversation
permitirá uma interceptação no final de um fluxo de conversas se alguma atividade de pré-saída precisar ser executada. O function
recebe a mensagem de saída como seu parâmetro de entrada e deve retornar um Promise
. Se esse Promise
for resolvido com a mensagem de saída, a mensagem de saída CloseSession
será enviada ao servidor de chat. Caso contrário, a mensagem de saída será impedida de ser enviada....
beforeEndConversation: function(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(message);
}, 2000);
});
}
render
O delegado render
permite substituir a renderização de mensagem padrão. Se a função delegar render
retornar true
para um tipo de mensagem específico, WebSDK criará um slot de espaço reservado em vez da renderização de mensagem padrão. Para identificar o espaço reservado, adicione o msgId
da mensagem como o id
do elemento. Na função delegar render
, você pode usar esse identificador para obter a referência do espaço reservado e renderizar seu modelo de mensagem personalizado. Consulte Renderização de Mensagem Personalizada.
Botão de Início Arrastável e Widget
Flag de recurso: enableDraggableButton: true
(padrão: false
)
Às vezes, especialmente em dispositivos móveis nos quais o tamanho da tela é limitado, o widget de chat ou o botão de início podem bloquear conteúdo em uma página web. Ao definir enableDraggableButton: true
, você pode permitir que os usuários arrastem do caminho o widget ou o botão de início quando ele está bloqueando a exibição. Esse flag só afeta o local do botão de início, não o widget de chat: o widget ainda será aberto em seu local original.
Indicador de Digitação Dinâmica
Flag de recurso: showTypingIndicator: 'true'
Um indicador de digitação instrui os usuários a adiarem o envio de uma mensagem porque a habilidade está preparando uma resposta. Por padrão, as habilidades exibem o indicador de digitação somente para a primeira resposta quando você inicializa o SDK com showTypingIndicator: 'true'
. Para uma experiência ideal do usuário, a habilidade deve ter um indicador de digitação dinâmica, que é um indicador de digitação exibido após cada resposta de habilidade. Além de alertar os usuários de que a habilidade não sofreu timeout, e ainda está trabalhando ativamente em uma resposta, exibir o indicador de digitação após cada resposta de habilidade garante que os usuários não tentarão enviar mensagens prematuramente, como pode ser o caso quando a propriedade keepTurn
direciona a habilidade para responder com uma série de mensagens separadas que não permitem que o usuário interpor uma resposta.
- Inicialize o SDK com a propriedade
showTypingIndicator
definida comotrue
. - Chame a API
showTypingIndicator
showTypingIndicator
só pode ativar a exibição do indicador de digitação dinâmica quando:
- O widget está conectado ao Oracle Chat Server. O indicador de digitação dinâmica não aparecerá quando a conexão for fechada.
- O SDK for inicializado com a propriedade
showTypingIndicator
definida comotrue
.Observação
Esta API não pode funcionar quando o SDK é usado no modo sem interface do usuário.
typingIndicatorTimeout
, que tem a definição padrão de 20 segundos. Se a API for chamada enquanto um indicador de digitação já estiver sendo exibido, o timer será redefinido e o indicador ficará oculto.
O indicador de digitação desaparece assim que o usuário recebe as mensagens da habilidade. O indicador de digitação move-se para a parte inferior da janela de chat se um usuário digitar uma mensagem, fizer upload de um anexo ou enviar um local, enquanto ele estiver sendo exibido.
Controlar Comportamento de Link Incorporado
- Tratamento personalizado:
linkHandler: { onclick: <function>, target: '<string>' }
- Na webview In-widget:
linkHandler: { target: 'oda-chat-webview' }
- Em uma nova janela:
openLinksInNewWindow: 'true'
O Web SDK fornece várias maneiras de controlar o local de destino dos links de URL nas conversas. Por padrão, clicar em qualquer link na conversa abre o URL vinculado na nova guia. Você pode configurar o widget para abri-lo em um destino específico usando a definição linkHandler
.
linkHandler
espera um objeto que pode ter dois campos opcionais, target
e onclick.
O campo de destino aceita uma string que identifica o local onde o URL vinculado deve ser exibido (uma guia, janela ou <iframe>). As seguintes palavras-chave têm significados especiais para onde carregar o URL:
'_self'
: o contexto de navegação atual.'_blank'
: geralmente uma nova guia, mas você pode configurar navegadores para abrir uma nova janela.'_parent'
: o contexto de navegação principal do atual. Se não houver contexto de navegação principal, o comportamento assumirá'_self'
como padrão.'_top'
: o contexto de navegação mais alto (ou seja, o contexto "mais alto" que é um ancestral do atual). Se não houver ancestrais, ele se comportará como'_self'
.
settings = {
...,
linkHandler: { target: '_blank'}
};
const Bots = new WebSDK(settings);
Para abrir os links dentro de um iframe, você pode especificar seu atributo de nome na propriedade de destino.<iframe name="container" width="400" height="300"></iframe>
<script>
settings = {
...
linkHandler: { target: 'container'}
}
const Bots = new WebSDK(settings);
</script>
onclick
de linkHandler
permite adicionar um listener de eventos em todos os links de âncora na conversa. O listener é acionado antes de o link ser aberto e pode ser usado para executar ações com base no link. O listener recebe um objeto de evento como parâmetro que é gerado pela ação de clique. Você pode impedir que o link seja aberto retornando false
do listener. O ouvinte também é vinculado ao elemento âncora que é clicado. O contexto se refere ao HTMLAnchorElement
dentro do listener. Você pode definir uma ou ambas as propriedades da definição linkHandler
, mas é necessário especificar um dos campos.linkHandler: {
onclick: function(event) {
console.log('The element clicked is', this);
console.log('The event fired from the click is', event);
console.log('The clicked link is', event.target.href);
console.log('Preventing the link from being opened');
return false;
}
}
Dica:
Em alguns cenários, talvez você queira substituir as preferências do navegador para abrir links explicitamente em uma nova janela. Para fazer isso, passeopenLinksInNewWindow: true
nas configurações.
Modo Incorporado
- Flag de recurso:
embedded: true
(padrão:false
) - Informe o ID do elemento do contêiner de destino:
targetElement
- Adicionar
embedded: true
. - Definir a propriedade
targetElement
com o ID do elemento DOM (um componente HTML) usado como contêiner do widget (como'container-div'
no trecho de código a seguir).
<head>
<meta charset="utf-8">
<title>Oracle Web SDK Sample</title>
<script src="scripts/settings.js"></script>
<script>
const chatSettings = {
URI: YOUR_URI,
channelId: YOUR_CHANNELID,
embedded: true,
targetElement: 'container-div'
...
</script>
</head>
<body>
<h3 align="center">The Widget Is Embedded Here!</h3>
</body>
<div id="container-div"
style="height: 600px; width: 380px; padding: 0; text-align: initial">
</div>
O widget ocupa toda a largura e altura do contêiner. Se não puder ser acomodado pelo contêiner, o widget não será exibido na página.
Encerrar a Sessão da Conversa
Flag de recurso: enableEndConversation: true
(padrão: true
)
A partir da Versão 21.12, o SDK adiciona um botão de fechamento ao cabeçalho do widget de chat por padrão (enableEndConversation: true
) que permite aos usuários encerrar a sessão atual.
endConversationConfirmMessage
e endConversationDescription
. Quando um usuário descarta o prompt clicando em Sim, o SDK envia à habilidade uma mensagem de evento que marca a sessão de conversa atual como encerrada. Em seguida, a instância se desconecta da habilidade, recolhe o widget de chat e apaga o histórico de conversas do usuário atual. Ele também gera um evento chatend
no qual você pode se registrar:Bots.on('chatend', function() {
console.log('The conversation is ended.');
});
A abertura do widget de chat inicia depois uma nova sessão de conversa.Você também pode encerrar uma sessão chamando o método
Bots.endChat()
(descrito na referência que acompanha o Oracle Web SDK disponível na página Downloads). Chamar esse método pode ser útil quando o SDK é inicializado no modo sem interface do usuário.
Focar na Primeira Ação em uma Mensagem
Flag de recurso: focusOnNewMessage: 'action'
(padrão: 'input'
)
Para usuários que preferem a navegação pelo teclado (que inclui usuários avançados), você pode mudar o foco do campo de entrada do usuário para o primeiro (ou mais à esquerda) botão de ação em uma mensagem. Por padrão, o widget de chat define o foco novamente para o campo de entrada do usuário a cada nova mensagem (focusOnNewMessage: 'input'
). Isso funciona bem para fluxos de caixas de diálogo que esperam uma grande quantidade de entrada textual do usuário, mas quando o fluxo de caixas de diálogo contém várias mensagens com ações, os usuários só podem selecionar essas ações usando o mouse ou a navegação inversa pela tecla tab. Para esse caso de uso, você pode alterar o foco para o primeiro botão de ação na mensagem da habilidade conforme ela é recebida definindo focusOnNewMessage: 'action'
. Se a mensagem não contiver ações, o foco será definido como campo de entrada do usuário.
Atalhos e Teclas de Atalho
hotkeys
, você pode criar atalhos de combinação Alt Key que ativam ou mudam o foco para elementos de IU no widget de chat. Os usuários podem executar esses atalhos em vez de usar o mouse ou os gestos de toque. Por exemplo, os usuários podem inserir Alt + L para iniciar o widget de chat e Alt + C para recolhê-lo. Atribua as teclas do teclado a elementos usando os pares de chave/valor do objeto hotkeys
. Por exemplo : const settings = {
// ...,
hotkeys: {
collapse: 'c', // Usage: press Alt + C to collapse the chat widget when chat widget is expanded
launch: 'l' // Usage: press Alt + L to launch the chat widget when chat widget is collapsed
}
};
Ao criar estes pares de chave/valor:- Você só pode passar uma única letra ou dígito para uma chave.
- É possível usar somente as teclas de teclado a-z e 0-9 como valores.
O atributo não faz distinção entre maiúsculas e minúsculas.
Chave | Elemento |
---|---|
clearHistory |
O botão que limpa o histórico de conversas. |
close |
O botão que fecha o widget de chat e encerra a conversa. |
collapse |
O botão que recolhe o widget de chat expandido. |
input |
O campo de entrada de texto no rodapé do chat |
keyboard |
O botão que alterna o modo de entrada de voz para texto. |
language |
O menu de seleção que mostra a lista de seleção de idioma. |
launch |
O botão de inicialização do widget de chat |
mic |
O botão que alterna o modo de entrada de texto para voz. |
send |
O botão que envia o texto de entrada para a habilidade. |
shareMenu |
O botão do menu de compartilhamento no rodapé do chat |
shareMenuAudio |
O item de menu no pop-up do menu de compartilhamento que seleciona um arquivo de áudio para compartilhamento. |
shareMenuFile |
O item de menu no pop-up do menu de compartilhamento que seleciona um arquivo genérico para compartilhamento |
shareMenuLocation |
O item de menu no pop-up do menu de compartilhamento que seleciona o local do usuário para compartilhamento. |
shareMenuVisual |
O item de menu no pop-up do menu de compartilhamento que seleciona uma imagem ou um arquivo de vídeo para compartilhamento. |
SDK sem Interface do Usuário
Flag de recurso: enableHeadless: true
(padrão: false
)
enableHeadless: true
nas definições iniciais. A comunicação pode ser implementada da seguinte maneira:
- Enviando mensagens - Chama
Bots.sendMessage(message)
para especificar qualquer payload para o servidor. - Recebendo mensagens - É possível fazer listening das respostas para usar
Bots.on('message:received', <messageReceivedCallbackFunction>)
. - Obtendo atualização do status da conexão - Faz listening de atualizações sobre o status da conexão usando
Bots.on('networkstatuschange', <networkStatusCallbackFunction>)
. O callback possui um parâmetro de status que é atualizado com valores de 0 a 3, cada um dos quais é mapeado para estados do WebSocket:0
:WebSocket.CONNECTING
1
:WebSocket.OPEN
2
:WebSocket.CLOSING
3
:WebSocket.CLOSED
- Retornar sugestões para uma consulta – Retorna uma Promessa que resolve as sugestões da string de consulta fornecida. A Promessa será rejeitada se demorar muito (aproximadamente 10 segundos) para extrair a sugestão.
Bots.getSuggestions(utterance) .then((suggestions) => { const suggestionString = suggestions.toString(); console.log('The suggestions are: ', suggestionString); }) .catch((reason) => { console.log('Suggestion request failed', reason); });
Observação
Para usar essa API, é necessário ativar o preenchimento automático (
) e configurar o preenchimento automático para as intenções.enableAutocomplete: true
Chat multilíngue
O suporte ao idioma nativo do Web SDK permite que o widget de chat detecte o idioma de um usuário ou permita que os usuários selecionem o idioma da conversa. Os usuários podem alternar entre os idiomas, mas apenas entre as conversas, não durante, porque a conversa é redefinida sempre que um usuário seleciona um novo idioma.
Ativar o menu Language
multiLangChat
com um objeto que contenha o array supportedLangs
, que é composto por tags de idioma (lang
) e labels de exibição opcionais (label
). Fora desse array, você tem a opção de definir o idioma padrão com a chave primary
(primary: 'en'
no trecho de código a seguir).multiLangChat: {
supportedLangs: [{
lang: 'en'
}, {
lang: 'es',
label: 'Español'
}, {
lang: 'fr',
label: 'Français'
}, {
lang: 'hi',
label: 'हिंदी'
}],
primary: 'en'
}
Em um menu drop-down localizado no cabeçalho, o widget de chat exibe os idiomas suportados transmitidos. Além dos idiomas disponíveis, o menu também inclui uma opção Detectar Idioma. Quando um usuário seleciona um idioma nesse menu, a conversa atual é redefinida e uma nova conversa é iniciada com o idioma selecionado. O idioma selecionado pelo usuário persiste entre as sessões no mesmo browser; por isso, o idioma anterior do usuário é selecionado automaticamente quando o usuário visita de novo a habilidade por meio da página que contém o widget de chat.
Dica:
Você pode adicionar um listener de eventos para o eventochatlanguagechange
(descrito na referência que acompanha o Oracle Web SDK disponível na página Downloads), que é acionado quando um idioma de bate-papo é selecionado no menu suspenso ou foi alterado.Bots.on('chatlanguagechange', function(language) {
console.log('The selected chat language is', language);
});
- Defina no mínimo dois idiomas para permitir a exibição do menu drop-down.
- A chave
label
é opcional para os idiomas suportados nativamente:fr
é exibido como Francês no menu,es
é exibido como Espanhol e assim por diante. - Os labels dos idiomas podem ser definidos dinamicamente, informando-os com a definição
i18n
. Você pode definir o label para qualquer idioma, transmitindo-o à chavelanguage_<languageTag>
. Esse padrão permite definir labels para qualquer idioma, suportado ou não, além de permitir traduções do próprio label em diferentes configurações regionais. Por exemplo :
Se a propriedadei18n: { en: { langauge_de: 'German', language_en: 'English', language_sw: 'Swahili', language_tr: 'Turkish' }, de: { langauge_de: 'Deutsche', language_en: 'Englisch', language_sw: 'Swahili', language_tr: 'Türkisch' } }
i18n
incluir strings de tradução para o idioma selecionado, o texto de campos como o placeholder de entrada, o título do chat, o texto instantâneo dos botões e os títulos das dicas de ferramenta serão automaticamente alternados para o idioma selecionado. O texto do campo só pode ser alternado para outro idioma quando há strings de tradução para o idioma selecionado. Se essas strings não existirem, o idioma do texto do campo permanecerá inalterado. - O widget detecta automaticamente o idioma no perfil do usuário e ativa a opção Detectar Idioma se você omitir a chave
primary
. - Embora
label
seja opcional, se você tiver adicionado um idioma que não seja um daqueles suportados nativamente, adicione um rótulo para identificar a tag, especialmente quando não houver string i18n para o idioma. Por exemplo, se você não definirlabel: 'हिंदी'
, paralang: hi
, a lista drop-down exibirá hi, contribuindo para uma experiência de usuário abaixo do ideal.
Desativar Menu de Idioma
A partir da Versão 21.12, você também pode configurar e atualizar o idioma de chat sem precisar também configurar o menu suspenso de seleção de idioma informando multiLangChat.primary
na configuração inicial sem também informar um array multiLangChat.supportedLangs
. O valor informado na variável primary
é definido como o idioma de chat da conversa.
Detecção de Idioma
Se você omitir a chave
primary
, o widget detectará automaticamente o idioma no perfil do usuário e ativará a opção Detectar Idioma no menu.
Você pode atualizar dinamicamente o idioma selecionado chamando a API setPrimaryChatLanguage(lang)
. Se o lang
informado corresponder a um dos idiomas suportados, esse idioma será selecionado. Quando nenhuma correspondência for encontrada, Detectar Idioma será ativado. Você também pode ativar a opção Idioma Detectado chamando a API setPrimaryChatLanguage('und')
, em que 'und'
indica indeterminado ou informando multiLangChat: {primary: null}
ou multiLangChat: {primary: 'und'}
.
setPrimaryChatLanguage(lang)
mesmo quando o menu suspenso não tiver sido configurado. Por exemplo :Bots.setPrimaryChatLanguage('fr')
Você pode atualizar dinamicamente o idioma, independentemente de o idioma de chat estar configurado inicialmente ou não.O Reconhecimento de voz, quando configurado, está disponível quando os usuários selecionam um idioma suportado. Ela não estará disponível quando a opção Detectar Idioma estiver definida. A seleção de um idioma não suportado pelo reconhecimento de voz desativa a funcionalidade de reconhecimento até que um idioma suportado tenha sido selecionado.
Referência Rápida de Chat Multilingual
Para isso... | ... Faça isto |
---|---|
Exibe o menu suspenso de seleção de idioma para usuários finais. | Informe multiLangChat.supportedLangs .
|
Defina o idioma do bate-papo sem exibir o menu suspenso de seleção de idioma para os usuários finais. | Informe multiLangChat.primary .
|
Definir um idioma padrão. | Informe multiLangChat.primary com multiLangChat.supportedLangs . O valor primary deve ser um dos idiomas suportados incluídos no array.
|
Ativar detecção de idioma. | Informe primary: null ou primary: 'und' com multiLangChat .
|
Atualize dinamicamente o idioma do chat. | Chame a API setPrimaryChatLanguage(lang) .
|
Webview In-Widget
Você pode configurar o comportamento do link em mensagens de chat para permitir que os usuários acessem páginas web dentro do widget de chat. Em vez de ter que alternar da conversa para exibir uma página em uma guia ou em outra janela do browser, um usuário pode permanecer no chat porque o widget de chat abre o link em uma Webview.
Configurar o Comportamento de Link para a Webview
- Para abrir todos os links na webview, informe
linkHandler: { target: 'oda-chat-webview' }
nas definições. Isso define o destino de todos os links comooda-chat-webview
, que é o nome doiframe
na webview. - Para abrir somente determinados links na webview, garantindo que outros links sejam abertos normalmente em outras guias ou janelas, use a delegação
beforeDisplay
. Para abrir uma ação de URL de mensagem específica na webview, substitua o valor'url'
do campoaction.type
por'webview'
. Quando o tipo de ação for'webview'
na funçãobeforeDisplay
, o botão de ação abrirá o link na webview quando clicado.
Abrir Links na Webview
Os links incorporados em uma página que é exibida na WebView só podem ser abertos na WebView quando são convertidos em um elemento âncora (<a>
), com um atributo de destino definido como target="oda-chat-webview"
.
Personalizar o WebView
webViewConfig
que aceita um objeto. Por exemplo :{ referrerPolicy: 'no-referrer-when-downgrade', closeButtonType: 'icon', size: 'tall'
Os campos desse objeto são opcionais. A configuração também pode ser atualizada dinamicamente especificando um objeto
webViewConfig
no método setWebViewConfig
. Todas as propriedades do objeto são opcionais.
Campo | Valor | Descrição |
---|---|---|
accessibilityTitle
|
String | O nome do elemento de quadro WebView para Acessibilidade Web. |
closeButtonIcon
|
String | A string do URL/SVG da imagem usada para exibir o ícone do botão Fechar. |
closeButtonLabel
|
String | Título do label/dica de ferramenta do texto do botão Fechar. |
closeButtonType
|
|
Define como o botão Fechar é exibido na WebView. |
referrerPolicy
|
ReferrerPolicy
|
Indica qual referenciador enviar ao extrair o recurso do quadro. O valor da política referrerPolicy deve ser uma diretiva válida. A política padrão aplicada é 'no-referrer-when-downgrade' .
|
sandbox
|
Um array de String | Um array de strings de restrição válidas que permite a exclusão de determinadas ações dentro do quadro. As restrições que podem ser informadas para esse campo são incluídas na descrição do atributo sandbox em Documentos Web MDN.
|
size
|
|
A altura da WebView em comparação com a altura do widget de chat. Quando definido como 'tall' , é definido como 80% da altura do widget; quando definido como 'full' , é igual à altura do widget.
|
title
|
String | O título que é exibido no cabeçalho do contêiner WebView. |
- As páginas que fornecem o cabeçalho de resposta
X-frame-options: deny
ouX-frame-options: sameorigin
não podem ser abertas na WebView por causa das restrições do servidor que impedem que a página seja aberta em iframes. Nesses casos, a WebView apresenta o link novamente para o usuário para que ele possa abri-lo em uma nova janela ou guia. - Por causa das restrições do servidor, as páginas de autorização não podem ser abertas dentro de WebViews, pois as páginas de autorização sempre retornam
X-frame-options: deny
para evitar um ataque de roubo de clique. - Links externos, que não podem ser abertos corretamente na WebView. Somente links incorporados nas mensagens de conversa podem ser abertos na WebView.
Observação
Como mensagens externas são incompatíveis com a WebView, não direcione qualquer link externo a ser aberto na WebView.
webViewErrorInfoText
:settings = {
URI: 'instance',
//...,
i18n: {
en: {
webViewErrorInfoText: 'This link can not be opened here. You can open it in a new page by clicking {0}here{/0}.'
}
}
}
Sondagem Longa
Flag de recurso: enableLongPolling: true
(padrão: false
)
O SDK usa WebSockets para conectar-se ao servidor e conversar com habilidades. Se, por algum motivo, o WebSocket estiver desativado na rede, as chamadas HTTP tradicionais podem ser usadas para conversar com a habilidade. Esse recurso é conhecido como sondagem longa, porque o SDK deve chamar ou sondar continuamente o servidor para extrair as últimas mensagens da habilidade. Este recurso de fallback pode ser ativado especificando enableLongPolling: true
nas definições iniciais.
Indicador de Digitação para Conversas do Agente do Usuário
Flag de recurso: enableSendTypingStatus
: booliano (padrão: false
)
Esse recurso permite que os agentes verifiquem se os usuários ainda estão envolvidos na conversa enviando o status do usuário para o agente ao vivo. Quando enableSendTypingStatus
é definido como true
, o SDK envia um evento de status de digitação RESPONDING
junto com o texto que está sendo digitado no momento pelo usuário para o Oracle B2C Service ou o Oracle Fusion Service. Isso, por sua vez, exibe um indicador de digitação no console do agente. Quando o usuário terminar de digitar, o SDK enviará um evento LISTENING
ao serviço para ocultar o indicador de digitação na console do agente.
A configuração typingStatusInterval
, que tem um valor mínimo de três segundos, acelera a atualização do status de digitação.
enableAgentSneakPreview
(que por padrão é false
) deve ser definido como true
e o Sneak Preview deve ser ativado na configuração de chat do Oracle B2C Service.
Você não precisa configurar o status de digitação ao vivo no lado do usuário. O usuário pode ver o status de digitação do agente por padrão. Quando o agente está digitando, o SDK recebe uma mensagem de status
RESPONDING
que resulta na exibição de um indicador de digitação na exibição do usuário. Da mesma forma, quando o agente está ocioso, o SDK recebe uma mensagem de status LISTENING
que oculta o indicador de digitação.
Reconhecimento de Voz
Flag de recurso: enableSpeech: true
(padrão: false
)
A definição de enableSpeech: true
permite que o botão do microfone seja exibido no lugar do botão de envio sempre que o campo de entrada do usuário estiver vazio.
Sua habilidade também pode utilizar o reconhecimento de voz com o método startVoiceRecording(onSpeechRecognition, onSpeechNetworkChange)
para iniciar a gravação e o método stopVoiceRecording
para interromper a gravação. (Esses métodos estão descritos no Guia do Usuário que acompanha o SDK.)
Usando o flag enableSpeechAutoSend
, você pode configurar se deseja ou não enviar o texto que é reconhecido da voz do usuário diretamente para o servidor de chat sem entrada manual do usuário. Ao definir essa propriedade como true
(o padrão), você permite que a resposta de fala do usuário seja automaticamente enviada ao servidor de chat. Ao defini-la como false
, você permite que o usuário edite a mensagem antes de enviá-la ao servidor de chat ou a exclui.
Visualizador de Voz
Configuração de recurso: enableSpeechAutoSend

O modo de voz é indicado quando o ícone de teclado


Descrição da ilustração voice-visualizer.png
enableSpeechAutosend
ser true
(enableSpeechAutoSend: true
), as mensagens são enviadas automaticamente depois de serem reconhecidas. A definição de enableSpeechAutoSend: false
alterna o modo de entrada para texto depois que a mensagem de voz é reconhecida, permitindo que os usuários editem ou concluam suas mensagens usando texto antes de enviá-las manualmente. Como alternativa, os usuários podem concluir suas mensagens com voz por meio de um clique subsequente no ícone de voz antes de enviá-las manualmente.
O visualizador de voz é criado usando o AnalyserNode. Você pode implementar o visualizador de voz no modo sem interface do usuário usando o método
startVoiceRecording
. Consulte SDK para obter mais informações sobre o AnalyserNode e os níveis de frequência.