Personalizar o Widget de Chat

É possível personalizar vários aspectos do widget de chat, como seu layout e ícones, cores e texto.

Dica:

Este artigo ajuda você a se familiarizar com as diversas propriedades de personalização.

Configuração de Rede

Você inicializa o SDK usando essas propriedades de conexão. O aplicativo de amostra que acompanha o SDK fornece um exemplo de como defini-las em seu arquivo scripts/settings.js.
Nome da Propriedade Descrição 0brigatório? Valor Padrão
URI O URL do Oracle Chat Server Sim N/A
channelId O ID do Canal Oracle Web Sim N/A
userId Um identificador exclusivo do usuário. Caso ele não seja fornecido, o Oracle Digital Assistant gerará um. Número Um valor gerado aleatoriamente
clientAuthEnabled Determina se o SDK se conecta a um canal no qual a autenticação do cliente foi ativada. Conforme descrito em Configurar Autenticação do Cliente, defina essa propriedade como true para se conectar ao canal com autenticação ativada e usar o token JWT. Sim false

Flags de Recurso

Use as propriedades de Flag do Recurso para:
  • Conexões seguras
  • botões de ação com formato de pílula
  • Narração em áudio de respostas da habilidade.
  • Compartilhamento de anexos
  • Desativação de cliques em mensagens anteriores (fora do foco)
  • Preenchimento automaticamente de entrada do usuário
Por exemplo :

    <script>
        const chatSettings = {
            showConnectionStatus: true,
            conversationBeginPosition: 'bottom',
            openChatOnLoad: true,
            position: {bottom: '2px', right: '2px'},
            displayActionAsPills: true,
            initUserHiddenMessage: 'Hello',
            embedded: true,
            targetElement: 'chat-container',    
            embedTopScrollId: 'top-text',
            customHeaderElementId: 'custom-header',
            botButtonIcon: 'images/bot-button.png', 
            logoIcon: 'images/bot-white.png', 
            botIcon: 'images/bot-green.png',        
            personIcon: 'images/user-icon.png',
            URI: YOUR_URI,
            channelId: YOUR_CHANNELID,

         };

...
    </script>

Dica:

A partir da Versão 22.08, o esquema de definições de configuração do widget de chat está disponível em um formato de esquema JSON padrão por meio de uma CDN (https://static.oracle.com/cdn/oda/22.8.0/settings-schema.json), que pode ser usado para criar telas de configuração dinâmica.
Nome da Propriedade Descrição 0brigatório? Valor Padrão
alwaysShowSendButton Exibe o botão enviar no rodapé do bate-papo mesmo quando não há texto de entrada do usuário. Número false
defaultGreetingTimeout O timeout padrão, em segundos, após o qual uma mensagem de saudação padrão é exibida. Número 5
defaultWaitMessageInterval O intervalo padrão, em segundos, que a mensagem de espera padrão exibe. Número 5
disablePastActions Desativa os botões de ação em uma mensagem de habilidade depois que um usuário interagiu com uma ação de envio de postback, local ou formulário. Os valores permitidos são all, none ou postback. Quando definido como all, todos os botões de ação da mensagem são desativados na interação. A definição de postback só desativa as ações de postback e localização, e a definição de none mantém todos os botões ativados mesmo após uma interação. O comportamento ativado por essa propriedade é independente da configuração no nível do assistente digital para desativar a seleção de ações anteriores. É necessário definir os dois valores separadamente. No all
displayActionsAsPills Exibe botões de ação em formato de pílula. No false
enableAttachment Configura o compartilhamento de anexos. No true
enableAttachmentSecurity Quando definido como true, cabeçalhos extras são transmitidos às solicitações de upload de anexo para garantir que eles não possam ser baixados sem transmitir um token JWT assinado válido como cabeçalho de autorização.

Não ative essa definição se a habilidade estabelecer conexão com uma instância do ODA Versão 20.08 ou for executada em qualquer versão anterior à 20.08. Esta propriedade só se aplica a conexões ativadas por autenticação do cliente com as Versões 20.12 e superior da plataforma ODA.

No false
enableAutocomplete Defina como true para permitir que a habilidade preencha automaticamente a solicitação do usuário usando as solicitações de usuário idealizadas inseridas como Preenchimento Automático de Sugestões na página Criar Intenção. A habilidade gera essas sugestões quando o usuário digita três ou mais caracteres. Ela também define as palavras na entrada do usuário que correspondem às frases sugeridas em negrito. No false
enableBotAudioResponse Ativa a declaração das respostas de uma habilidade à medida que elas são recebidas usando a API de síntese de fala da Web. No false
enableClearMessage Habilita o botão de limpeza de mensagem no cabeçalho do widget de chat. No false
enableDraggableButton Permite que os usuários arrastem do caminho o botão do widget de chat quando ele está bloqueando o conteúdo na página web. Esse recurso também funciona para navegadores Android e iOS Safari. No false
enableHeadless Permite que você use o Oracle Web SDK sem sua interface de usuário para que possa desenvolver sua própria interface de usuário de chat. No false
enableLocalConversationHistory Permite que a conversa anterior associada a um determinado userId seja carregada no browser quando o widget for inicializado. No false
enableLongPolling Use solicitações HTTP quando o websocket falhar ao estabelecer conexão. No false
enableSecureConnection Configura a comunicação segura (https v. http e wss v. ws). No true
enableSpeech Quando definida como true, esta propriedade ativa o microfone para reconhecimento de voz. Por exemplo :
const chatSettings = {
    URI: 'idcs-oda-example.com',
    channelId: '9999b1-f99a-9999-999ee-df9d99999d',
    enableSpeech: true
};
No false
enableSpeechAutoSend Quando é definida como true (o padrão), a resposta de fala do usuário é automaticamente enviada ao servidor de chat (e é exibida como uma mensagem enviada no widget de chat). Quando definida como false, a resposta de fala do usuário é renderizada no campo de texto da mensagem antes de ser enviada ao servidor de chat para que o usuário possa modificá-la antes de enviá-la manualmente ou excluir a mensagem. No true
focusOnNewMessage Define o foco no campo de entrada do usuário ou no primeiro botão de ação em uma mensagem quando uma nova mensagem é recebida.
  • action – Quando uma mensagem é recebida, o foco é o primeiro botão de ação (se a mensagem tiver botões de ação). Se a mensagem não tiver botões, o foco será o campo de entrada do usuário.
  • input – O campo de entrada do usuário permanece como foco quando novas mensagens são recebidas.
No input
multiLangChat Permite que o widget de chat detecte o idioma de um usuário e permita que o usuário selecione um idioma preferencial em um menu drop-down no cabeçalho. Você define o menu com um objeto que define o idioma principal e um array de duas ou mais tags de idioma (o array supportedLangs, descrito em Chat Multilíngue). No N/A
name O nome da instância. Fornece um namespace para a instância e é usado como prefixo para os nomes de classe CSS e IDs de elemento. No oda-chat
openChatOnLoad Expande o widget de chat quando a página é carregada. No false
openLinksInNewWindow Substitui a preferência do browser do usuário abrindo links em uma nova janela. Essa definição se aplica a todos os links presentes na conversa, incluindo botões de ação, links de fallback para anexos e links de cartões. No false
showConnectionStatus Permite que o status da conexão seja exibido no cabeçalho do widget de chat. Número false
showPrevConvStatus Exibe mensagens de status no fim das mensagens mais antigas das conversas anteriores. Número true
showTypingIndicator Exibe uma bolha de chat ao aguardar uma resposta. Número true

Funcionalidade

Use as propriedades da Funcionalidade para:
  • Imitar uma conversa iniciada pela habilidade.
  • Incorporar conteúdo à parte superior e inferior da janela de chat que rola ou fica parada (fixa).
  • Definir a configuração regional.
  • Definir o modo de depuração.
  • Definir a configuração regional e a voz para a síntese de fala.
Propriedade Descrição 0brigatório? Valor Padrão
customHeaderElementId Nomeia o ID do elemento <div> adicionado ao cabeçalho do widget de chat. Número N/A
delegate Um objeto que define um delegado para receber callbacks antes que determinados eventos ocorram em uma conversa. O objeto delegate permite que o código interaja com mensagens do usuário e respostas da habilidade antes que as mensagens sejam enviadas e as respostas sejam exibidas. Número N/A
embedBottomScrollId O ID do elemento que é adicionado como o conteúdo de rolagem na parte inferior do chat. Use esta propriedade para adicionar conteúdo personalizado na exibição de conversa do widget de chat. Número N/A
embedBottomStickyId O ID do elemento usado para o conteúdo fixo que aparece na parte inferior do chat. Use esta propriedade para adicionar conteúdo personalizado na exibição de conversa do widget de chat. Número N/A
embedded A definição dessa opção como true ativa o modo embedded para o widget de chat. Além de definir essa propriedade, você precisa nomear o elemento div que armazena o widget na propriedade targetElement. Número false
embeddedVideo Definir isso como true incorpora links para vídeos YouTube, Daily Motion e Oracle Video Hub para que possam ser reproduzidos no widget de chat. Número false
embedTopscrollId O ID do elemento div que é adicionado como um conteúdo de rolagem na parte superior do widget de chat. Número N/A
embedTopStickyId O ID do elemento div que é usado para o conteúdo fixo que aparece na parte superior do widget de chat. Use esta propriedade para adicionar conteúdo personalizado na exibição de conversa do widget de chat. Por exemplo, o elemento top-text div no seguinte trecho de código é referenciado como embedTopStickyId: 'top-text':

<div id="top-text" style="padding: 0; text-align: initial">
<p>Talk to Pizzabot to order your pizza.</p>
</div>
O tutorial do Web SDK descreve como configurar esta propriedade e definir rolagem e não rolagem para elementos do widget de chat.
Número N/A
enableAgentSneakPreview Envia o texto inserido pelo usuário juntamente com o status de digitação para o agente. Número false
enableAutocompleteClientCache Permite o armazenamento no cache do cliente para minimizar chamadas do servidor quando o recurso de preenchimento automático estiver em uso. Número false
enableDefaultClientResponse Quando definido como true, o cliente exibe respostas padrão quando a resposta da habilidade foi atrasada ou quando não há resposta da habilidade. Número false
enableEndConversation Permite que o usuário encerre a conversa e redefina a sessão de chat. Ele também limpa o histórico de conversas locais, desconecta do servidor de chat e minimiza o widget Número true
enableHeaderActionCollapse Recolhe as ações do cabeçalho em um botão de menu se a contagem de ícones for maior que dois. Número true
enableResizableWidget Permite que o usuário redimensione o widget de chat depois de expandi-lo. Se o widget estiver localizado no lado direito da página da Web, os usuários ajustarão suas dimensões arrastando a borda superior, a borda esquerda ou o canto superior esquerdo. Da mesma forma, se o widget for colocado no lado esquerdo, os usuários redimensionarão a borda superior, a borda direita ou o canto superior direito. Número false
enableSendTypingStatus Envia o status de digitação do usuário para o agente ativo. Número false
enableTabsSync Sincroniza mensagens de conversa entre guias diferentes para um determinado userId e channelId. Número true
enableVoiceOnlyMode Ativa o modo somente voz. A ativação do modo somente voz elimina a necessidade de os usuários clicarem no botão do microfone toda vez que receberem uma mensagem de bot. Com esse modo ativado, o SDK inicia automaticamente o reconhecimento de voz assim que o TTS (Text-to-Speech) da mensagem recebida for falado. Número false
hotkeys Um objeto que contém uma lista de teclas de teclado que ativam, ou focam, elementos usando a tecla ALT combinada com a tecla de atalho aprovada. Número {...} Por exemplo:
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
    }
i18n Um objeto que contém campos de configuração regional. Cada configuração regional mantém pares de chave/valor i18n para as strings de texto usadas no widget. Número {'en-us':{…}}
Por exemplo :
"i18n": {
                "en-us": {
                    "chatTitle": "Pizza King"
                }
            } 
initBotAudioMuted Inicializa a declaração da mensagem da habilidade no modo silencioso. Esse recurso só pode ser ativado quando você define enableBotAudioResponse como true. Número true
initMessageOptions Enquanto initUserHiddenMessage envia a mensagem "oculta" inicial somente depois que o cliente estabeleceu conexão com a habilidade e o widget de chat foi expandido, você poderá usar essa definição para enviar mensagens assim que o cliente tiver estabelecido conexão com a habilidade, independentemente de o widget estar ou não expandido. Essa definição aceita um objeto que tem uma propriedade sendAt. A propriedade sendAt pode ter um dos dois valores: 'init' ou 'expand'. Se você definir 'init', as mensagens de inicialização serão enviadas assim que a conexão for estabelecida. Se você definir 'expand', as mensagens de inicialização só serão enviadas quando o widget for expandido. No seguinte trecho de código, a mensagem é definida quando a conexão é estabelecida por causa de sendAt: 'init':
const chatSettings = {
    URI: '...',
    channelId: '...',
    initUserHiddenMessage: 'Hello',
    initMessageOptions: {
        sendAt: 'init'
    }
}
Bots = new WebSDK(settings);
Bots.connect();
Lembre-se de que o faturamento começa quando a mensagem de inicialização foi enviada, mesmo que o widget ainda esteja fechado (como seria o caso com sendAt: 'init').
  N/A
initUserHiddenMessage Uma mensagem que é usada para iniciar uma conversa. Esta mensagem pode ser uma string de texto ou um payload de mensagem. Por exemplo: initUserHiddenMessage: 'Hi'. Essas mensagens não são dependentes do histórico do usuário. Essa mensagem é enviada em cada sessão depois que o cliente estabeleceu conexão com a habilidade e o widget de chat foi expandido. Para enviar a primeira mensagem somente quando o histórico de conversas estiver vazio, vincule os listeners de eventos usando o método Bots.on(). Por exemplo, você pode fazer isso vinculando os eventos WIDGET_OPENED e NETWORK, que são descritos nos documentos do SDK. Número N/A
initUserProfile Atualiza o perfil do usuário antes do início de uma conversa. O formato do payload do perfil deve ser { profile: {...} }. Por exemplo :
initUserProfile : {
    profile:{
    givenName: 'First',
    surname: 'Last',
    email: 'first.last@example.com',
    properties: {
        lastOrderedItems: '1 medium pepperoni'
    }
}
Esta função atualiza o contexto do usuário depois que o cliente é conectado à habilidade e o widget de chat foi expandido. Como resultado, o perfil do usuário pode ser refletido na primeira mensagem de resposta para o usuário. Por exemplo, a habilidade pode saudar o usuário com uma mensagem como "Bem-vindo de volta, John Smith! Seu último pedido foi uma pizza de pepperoni média". Essas mensagens são enviadas depois que o cliente se conecta à habilidade e o widget de chat é expandido. Estas mensagens do perfil de usuário são enviadas depois que o cliente se conectou à habilidade e o widget de chat é expandido. Uma mensagem de perfil do usuário ainda será enviada antes da mensagem "oculta" inicial se initUserHiddenMessage também for informado.

Você só pode informar a propriedade profile no payload. Se você precisar informar outra propriedade, como messagePayload. Se a mensagem inicial precisar do perfil e das propriedades messagePayload, use initUserHiddenMessage.

Número N/A
isDebugMode Ativa o modo de depuração. No false
linkHandler Um objeto que substitui a configuração para tratar os cliques nos links incorporados nas respostas da habilidade. Há duas maneiras de este objeto tratar links: target, que aceita uma string e onclick, que aceita uma função. Você pode definir target ou onclick, mas não ambos. Quando quiser que todos os links sejam abertos em uma WebView, informe linkHandler: { target: 'oda-chat-webview' }. No
{ onclick: <function>, target: 'string' }
locale A configuração regional padrão para as strings de texto do widget. A configuração regional informada durante a inicialização tem uma preferência maior sobre as configurações regionais do browser dos usuários. Se não houver uma correspondência exata, o SDK tentará fazer a correspondência com o idioma mais próximo. Por exemplo, se a configuração regional for 'da-dk', mas as traduções de i18n só forem fornecidas para 'da', a tradução de 'da' será usada. Na ausência de traduções de configurações regionais informadas, as traduções serão pesquisadas e aplicadas às configurações regionais do browser. Na ausência de traduções para qualquer uma delas, a configuração regional padrão, 'en' será usada para traduções. No en-us
messageCacheSizeLimit O número máximo de mensagens que são salvas em localStorage de cada vez. No 2000
reconnectMaxAttempts O número de tentativas feitas pelo widget de chat para reconectar quando a conexão inicial falha. No 5
shareMenuItems Os itens de menu no menu pop-up de compartilhamento. Esta propriedade aceita um array com valores de string mapeados para itens de menu:
  • 'visual' para imagem e vídeos
  • 'audio' para áudio
  • 'file' para arquivos
  • 'location' para local
Você pode especificar quais itens estão disponíveis no menu (['audio', 'file'], por exemplo). Todos os itens de menu estão disponíveis quando o array está vazio, quando os itens no array estão incorretos (['audio', 'visuil'] ou quando a propriedade shareMenuItems não é definida.
No
['audio', 'file', 'location', 'visual']
skillVoices Um array contendo as vozes preferenciais usadas para narrar respostas. Cada item no array deve ser um objeto com dois campos: lang e name. name é opcional. O primeiro item que corresponder a uma voz disponível no sistema será usado para a narração. Esta configuração está obsoleta. No System language
speechLocale A configuração regional esperada de fala do usuário que é usada para reconhecimento de voz. Inglês dos EUA ('en-US') é a configuração regional padrão. As outras configurações regionais suportadas são: Inglês australiano ('en-au'), Inglês britânico ('en-uk'), Francês ('fr-fr'), Alemão ('de-de'), Italiano ('it-it'), Hindi indiano (hi-in), Inglês indiano (en-in), Português do Brasil ('pt-br') e Espanhol ('es-es'). A configuração regional de fala pode ser definida dinamicamente chamando a API setSpeechLocale('<locale>'). O reconhecimento de voz não funcionará se uma configuração regional não suportada tiver sido informada. No 'en-us'
storageType O mecanismo de armazenamento na Web que é usado para armazenar o histórico de conversas de usuários cujo userId é informado pelo aplicativo host. Os valores suportados são 'localStorage' e 'sessionStorage'. As conversas de usuários anônimos são sempre armazenadas em sessionStorage e são excluídas automaticamente após o término da sessão do browser. No 'localStorage'
targetElement Nomeia o elemento div em que o widget de chat é incorporado na página Web. O elemento chat-container div no seguinte trecho de código é referenciado como targetElement: 'chat-container':
        <div id="chat-container" class="chatbox" 
            style="height: 600px; width: 400px; padding: 0;
            text-align: initial">
        </div>
Confira o tutorial do Web SDK para descobrir como adicionar e estilizar o elemento div.
No N/A
theme O tema do layout principal. Três temas estão disponíveis: 'default', 'redwood-dark' e 'classic'. No default
timestampFormat Formata o timestamp de entrega que acompanha mensagens. Aceita valores em um objeto options de DateTimeFormat ou como uma string de padrão conforme descrito em Personalizar o Timestamp

Observação: Isso controla o timestamp da mensagem, não o timestamp do cabeçalho.

.
No
{
weekday:'long',
year:'numeric',
month: 'long',
day: 'numeric'

}
timestampHeaderFormat Personalize o formato de timestamp no cabeçalho da mensagem. Você pode usar um objeto options DateTimeFormat ou uma string de padrão conforme descrito em Personalizar o Timestamp. No N/A
timestampHeaderMode Configura os cabeçalhos de timestamp que aparecem acima da primeira mensagem do dia. 'absolute' (o formato padrão) exibe o timestamp completo em formato absoluto, 'relative' o exibe em um formato relativo e 'none' oculta totalmente o cabeçalho de timestamp. No absolute
timestampMode Configura o modo de exibição de timestamp como timestamps absolutos que aparecem em cada mensagem ou como timestamp relativo que só aparece na mensagem mais recente.
  • default – Define um timestamp relativo em cada mensagem.
  • relative (padrão) - O data e hora é exibido antes da primeira mensagem do dia como data e hora absolutos em um cabeçalho e, em seguida, como data e hora relativos para as novas mensagens como data e hora de atualização indicando o tempo decorrido desde que a mensagem foi adicionada na conversa. O timestamp relativo é atualizado em intervalos definidos até que uma nova mensagem seja recebida.
  • absolute - Define um timestamp absoluto em cada mensagem.
  • none – Desativa o timestamp.

Observação: Isso controla o timestamp da mensagem, não o timestamp do cabeçalho.

No default (para timestamps absolutos) ou relative.
ttsService Um array contendo vozes preferenciais usadas para respostas de fala por meio de texto para fala (TTS). Cada item no array deve ser um objeto com pelo menos um dos seguintes campos: lang e name. O primeiro item que corresponder a uma voz disponível no sistema será usado para o TTS. No oracle
typingIndicatorTimeout Define o número de segundos após o qual o indicador de digitação será removido automaticamente se o widget de chat ainda não tiver recebido a resposta. No 20
typingStatusInterval Define o intervalo, em segundos, para limitar o status de digitação que é enviado ao agente ativo. No 3
webViewConfig Personaliza a WebView in-widget. No { referrerPolicy: 'no-referrer-when-downgrade', closeButtonType: 'icon', size: 'tall' }

Botões Ler Mais e Ler Menos para Respostas de Habilidades de Vários Parágrafos

Você pode otimizar a experiência do usuário para mensagens de habilidade de vários parágrafos adicionando os botões Read More e Read Less.
Descrição da readmore.png a seguir
Descrição da ilustração readmore.png

Você pode adicionar o código do lado do cliente para esses botões, que ocultam e mostram parágrafos, usando o objeto delegate e as funções personalizadas.

  1. No settings.js, defina um objeto delegate com uma função de callback beforeDisplay na declaração const chatSettings:
    delegate: {
                beforeDisplay: function (message) {
                    var messagePayload = message && message.messagePayload;
                    if (messagePayload.type === 'text') {
                        messagePayload.text = splitParagraph(messagePayload.text);
                    }
                    return message;
                }
            }
    Se a mensagem for do tipo text, beforeDisplay chamará a função splitParagraph personalizada para dividir o texto pelo primeiro parágrafo.
  2. Declare as variáveis para as funções de view personalizadas splitParagraph e toggleParagraph:
    var PREFIX_DOTS = 'dots_';
    var PREFIX_MORE = 'more_';
    var PREFIX_TOGGLE = 'toggle_button';
  3. Adicione a expressão da função splitParagraph e a função toggleParagraphView.
    splitParagraph é um IIFE (Expressão de Função Chamada Imediatamente) que isola a variável globalIDCounter para que ela só possa ser acessada pela função splitParagraph. O código identifica um parágrafo ("\n\n") e divide o texto de acordo. Em seguida, adiciona três pontos (...) para indicar que há mais texto a ser exibido e um botão Ler Mais para exibir o texto restante.

    var splitParagraph = (function () {
        var globalIDCounter = 0;
    
        return function splitParagraph(text) {
            var paragraphs = text.split('\n\n');
    
            if (paragraphs.length > 1) {
                var HTMLText = '<p>' + paragraphs[0] +
                    '<span id="' + PREFIX_DOTS + globalIDCounter + '">...</span></p>' +
                    '<span id="' + PREFIX_MORE + globalIDCounter + '" class="more">';
    
                for (var i = 1; i < paragraphs.length; i++) {
                    HTMLText += '<p>' + paragraphs[i] + '</p>';
                }
    
                HTMLText += '</span><button id="' + PREFIX_TOGGLE + globalIDCounter + '" class="readMore" onclick="toggleParagraphView(' + globalIDCounter + ')">Read More</button>';
    
                globalIDCounter++;
                return HTMLText;
            } else {
                return text;
            }
        }
    })();
    
    function toggleParagraphView(elemID) {
        var dots = document.getElementById(PREFIX_DOTS + elemID);
        var textMore = document.getElementById(PREFIX_MORE + elemID);
        var buttonToggle = document.getElementById(PREFIX_TOGGLE + elemID);
    
        if (!dots || !textMore || !buttonToggle) {
            return;
        }
    
        if (dots.style.display === 'none') {
            dots.style.display = 'inline';
            buttonToggle.innerText = 'Read More';
            textMore.style.display = 'none';
        } else {
            dots.style.display = 'none';
            buttonToggle.innerText = 'Read Less';
            textMore.style.display = 'inline';
        }
    }
  4. Configure e (opcionalmente) estilize os botões Ler Mais e Ler Menos. O CSS inclui um estilo display:none para mostrar ou ocultar botões de acordo com o estado da exibição de texto longo.
    • Se você não quiser estilizar os botões, adicione o seguinte código:
      <style>
      .more {
        display: none;
      }
      </style>
    • Se você quiser estilizar os botões, pode fazer algo assim:
      <style>
      .readMore {
        color: #fff !important;
        background-color: red;
        font-size: 12pt;
        padding: 4px;
        outline: 0;
        -moz-outline: 0;
        border: 0;
      }
      
      .readMore:hover {
        color: #fff !important;
        background-color: #606060 !important;
      }
      .more {
        display: none;
      }
      </style>

Layout

Use as propriedades do layout para:
  • Definir a posição do widget dentro da página Web.
  • Definir as dimensões, as cores e o estilo da fonte do widget de chat.
  • Definir o preenchimento das mensagens dentro do widget.
  • Definir a posição do ícone da placa de notificação em relação ao botão do bot.
  • Definir a posição inicial para a conversa dentro do widget.
Por exemplo :
     <script>
        const chatSettings = {
            URI: YOUR_URI,
            channelId: YOUR_CHANNELID,
            font: '14px "Helvetica Neue", Helvetica, Arial, sans-serif', //layout modification property
            height: '60vh', //layout modification property
            width: '20vw',  //layout modification property
             "colors": {    //custom colors property  
                "branding": "#01538A",
                "text": "#B20637"
            },
         }
                
...
    </script>
Propriedade Descrição 0brigatório? Valor Padrão
actionsLayout Define a direção do layout das ações locais. Quando você define isso como horizontal, esses botões são dispostos horizontalmente e serão encapsulados se o conteúdo transbordar. No vertical
badgePosition A posição do ícone de placa com relação ao botão do ícone. No {"top": "0", "right": "0"}
cardActionsLayout Define a direção do layout das ações do cartão. Quando você define isso como horizontal, esses botões são dispostos horizontalmente e serão colocados se o conteúdo. No vertical
colors As cores usadas no widget de chat. No {"branding": "#1B8FD2", "text": "#212121", "textLight": "#737373"}
conversationBeginPosition A posição inicial da conversa no widget. Se definida como top, as primeiras mensagens serão exibidas na parte superior do widget. Se definida como bottom, a conversa começará na parte inferior. No bottom
font A fonte usada no widget de chat. No 16px "Oracle Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue
fontFamily A família de fontes usada para todo o texto no widget de chat. Essa precedência de definição sobre a configuração font. No "Oracle Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue"
fontSize O tamanho da fonte a ser usado para o texto do cabeçalho, da bolha e do rodapé no widget. Essa definição tem precedência sobre a configuração font. No 16px
globalActionsLayout Define a direção do layout para as ações globais. Se definido "horizontal", os botões são colocados horizontalmente e serão quebrados se o conteúdo transbordar. No vertical
height A altura de uma largura de chat conforme definida por um dos valores de tipo de dados <length> . No 70vh
messagePadding O preenchimento de mensagens no widget de chat. No 15px
position O posicionamento do widget de chat na janela do browser. Deve ser especificado como um objeto JSON. No {bottom: '20px', right: '20px'}
width A largura do widget de chat conforme definido como um dos valores de tipo de dados <length>. No 30vw

Ícones de Botões de Cabeçalho Personalizado

Você pode personalizar a limpeza de mensagem do cabeçalho Imagem do ícone Limpar Mensagens., o botão de alternância de resposta de áudio Imagem do ícone Resposta de Áudio. e o botão de fechamento Imagem do ícone Fechar. de duas maneiras: informando o URL de origem da imagem ou informando uma string SVG bruta. Para strings SVG brutas, a cor de preenchimento do SVG pode ser personalizada por classes CSS, bem como informando um valor de cor na propriedade colors.headerButtonFill nas definições iniciais.
Observação

A personalização de cores pode não funcionar para todos os SVGs, pois eles podem ser multicoloridos ou ter suas próprias cores de traçado e preenchimento.
Ícone Função Flag de Recurso Personalização
Limpar Mensagem Limpa as mensagens atuais e mais antigas na conversa. enableClearMessage: true '<image URL | SVG string>'
Resposta de áudio Alterna o áudio das respostas da habilidade à medida que elas são recebidas. Como este é um botão de alternância, ele tem dois estados, declaração ativada, em que as respostas são faladas, e declaração desativada, em que as respostas não são faladas. enableBotAudioResponse: true
  • Resposta ativada: audioResponseOnIcon: '<image URL | SVG string>'
  • Resposta desativada: audioResponseOffIcon: '<image URL | SVG string>
Fechamento Contrai o widget e exibe o botão Iniciar Imagem do ícone Iniciar.. Este botão não pode ser desativado. Nenhum: Este ícone é sempre ativado no widget de chat. Ele não é exibido no modo incorporado. closeIcon : '<image URL | SVG string>'

Cores Personalizadas

Você pode personalizar o widget modificando suas cores. Há duas abordagens para a personalização de cores:
  • Você pode informar a configuração colors:
    colors: {
        "branding": "#e00",
        "text": "#545454"
    },
    
  • Ou você pode usar variáveis CSS definidas no wrapper de chat (.oda-chat-wrapper):
    .oda-chat-wrapper {
        --color-branding: '#e00';
        --color-text: '#545454';
    }
    }
A cor deve ser hexadecimal. Se você não fornecer uma cor, uma cor padrão será usada. Esses trechos ilustram como modificar a marca e as cores do texto. A cor padrão será usada para a cor do texto secundário.

Dica:

Recomendamos alterar cores usando variáveis CSS.
Variável CSS Chave Descrição
--color-actions-background actionsBackground A cor de fundo dos botões de ação
--color-actions-background-hover actionsBackgroundFocus A cor de fundo dos botões de ação quando eles estão em foco.
--color-actions-background-focus actionsBackgroundHover A cor de fundo dos botões de ação ao passar o mouse sobre eles
--color-actions-border actionsBorder A cor da borda dos botões de ação
--color-actions-text actionsText A cor do texto dos botões de ação
--color-actions-text actionsTextFocus A cor do texto dos botões de ação em foco
--color-actions-text-focus actionsTextHover A cor do texto dos botões de ação ao passar o mouse sobre eles
--color-user-message-background botMessageBackground A cor do segundo plano da bolha de mensagem de resposta da habilidade
--color-bot-text botText A cor do texto em uma mensagem enviada pela habilidade
--color-branding branding A cor principal da marca do widget. Essa cor é usada como segundo plano do cabeçalho e como a cor de focalização nos botões do rodapé.
--color-card-background cardBackground A cor de fundo usada para um cartão.
--color-conversation-background conversationBackground A cor usada para o segundo plano do painel de conversa.
--color-danger-actions-background dangerActionsBackground A cor de fundo do botão de ação de perigo
--color-danger-actions-background-focus dangerActionsBackgroundFocus A cor de fundo do botão de ação de perigo no foco
--color-danger-actions-background-hover dangerActionsBackgroundHover A cor de fundo do botão de ação de perigo ao passar o mouse sobre ele
--color-danger-actions-border dangerActionsBorder A cor da borda do botão de ação de perigo
--color-danger-actions-text dangerActionsText A cor do texto do botão de ação de perigo
--color-danger-actions-text-focus dangerActionsTextFocus A cor do texto do botão de ação de perigo em foco
--color-danger-actions-text-hover dangerActionsTextHover A cor do texto do botão de ação de perigo ao passar o mouse sobre ele
--color-danger-form-actions-background dangerFormActionsBackground A cor de fundo das ações de perigo nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-danger-form-actions-background-focus dangerFormActionsBackgroundFocus A cor de fundo das ações de perigo em foco nas mensagens Tabela, Formulário, Formulário de Tabela e Editar Formulário
--color-danger-form-actions-background-hover dangerFormActionsBackgroundHover A cor de fundo das ações de perigo ao passar o mouse nas mensagens Tabela, Formulário, Tabela-Formulário e Editar-Formulário
--color-danger-form-actions-border dangerFormActionsBorder A cor da borda das ações de perigo nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-danger-form-actions-text dangerFormActionsText A cor do texto das ações de perigo nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-danger-form-actions-text-focus dangerFormActionsTextFocus A cor do texto das ações de perigo em foco nas mensagens Tabela, Form, Table-Form e Edit-Form
--color-danger-form-actions-text-hover dangerFormActionsTextHover A cor do texto das ações de perigo ao passar o mouse nas mensagens Tabela, Form, Table-Form e Edit-Form
--color-error-border errorBorder A cor da borda de uma bolha de mensagem de erro. A cor é usada como a cor da borda da mensagem de erro no nível do formulário que é exibida nas mensagens Editar-Formulário.
--color-error-message-background errorMessageBackground A cor de fundo de uma bolha de mensagem de erro. A cor é usada como a cor de fundo da mensagem de erro no nível do formulário que é exibida nas mensagens Editar-Formulário.
--color-error-title errorTitle A cor do título do conteúdo da mensagem de erro. A cor é usada como cor do texto de erro da mensagem de erro no nível do formulário que é exibida nas mensagens Editar-Formulário.
--color-footer-background footerBackground A cor usada para o segundo plano do rodapé.
--color-footer-button-fill footerButtonFill A cor de preenchimento de um ícone SVG usado nos botões localizados no rodapé do chat.
--color-form-actions-background formActionsBackground A cor de fundo das ações do formulário
--color-form-actions-background-focus formActionsBackgroundFocus A cor de fundo das ações do formulário no foco
--color-form-actions-background-hover formActionsBackgroundHover A cor de fundo das ações do formulário ao passar o mouse
--color-form-actions-border formActionsBorder A cor da borda das ações do formulário
--color-form-actions-text formActionsText A cor do texto das ações do formulário
--color-form-actions-text-focus formActionsTextFocus A cor do texto das ações do formulário no foco
--color-form-actions-text-hover formActionsTextHover A cor do texto das ações do formulário ao passar o mouse
--color-form-background formBackground A cor de fundo dos formulários
--color-form-error formError A cor de preenchimento SVG do ícone nas mensagens de erro no nível do campo e no nível do formulário que são exibidas nas mensagens Editar-Formulário. A cor é usada como a cor da borda do campo de entrada em caso de erro nas mensagens do Formulário de Edição.
--color-form-error-text formErrorText A cor do texto de uma mensagem de erro no nível do campo que é exibida nas mensagens do Formulário de Edição
--color-form-header-background formHeaderBackground A cor de fundo dos títulos de forma
--color-form-header-text formHeaderText A cor do texto dos títulos dos formulários
--color-form-input-background formInputBackground A cor de fundo dos campos de entrada nas mensagens de Formulário de Edição
--color-form-input-border formInputBorder A cor da borda dos campos de entrada nas mensagens de Formato de Edição
--color-form-input-border-focus formInputBorderFocus A cor da borda dos campos de entrada em foco nas mensagens do Formulário de Edição
--color-form-input-text formInputText A cor do texto dos campos de entrada nas mensagens de Formato de Edição
--color-form-label formLabel A cor dos rótulos do formulário
--color-form-text formText A cor do texto dos formulários
--color-global-actions-background globalActionsBackground A cor de fundo dos botões de ação global
--color-global-actions-background-focus globalActionsBackgroundFocus A cor de fundo dos botões de ação global quando eles estão em foco.
--color-global-actions-background-hover globalActionsBackgroundHover A cor de fundo ao passar o mouse sobre os botões de ação global.
--color-global-actions-border globalActionsBorder A cor da borda dos botões de ação global
--color-global-actions-text globalActionsText A cor do texto dos botões de ação global
--color-global-actions-text-focus globalActionsTextFocus A cor do texto nos botões de ação global quando eles estão em foco.
--color-global-actions-text-hover globalActionsTextHover A cor do texto nos botões de ação global quando os usuários passam o mouse sobre eles.
--color-header-background headerBackground A cor de fundo do cabeçalho do widget de chat
--color-header-button-fill headerButtonFill A cor de preenchimento dos ícones SVG usados para os botões no cabeçalho do chat
--color-header-text headerText A cor do título do cabeçalho do chat
--color-input-background inputBackground A cor de fundo do campo de entrada da mensagem no rodapé do chat
--color-input-text inputText A cor do texto de entrada da mensagem no rodapé do chat
--color-links links A cor dos links que estão incorporados nas mensagens da habilidade
--color-error-border N/A A cor da borda de uma bolha de mensagem de erro
--color-error-message-background N/A A cor de fundo de uma bolha de mensagem de erro
--color-error-text N/A A cor da descrição de um conteúdo da mensagem de erro
--color-error-title N/A A cor do título de um conteúdo da mensagem de erro
--color-footer-button-background-hover N/A A cor de fundo dos botões de rodapé ao passar o mouse sobre eles
--color-footer-button-fill-hover N/A A cor de preenchimento do rodapé do cabeçalho ao passar o mouse
--color-header-button-background-hover N/A A cor de fundo dos botões do cabeçalho ao passar o mouse sobre eles.
--color-header-button-fill-hover N/A A cor de preenchimento dos botões do cabeçalho ao passar o mouse
--color-input-border N/A A cor da borda do campo de entrada
--color-user-links N/A A cor dos links que são incorporados nas mensagens do usuário.
--color-popup-background N/A A cor do fundo dos prompts e pop-ups
--color-popup-button-background N/A A cor de fundo dos botões pop-up
--color-popup-button-text N/A A cor do texto dos botões pop-up
--color-popup-horizontal-rule N/A A cor da regra horizontal para a ação do menu de chat multilíngue do separador
--color-popup-item-background-hover N/A A cor do plano de fundo ao passar o mouse sobre os itens da lista pop-up
--color-popup-text N/A O texto e a cor do ícone de prompts e pop-ups
--color-table-background N/A A cor de fundo das tabelas
--color-table-header-background N/A A cor de fundo dos cabeçalhos da tabela
--color-table-separator N/A A cor separadora das linhas da tabela
--color-table-text N/A A cor do texto das tabelas
--color-notification-badge-background notificationBadgeBackground A cor de fundo da placa de notificação da mensagem
--color-notification-badge-text notificationBadgeText A cor do texto da contagem de mensagens na placa de notificação
--color-primary-actions-background primaryActionsBackground A cor de fundo do botão de ação principal
--color-primary-actions-background-focus primaryActionsBackgroundFocus A cor de fundo do botão de ação principal no foco
--color-primary-actions-background-hover primaryActionsBackgroundHover A cor de fundo do botão de ação principal ao passar o mouse sobre ele
--color-primary-actions-border primaryActionsBorder A cor da borda do botão de ação principal
--color-primary-actions-text primaryActionsText A cor do texto do botão de ação principal
--color-primary-actions-text-focus primaryActionsTextFocus A cor do texto do botão de ação principal em foco
--color-primary-actions-text-hover primaryActionsTextHover A cor do texto do botão de ação principal ao passar o mouse sobre ele
--color-primary-form-actions-background primaryFormActionsBackground A cor de fundo das ações principais nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-primary-form-actions-background-focus primaryFormActionsBackgroundFocus A cor de fundo das ações principais em foco nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-primary-form-actions-background-hover primaryFormActionsBackgroundHover A cor de fundo das ações principais ao passar o mouse nas mensagens Tabela, Formulário, Tabela-Formulário e Editar-Formulário
--color-primary-form-actions-border primaryFormActionsBorder A cor da borda das ações principais nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-primary-form-actions-text primaryFormActionsText A cor do texto das ações principais nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-primary-form-actions-text-focus primaryFormActionsTextFocus A cor de fundo das ações principais em foco nas mensagens Tabela, Formulário, Tabela-Form e Editar-Form
--color-primary-form-actions-text-hover primaryFormActionsTextHover A cor de fundo das ações principais ao passar o mouse nas mensagens Tabela, Formulário, Tabela-Formulário e Editar-Formulário
--color-rating-star ratingStar A cor que é aplicada às estrelas de classificação em uma mensagem de feedback quando os usuários passam o mouse sobre elas ou as selecionam. Se você não especificar uma cor, a cor branding será usada.
N/A recognitionViewBackground A cor de fundo da view em que o texto reconhecido é exibido quando os usuários ativam o modo de voz. Se você não definir essa cor, a cor definida para headerBackground será usada.
N/A recognitionViewButtonFill A cor de preenchimento SVG para o modo de texto de voz alterna quando os usuários mudam para o modo de voz.
--color-recognition-view-text recognitionViewText A cor usada para o texto que é reconhecido na entrada de voz do usuário. Se você não definir essa cor, a cor definida para text será usada.
N/A shareMenuText A cor usada para os itens do menu de compartilhamento. Essa cor substitui o valor definido para a chave de texto, se informado.
--color-table-actions-background-focus tableActionsBackgroundFocus A cor de fundo das ações da tabela em foco
--color-table-actions-text-focus tableActionsTextFocus A cor do texto das ações da tabela em foco
--color-table-actions-text-hover tableActionsTextHover A cor do texto das ações da tabela ao passar o mouse
--color-text text A cor do texto das mensagens no widget de chat.
-color-text-light textLight A cor do texto secundário nas mensagens, como as descrições de cartão no widget de chat.
--color-timestamp timestamp A cor do timestamp relativo.
--color-typing-indicator typingIndicator A cor de preenchimento de fundo usada para o indicador de digitação.
N/A userMessageBackgound A cor de fundo da bolha usada para mensagens do usuário.
--color-user-text userText A cor do texto em uma mensagem enviada pelo usuário.
--color-visualizer visualizer A cor usada para as barras no gráfico do visualizador. Se você não definir essa cor, a cor definida para branding será usada.
--color-visualizer-container-background visualizerContainerBackground A cor de fundo do contêiner do visualizador de voz que é exibida quando os usuários alternam para o modo de voz. Se você não definir essa cor, a cor definida para userMessageBackgound será usada.
Observação

Você pode definir uma imagem para conversationBackground, headerBackground e footerBackground. Esses campos podem aceitar quaisquer parâmetros que possam ser especificados para a propriedade background de CSS. Por exemplo :
colors: {conversationBackground: 'no-repeat url("https://images.unsplash.com/photo-1582580470647-e3be5274d6a0?ixlib=rb-1.2.1&auto=format&fit=crop&w=668&q=80")'},

Ícones Personalizados

Você pode personalizar os ícones, incluindo os do ícone de habilidade, o ícone do logotipo de chat e os ícones de avatar da habilidade e do usuário.

Você pode informar o URL do ativo de imagem para estes ícones. Para alguns ícones, você pode usar o URL ou informar uma string SVG (Scalable Vector Graphics). Você pode informar os dados SVG brutos para ícones que suportam strings SVG. A view de chat os renderiza como um SVG em linha.

Dica:

As strings SVG são carregadas mais rapidamente do que os ativos de imagem. Elas também permitem animar a imagem e alterar sua cor. O layout definido para a propriedade theme é aplicado a strings SVG para botões de anexo, envio e microfone, mas não para os outros ativos de imagem.
A partir da Versão 21.10, você pode usar a propriedade icons para agrupar todos os ícones personalizados em um único campo. Os ícones anteriores à versão 21.10 ainda são suportados, mas os valores informados com o objeto icons têm precedência. Todos os campos no objeto icons suportam caminhos de recursos de imagem e strings SVG brutas.
const settings = {
    // ...,
    icons: {
        rating: '<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"><path d="M15.994 3.006a5.7 5.7 0 00-3.795 1.707L12 4.916l-.199-.202a5.676 5.676 0 00-8.128 0c-2.231 2.275-2.231 5.953 0 8.228L12 21.428l8.326-8.486A5.873 5.873 0 0022 8.828a5.873 5.873 0 00-1.675-4.115A5.693 5.693 0 0016.262 3z"/></svg>'
    }
};
Propriedade (Versão 21.10) Propriedade (Versões Anteriores) Descrição String SVG Compatível?
avatarAgent agentAvatar Para habilidades integradas com agentes ao vivo, este ícone é exibido ao lado de mensagens do agente ao vivo. O avatarBot (ou agentAvatar) aparecerá se essa propriedade não estiver definida. Sim
avatarbot botIcon O ícone exibido ao lado da mensagem de resposta da habilidade. Este ícone de habilidade só será exibido se você fornecer esse ícone. Caso contrário, nenhum ícone será exibido. Sim
avatarUser personIcon O ícone exibido ao lado das mensagens do usuário. Este ícone não é exibido por padrão: ele só será exibido se você defini-lo. Sim
clearHistory clearMessageIcon O ícone do botão Limpar Mensagem localizado no cabeçalho do widget Sim
close N/A O ícone exibido para o botão fechar em banners de mensagem de erro, visualizações de imagem expandidas e o in-widget WebView. Sim
collapse closeIcon O ícone do botão, localizado no cabeçalho da view de chat, que minimiza a view de chat. Sim
download downloadIcon O ícone usado para o botão de download do anexo que aparece em cada mensagem de anexo enviada pela habilidade. download - Sim
error errorIcon O URL da imagem usada para o ícone de erro.
  • errorIcon - Não
  • error - Sim
No
expandImage expandImageIcon O ícone usado para o controle de expansão da imagem que aparece em cada mensagem de anexo de imagem enviada pela habilidade. expandImage - Sim
fileAudio audioIcon O ícone de anexo de áudio, exibido quando o URL de origem do anexo não está acessível.
  • audioIcon - Não
  • fileAudio - Sim
fileGeneric fileIcon O ícone de anexo de arquivo.
  • fileIcon - Não
  • fileGeneric - Sim
fileImage imageIcon O ícone de anexo de imagem, que é exibido quando não é possível acessar a origem do anexo.
  • fileImage - Não

    imageIcon - Sim

fileVideo videoIcon O ícone de anexo de vídeo, que é exibido quando não é possível acessar o URL de origem do anexo.
  • videoIcon - Não
  • fileVideo - Sim
keyboard keyboardIcon O ícone de teclado, exibido no botão que alterna o modo de voz para o modo de teclado. Sim
launch botButtonIcon O botão do bot de habilidade, exibido quando o widget de chat é minimizado.
  • botButtonIcon - Não

    launch - Sim

logo logoIcon O ícone do logotipo de chat que é exibido no cabeçalho do widget de chat
  • logoIcon - Não
  • logo - Sim
mic micIcon O ícone do botão mic no rodapé do widget de chat que aparece quando Sim
rating N/A O ícone exibido para os botões de ação de feedback no componente de classificações. Para obter a melhor experiência do usuário para a ação de passar o mouse, passe uma string de ícone SVG preenchida. rating - Sim
send sendIcon O ícone do botão de envio de mensagem Sim
shareMenu attachmentIcon O ícone de upload de anexo Sim
shareMenuAudio N/A O ícone do item de menu de áudio no pop-up do menu compartilhar. Sim
shareMenuFile N/A O ícone do item de menu do arquivo no pop-up do menu de compartilhamento. Sim
shareMenuLocation N/A O ícone do botão do menu compartilhar no pop-up do menu compartilhar. Sim
shareMenuVisual N/A O ícone do item de menu de imagem/vídeo no pop-up do menu de compartilhamento Sim
ttsOff audioResponseOffIcon O ícone do botão de alternância quando as respostas de áudio estão desativadas. Sim
ttsOn audioResponseOnIcon O ícone do botão de alternância quando as respostas de áudio estão ativadas. Sim
typingIndicator chatBubbleIcon O ícone animado no painel de conversas que indica uma resposta sendo enviada da habilidade. Sim
Você também pode redimensionar o ícone para o ícone de bolha de carregamento de chat (ativado com chatBubbleIcon).
Nome da Propriedade Descrição 0brigatório? Valor Padrão
chatBubbleIconHeight A altura do ícone de bolha de carregamento de chat. No 42px
chatBubbleIconWidth A largura do ícone de bolha de carregamento de chat. No 56px

Strings Personalizadas

Você pode personalizar as seguintes strings e fornecê-las como texto localizado. Conforme ilustrado pelo objeto a seguir, a localização requer que você forneça uma configuração regional válida para cada entrada. É necessário atualizar todas as chaves para configurações regionais diferentes de en-us. Caso contrário, as traduções de en-us serão exibidas para os valores ausentes.
"i18n": {
    "fr": {
        "chatTitle": "Soutien"
    },
    "en-us": {
        "chatTitle": "Support"
    },
    "es": {
        "chatTitle": "Apoyo"
    },
    "zh-cn": {
        "chatTitle": "支持"
    }
}
Se forem fornecidas strings personalizadas para qualquer configuração regional diferente de en, todas as chaves deverão ser especificadas para essa configuração regional. Caso contrário, as traduções en serão exibidas para os valores ausentes.
<script>
const chatSettings = {
    URI: '<Chat server URI>',
    channelId: '<Channel ID>',
    userId: '<User ID>',
    fontFamily: '"Helvetica Neue", Helvetica, Arial, sans-serif',
    locale: 'en',
    enableClearMessage: true,
    icons: {
        launch: 'style/Robot.png',
        avatarBot: 'style/Robot.png',
        avatarUser: 'style/userIcon.png'
    }
};

function initSDK(name) {
    // If WebSDK is not available, reattempt later
    if (!document || !WebSDK) {
        setTimeout(function() {
            initSDK(name);
        }, 2000);
        return;
    }

    // Default name is Bots
    if (!name) {
        name = 'Bots';
    }
Chave Descrição Valor Padrão
agent O texto usado para o agente 'Agent'
agentMessage O indicador de mensagem de habilidade para leitores de tela. É falado pelos leitores de tela antes das respostas da habilidade. O texto (`{0}`) é substituído pelo nome do agente. `'{0} says'`
attachment_audio O texto usado para a declaração TTS de um anexo de áudio. 'Audio attachment'
attachment_file O texto usado para a declaração TTS de um anexo de arquivo. 'File attachment'
attachment_image O texto usado para a declaração TTS de um anexo de imagem. 'Image attachment'
attachment_video O texto usado para a declaração TTS de um anexo de vídeo. 'Video attachment'
attachmentAudioFallback A mensagem de fallback exibida no lugar de um anexo de áudio se o áudio não puder ser renderizado pelo cliente. O texto entre {0} e {/0} é definido como um link para fazer download do arquivo. Your browser does not support embedded audio. However you can {0}download it{/0}.
attachmentVideoFallback A mensagem de fallback exibida no lugar de um anexo de vídeo se o vídeo não puder ser renderizado pelo cliente. O texto entre {0} e {/0} é definido como um link para fazer download do arquivo. Your browser does not support embedded video. However you can {0}download it{/0}.
audioResponseOn A dica de ferramenta que aparece quando o usuário passa o mouse sobre o botão "off" da declaração de áudio no cabeçalho. Turn audio response on
avatarAgent O texto alternativo usado para o ícone do agente que é exibido ao lado das mensagens do agente. Agent icon
avatarBot O texto alternativo usado para o ícone de habilidade que é exibido ao lado das mensagens da habilidade. Bot icon
avatarUser O texto alternativo usado para o ícone do usuário que é exibido ao lado das mensagens do usuário. User icon
card O identificador do cartão. 'Card {0}'. Você pode localizar a string colocando o espaço reservado ordinal ({0}) antes ou depois da palavra. Continuaremos a suportar a string 'Card' usada em releases anteriores que não incluem o espaço reservado ordinal. Para esta corda, o ordinal é colocado após a palavra. Se quiser silenciar a declaração, informe uma string vazia (card: '').
cardImagePlaceholder O texto do placeholder que é exibido enquanto a imagem do cartão é extraída e carregada. Loading image
cardImagePlaceholder O texto do placeholder que é exibido enquanto a imagem do cartão é extraída e carregada. Loading image
cardNavNext O label do botão de navegação do cartão para exibir o próximo cartão em um layout horizontal. Next card
cardNavPrevious O label do botão de navegação do cartão para exibir o cartão anterior em um layout horizontal. Previous card
chatSubtitle Define o subtítulo da view de chat, que é exibido abaixo do título no cabeçalho da view de chat. Se o flag do subtítulo estiver definido e um (ou ambos) os flags showConnectionStatus e showTypingIndicator estiverem definidos como verdadeiro, o subtítulo será exibido em vez do status da conexão ou do indicador de digitação. N/A
chatTitle O título do widget de chat que é exibido no cabeçalho. Ask
clear A dica de ferramenta que aparece quando o usuário passa o mouse sobre o botão Limpar Mensagens no cabeçalho. Clear
close A dica de ferramenta que aparece quando o usuário passa o mouse sobre o botão de fechamento do widget no cabeçalho. Close
closing O texto de status que é exibido enquanto a conexão entre o widget de chat e o servidor está sendo fechada. Closing
connected O texto de status que é exibido enquanto a conexão entre o widget de chat e o servidor é estabelecida. Connected
connecting O texto de status que é exibido quando o widget de chat se conecta ao servidor de chat. Connecting
connectionFailureMessage A mensagem de falha que é exibida quando o widget não consegue se conectar à habilidade. Sorry, the assistant is unavailable right now. If the issue persists, contact your help desk.
connectionRetryLabel O rótulo do botão de nova conexão. Try Again
defaultGreetingMessage A resposta de saudação do cliente padrão exibida quando a resposta da habilidade não foi recebida dentro do número de segundos definido por defaultGreetingTimeout.. Hey, Nice to meet you! Allow me a moment to get back to you.
defaultSorryMessage A resposta padrão do cliente quando a resposta da habilidade não tiver sido recebida com o número de segundos definido por typingIndicatorTimeout. Unfortunately, I am not able to get you the right content. Please try again.
defaultWaitMessage A resposta padrão que é exibida no intervalo quando uma resposta de habilidade real não é recebida. Esse intervalo é definido, em segundos, por defaultWaitMessageInterval I'm still working on your request. Thank you for your patience!
disconnected O texto de status que é exibido quando a conexão entre o widget de chat e o servidor é fechada. Disconnected
download O texto de acessibilidade do botão de download que aparece em cada mensagem de anexo enviada pela habilidade. Download
endConversation A dica de ferramenta que aparece ao passar o mouse sobre o botão do cabeçalho da conversa final. End Conversation
endConversationConfirmMessage A mensagem de confirmação exibida quando um usuário clica no botão Encerrar conversa. Are you sure you want to end the conversation?
endConversationDescription A mensagem de descrição que é exibida junto com a mensagem de confirmação no prompt de conversa final. This will also clear your conversation history.
errorSpeechInvalidUrl A mensagem de erro exibida quando o URL do servidor de fala não é definido. ODA URL for connection is not set. Please pass 'URI' parameter during SDK initialization.
errorSpeechMultipleConnection A mensagem de erro exibida quando há várias tentativas de conexões de fala em um curto intervalo. Another voice recognition is ongoing. Can't start a new one.'
errorSpeechTooMuchTimeout A mensagem de erro exibida quando um usuário fornece uma mensagem de voz muito grande para ser reconhecida. Too much voice input to recognize. Can not generate recognized text.
errorSpeechUnsupportedLocale A mensagem de erro exibida quando há uma tentativa de gravação e uma configuração regional não suportada é configurada para reconhecimento de voz. The set speech locale is not supported. Cannot start recording.
imageViewerClose O texto de acessibilidade do botão que fecha a imagem expandida. Close image viewer
imageViewOpen O texto de acessibilidade do botão que expande a imagem. Open image viewer
inputPlaceholder O texto do placeholder que aparece no campo de entrada do usuário. Type a message
itemIterator Identificador de item em uma lista de itens em uma mensagem Table, Form ou Table-Form. O texto ({0}) é substituído pelo índice do item. Item {0}
language_<languageTag> O label do idioma que é representado por languageTag. Por exemplo, English para en no menu suspenso de seleção de idioma que está disponível quando você configura o chat multilíngue. | Language Label
language_detect O rótulo da opção de detecção automática no menu suspenso de seleção de idioma. Detect Language
languageSelectDropdown A dica de ferramenta que aparece quando os usuários passam o mouse sobre o botão de seleção de idioma no cabeçalho. Select chat language
linkField O texto de declaração de substituição para um campo de link em uma mensagem Table, Form ou Table-Form. O placeholder ({0}) é substituído pelo linkLabel do campo. Click on the highlighted text to open Link for {0}
noSpeechTimeout O texto de status que é exibido quando o Servidor de Chat não consegue reconhecer a voz. Could not detect the voice, no message sent.
noText O rótulo do botão de confirmação Sem. No
openMap O label do botão de ação que é usado para abrir um mapa de localização. Open Map
previousChats O texto de status que é exibido no final das mensagens mais antigas. Previous conversations
ratingStar O texto da dica de ferramenta que é exibido para cada estrela de classificação em uma mensagem de feedback. O espaço reservado `{0}` é substituído pelo número de estrelas que o usuário selecionou. Rate {0} star
recognitionTextPlaceholder Quando o modo de voz é ativado, este é o texto do placeholder exibido no campo de texto de reconhecimento. Speak your message
relTimeDay O timestamp relativo exibido todos os dias desde o recebimento da mensagem anterior. {0} é substituído pelo número de dias decorridos. {0}d ago
relTimeHr O timestamp relativo exibido a cada hora nas primeiras 24 horas após o recebimento da mensagem anterior. {0} é substituído pelo número de horas decorridas. {0}hr ago
relTimeMin O timestamp relativo exibido a cada minuto desde o recebimento da última mensagem. {0} é substituído pelo número de minutos decorridos. {0}min ago
relTimeMoment O timestamp relativo que é exibido dez segundos depois que a mensagem foi recebida e antes de 60 segundos decorridos desde que a última mensagem foi recebida. A few seconds ago
relTimeMon O timestamp relativo exibido todos os meses desde o recebimento da mensagem anterior. {0} é substituído pelo número de meses decorridos. {0}mth ago
relTimeNow O timestamp relativo exibido para uma nova mensagem. Now
relTimeYr O timestamp relativo exibido a cada ano após o recebimento da mensagem anterior. {0} é substituído pelo número de anos decorridos. {0}yr ago
requestLocation O texto exibido enquanto a localização do usuário é solicitada. Requesting location
requestLocationDeniedPermission A mensagem de erro exibida quando a permissão para acessar o local é negada. Location permission denied. Please allow access to share your location, or else type in your location.
requestLocationDeniedTimeout A mensagem de erro exibida quando a solicitação de local não é resolvida devido a um timeout. Taking too long to get your current location. Please try again, or else type in your location.
requestLocationDeniedUnavailable A mensagem de erro exibida quando a solicitação de local é negada porque o local atual do dispositivo cliente está indisponível. Your current location is unavailable. Please try again, or else type in your location.
requestLocationString O texto de erro que é exibido quando o usuário nega a solicitação de localização. Cannot access your location. Please allow access to proceed further.
retryMessage O texto que é exibido quando a mensagem do usuário não é enviada ao servidor. Try again
send A dica de ferramenta que aparece quando o usuário passa o mouse sobre o botão de envio no rodapé. Send
shareAudio O texto do item de menu no pop-up de compartilhamento de um arquivo de áudio Share Audio
shareFailureMessage A mensagem de erro exibida quando o botão de ação de compartilhamento em uma mensagem é clicado, mas a API de compartilhamento não está disponível no dispositivo cliente ou a solicitação de compartilhamento é rejeitada. Sorry, sharing is not available on this device.
shareFile O texto do item de menu no pop-up de compartilhamento para compartilhar um arquivo genérico Share File
shareLocation O texto do item de menu para compartilhar um local no pop-up Share Location
shareVisual O texto do item de menu no pop-up de compartilhamento para compartilhar uma imagem ou um arquivo de vídeo Share Image/Video
skillMessage Um indicador de mensagem de habilidade para leitores de tela. É falado pelos leitores de tela antes das respostas da habilidade. Skill says
speak A dica de ferramenta que aparece quando o usuário passa o mouse sobre o botão de fala no rodapé. Speak
typingIndicator O texto de acessibilidade para o indicador de digitação. É falado pelos leitores de tela. Waiting for response
upload A dica de ferramenta que aparece quando o usuário passa o mouse sobre o botão de upload no rodapé. Share popup
uploadFailed O texto de erro que é exibido quando um upload falha. Upload Failed.
uploadFileSizeLimitExceeded O texto de erro que é exibido quando o tamanho do arquivo de upload excede o limite. Upload Failed. File size should not be more than 25MB.
uploadFileSizeZeroByte O texto do erro que é exibido quando o tamanho do arquivo de upload é de 0 bytes. Upload Failed. Files of size zero bytes cannot be uploaded.
uploadUnsupportedFileType O texto de erro que é exibido quando há uma tentativa de upload para um tipo de arquivo não suportado. Upload Failed. Unsupported file type.
userMessage Um indicador de mensagem do usuário para leitores de tela. É falado pelos leitores de tela antes das mensagens do usuário. I say
utteranceGeneric A descrição de fallback para a mensagem de resposta usada na declaração. Message from skill.
webViewAccessibilityTitle O título de acessibilidade padrão para webview que é lido em voz alta por leitores de tela. In-widget WebView to display links
webViewClose O título padrão label/tooltip do botão de fechamento da webview. Done
webViewErrorInfoDismiss A dica de ferramenta para o botão de descarte que é usado para fechar o link de fallback dentro da webview. 'Dismiss'
webViewErrorInfoText O texto informativo exibido na webview quando o link clicado não pode ser aberto dentro dela. O texto entre {0} e {/0} é definido como link original que é aberto em uma nova guia ou janela. Sorry, we can't open this page in the chat window. Click {0}here{/0} to open it in your browser.
yesText O rótulo do botão de confirmação Sim. Yes
editFieldErrorMessage A mensagem de erro no nível do campo que é exibida quando o valor inserido pelo usuário é inválido para esse campo. O SDK assume esta mensagem como padrão quando a habilidade não fornece uma mensagem de erro do cliente. Field Input is invalid
editFormErrorMessage A mensagem de erro no nível do formulário que é exibida abaixo da ação de envio do formulário para validação no lado do cliente. Esta mensagem é exibida quando pelo menos um dos campos não é válido e há mais de um campo. O SDK assume como padrão essa mensagem quando a habilidade não fornece uma mensagem de erro no payload da mensagem. Some of the fields need your attention.
noResultText O texto de status que é exibido quando não há correspondências de uma pesquisa de usuário na exibição de lista de várias seleções. No more results

Configurar Opções do Menu de Compartilhamento

Por padrão, o menu de compartilhamento exibe opções para os seguintes tipos de arquivo:
  • arquivos de mídia visual (imagens e vídeos)
  • arquivos de áudio
  • arquivos gerais, como documentos, PDFs e planilhas
  • localização


A definição shareMenuItems permite restringir os itens exibidos no menu de compartilhamento. A definição aceita um array de strings com chaves mapeadas para os itens do menu de compartilhamento: 'visual' para o item Compartilhar Imagem/Vídeo, 'audio' para o item Compartilhar Áudio, 'file' para o item Compartilhar Arquivo e 'location' para o item Compartilhar Local. Você pode usar essas chaves, que não diferenciam maiúsculas de minúsculas, para especificar quais itens estão disponíveis no menu (['visual', 'location'], por exemplo). Todos os itens de menu estão disponíveis quando o array está vazio ou quando um valor inválido é informado.
Observação

Você pode desativar a funcionalidade de anexo definindo enableAttachment como false.


O uso da funcionalidade de anexo geralmente requer a atualização da política de segurança de rede do site do host. Os anexos, que são submetidos a upload para o armazenamento de objetos do Oracle Digital Assistant usando chamadas HTTP, podem ser bloqueados pelas políticas CORS do site. Com o site bloqueando os uploads, um erro pode ser exibido na console do browser indicando que o cliente bloqueou a solicitação por causa de uma política CORS. Para corrigir esses problemas, a política de segurança de rede do site do host deve ser atualizada para permitir o domínio do Oracle Digital Assistant. Isso permite que as solicitações de upload sejam processadas. Como a política CORS não se aplica a WebSockets, as conversas entre o SDK e as habilidades não são afetadas por tais restrições.
Observação

Não ative essa definição se a habilidade estabelecer conexão com uma instância do ODA na Versão 20.08 ou for executada em qualquer versão anterior à 20.08. Esta propriedade só se aplica a conexões ativadas por autenticação do cliente com as Versões 20.12 e superior da plataforma ODA.

Itens de Menu de Compartilhamento Personalizados

Você pode personalizar o item de menu de compartilhamento para exibir tipos de arquivo específicos. Para criar esse menu personalizado, informe cada item de menu como objeto do array shareMenuItems:
{
type: string,       // Space separated list of file formats, pass '*' to allow all supported file types

label: string,      // OPTIONAL, label for the share menu item, should preferably be configured through i18n strings

icon?: string,      // OPTIONAL, Icon image source path or SVG source string, the file icon is displayed as fallback

maxSize?: number    // OPTIONAL, Maximum file size allowed for upload in KiloBytes, the maximum and fallback value is 25 MB (25600 KB)
}
O item de menu pode ser informado com ou sem a categoria string.

Dica:

Para suportar labels em vários idiomas, recomendamos usar i18n em vez da tag label.
O trecho de código a seguir ilustra como informar o array shareMenuItems na variável settings. Você define os labels informando-os com chaves share_, que também são ilustradas nesse trecho de código. Você pode definir o label para um caractere curinga (*) usando a chave i18n share_all.
const settings = {
    shareMenuItems: [ {
        type: 'odf',
        label: 'Upload ODF',
    }, {
        type: 'pdf'
    }, {
        type: 'jpg png jpeg',
        icon: 'https://image-source-site/imageicon'
    }, {
        type: 'doc docx xls',
        maxSize: 4096
    }],
    i18n: {
        en: {
            share_pdf: 'Upload PDF',
            share_jpg_png_jpeg: 'Upload Image',
            share_doc_docx_xls: 'Upload document'
        }
    }
}

Personalizar Classes CSS

Você pode substituir as classes CSS do widget por regras de estilo personalizadas para personalizar ainda mais a aparência.
Classe Componente
oda-chat-launch-button O botão acionador do widget de chat
oda-chat-button-clear O botão de limpeza de mensagens
oda-chat-button-close O botão de fechamento do widget
oda-chat-button-narration O botão de alternância de resposta de áudio da habilidade
oda-chat-button-send O botão de envio de mensagem
oda-chat-button-upload O botão de upload de arquivo
oda-chat-card A mensagem do cartão
oda-chat-closing Aplicado como um irmão ao oda-chat-connection-status quando o widget está sendo desconectado do servidor
oda-chat-connected Aplicado como um irmão ao oda-chat-connection-status quando o widget está conectado ao servidor
oda-chat-connecting Aplicado como um irmão a oda-chat-connection-status quando o widget está se conectando ao servidor
oda-chat-connection-status O status da conexão. Cada valor de conexão tem sua própria classe também, como oda-chat-connected, oda-chat-disconnected ou oda-chat-connecting.
oda-chat-conversation O contêiner da conversa
oda-chat-disconnected Aplicado como um irmão ao oda-chat-connection-status quando o widget é desconectado do servidor
oda-chat-footer O rodapé do widget de chat
oda-chat-footer-button A classe comum para todos os botões do rodapé
oda-chat-header O cabeçalho do widget de chat
oda-chat-header-button A classe comum de todos os botões do cabeçalho
oda-chat-icon-wrapper O encapsulador da habilidade ou de uma pessoa exibido junto com a mensagem.
oda-chat-left O encapsulador da mensagem da habilidade
oda-chat-logo O logotipo no cabeçalho do widget
oda-chat-message A classe do encapsulador comum para todas as mensagens de chat
oda-chat-message-action-location O botão de ação da solicitação de localização
oda-chat-message-action-postback O botão de ação de postback
oda-chat-message-actions O encapsulador dos botões de ação
oda-chat-message-bubble A bolha de mensagem
oda-chat-message-global-actions O encapsulador de botões de ação global
oda-chat-message-icon A imagem da habilidade ou de uma pessoa que é exibida ao lado da mensagem.
oda-chat-notification-badge A placa de notificação para mensagens que não foram exibidas.
oda-chat-rating-star O botão de classificação por estrelas em uma mensagem de feedback
oda-chat-rating-star-icon O ícone SVG para o botão de estrela de classificação
oda-chat-right O encapsulador da mensagem do usuário
oda-chat-title O título no cabeçalho do widget
oda-chat-user-input A área de texto de entrada do usuário
oda-chat-widget O componente de chat expandido, que envolve o cabeçalho, a conversa e o rodapé do widget.
oda-chat-wrapper O encapsulador de todo o componente de chat

Personalizar o Timestamp

Por padrão, o timestamp exibido no cabeçalho quando timestampHeaderMode e timestampHeaderFormat são definidos exibe o formato como o dia da semana, mês, data, ano e hora da localidade (am e pm). Por exemplo, quinta-feira, 13 de agosto de 2020, 9:52:22 AM. Você pode configurar esse timestamp informando opções de formatação na definição timestampFormat. Você pode formatar o timestamp informando uma string padrão de tokens de formatação ou informando um objeto contendo opções Intl.DateTimeFormat.

Formatar a Data/Hora com Strings Padrão

As strings padrão usadas para formatar o timestamp são compostas de tokens de formato. Por exemplo, informar timestampFormat: 'hh:mm:ss a' define o timestamp como 09:30:14 pm.
Observação

Esses tokens diferenciam maiúsculas de minúsculas; por exemplo, informar yyyy em vez de YYYY impediria que o ano fosse exibido.
Componente Token Saída
Dia do mês
  • D
  • Do
  • DD
  • 1 2 ... 30 31
  • 1º 2º... 30º 31º
  • 1 2 ... 30 31
Dia da semana
  • d
  • dd
  • dddd
  • 0 1 ... 5 6
  • Dom Seg... Sex Sáb
  • Domingo Segunda-feira... Sexta-feira Sábado
Mês
  • M
  • MM
  • MMM
  • MMMM
  • 1 2 ... 11 12
  • 1 2 ... 11 12
  • Jan Fev... Nov Dez
  • Janeiro Fevereiro... Novembro Dezembro
Ano
  • YY
  • YYYY
  • 70 71 ... 29 30
  • 1,970 1,971 ... 2,029 2,030
Hora
  • H
  • HH
  • h
  • hh
  • 0 1 ... 22 23
  • 0 1 ... 22 23
  • 1 2 ... 11 12
  • 1 2 ... 11 12
minuto
  • m
  • mm
  • 0 1 ... 58 59
  • 0 1 ... 58 59
Segundo
  • s
  • ss
  • 0 1 ... 58 59
  • 0 1 ... 58 59
Segundo Fracional
  • S
  • SS
  • SSS
  • 0 1 ... 8 9
  • 0 1 ... 98 99
  • 0 1 ... 998 999
AM/PM
  • A
  • a
  • AM PM
  • am pm
Fuso horário
  • Z
  • ZZ
  • -7:0 -6:0 ... +6:0 +7:0
  • -0700 -0600 ... +0600 +0700li

Formatar o Timestamp com Objetos Intl.DateTimeFormat

O timestamp também pode ser formatado usando as opções definidas para o objeto Intl.DateTimeFormat. As propriedades especificadas com o objeto incluem:
Propriedade Valores
dateStyle 'full' | 'long' | 'medium' | 'short'
timeStyle 'full' | 'long' | 'medium' | 'short'
weekday
  • 'long' (por exemplo, Thursday)
  • 'short' (por exemplo, Thu)
  • 'narrow' (por exemplo, T)
day
  • 'numeric'
  • '2-digit'
month
  • 'numeric' (por exemplo, 2)
  • '2-digit' (por exemplo, 02)
  • 'long' (por exemplo, March)
  • 'short' (por exemplo, Mar)
  • 'narrow' (por exemplo, M)
year
  • 'numeric'
  • '2-digit'
era
  • 'long' (por exemplo, Anno Domini)
  • 'short' (por exemplo, AD)
  • 'narrow' (por exemplo, A)
hour
  • 'numeric'
  • '2-digit'
minute
  • 'numeric'
  • '2-digit'
second
  • 'numeric'
  • '2-digit'
timeZoneName
  • 'long' (por exemplo, British Summer Time)
  • 'short' (por exemplo, GMT+1)
timeZone O fuso horário. Todas as implementações devem reconhecer UTC. O valor padrão é o fuso horário padrão do runtime. As implementações também podem reconhecer os nomes de fuso horário do banco de dados de fuso horário IANA, como Asia/Shanghai, Asia/Kolkata, America/New_York.
hour12 Se deve ser usado o formato de 12 horas (em vez do formato de 24 horas). Os valores são true e false.

Personalizar o Medidor de Classificação de Mensagem de Feedback

A mensagem do componente de feedback permite coletar feedback do usuário. Se você estiver usando o SDK 21.10, a apresentação padrão do componente de feedback será um sistema de classificação por estrelas, uma linha horizontal de estrelas destacadas à medida que os usuários passam o mouse sobre elas e as selecionam. Você pode alterar o comportamento do componente usando o componente Feedback do Usuário, mas pode personalizar a aparência dos componentes usando as definições do SDK.

Você pode alterar o ícone dos botões de seleção de classificação do componente informando o ícone de sua escolha definindo o ícone rating no campo icons.

Dica:

Para a melhor experiência do usuário, use uma string SVG sólida sem uma cor de preenchimento, pois permite um destaque reconhecível ao passar o mouse.
new WebSDK({
    URI: '<Server URI>',
    //...,
    icons: {
        rating: '<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M15.994 3.006a5.7 5.7 0 00-3.795 1.707L12 4.916l-.199-.202a5.676 5.676 0 00-8.128 0c-2.231 2.275-2.231 5.953 0 8.228L12 21.428l8.326-8.486A5.873 5.873 0 0022 8.828a5.873 5.873 0 00-1.675-4.115A5.693 5.693 0 0016.262 3z"/></svg>'    // A heart icon
    }
})
A cor do ícone nos dois estados, desmarcada e pairada/selecionada, pode ser configurada com os campos de cor ratingStar e ratingStarFill na definição de cores, respectivamente.
new WebSDK({
    URI: '<Server URI>',
    //...,
    icons: {
        rating: '<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M15.994 3.006a5.7 5.7 0 00-3.795 1.707L12 4.916l-.199-.202a5.676 5.676 0 00-8.128 0c-2.231 2.275-2.231 5.953 0 8.228L12 21.428l8.326-8.486A5.873 5.873 0 0022 8.828a5.873 5.873 0 00-1.675-4.115A5.693 5.693 0 0016.262 3z"/></svg>'    // A heart icon
    },
    colors: {
        ratingStar: '#ffebee',
        ratingStarFill: '#d32f2f'
    }
})

Dica:

Você pode personalizar a saída dos prompts pelo componente Feedback do Usuário editando os pacotes de recursos relacionados ao Feedback acessados por meio da página Configuração do Pacote de Recursos ou editando as chaves systemComponent_Feedback_ em um arquivo CSV do pacote de recursos exportado.

Enviar a Mensagem Inicial quando o Histórico de Conversas Estiver Vazio

As mensagens initUserHiddenMessage são enviadas independentemente do histórico de conversas do usuário; elas são enviadas na primeira vez que o widget de chat é aberto para cada sessão. Para enviar a mensagem inicial quando o histórico de conversas estiver vazio, vincule um listener de eventos ao método Bots.on(). Por exemplo :
Bots = new WebSDK(chatSettings);

var isHandled = false;
var message = ;

Bots.on(WebSDK.EVENT.WIDGET_OPENED, function() {
    if (!isHandled && Bots.isConnected() && !Bots.getConversationHistory().messagesCount) {
        Bots.sendMessage(message, { hidden: true });
        isHandled = true;
    }
});

Bots.on(WebSDK.EVENT.NETWORK, function(state) {
    if (!isHandled && Bots.isConnected() && Bots.isChatOpened() && !Bots.getConversationHistory().messagesCount) {
        Bots.sendMessage(message, { hidden: true });
        isHandled = true;
    }
});

Bots.connect();

Injeção de Serviço de Síntese de Fala

Ao utilizar o serviço nativo de texto para fala do dispositivo, a síntese de texto para fala (TTS) do SDK usa o serviço do dispositivo para permitir que as respostas da habilidade sejam pronunciadas assim que forem recebidas pela instância do Web SDK. Esta é a abordagem pronta para uso e, embora seja confiável, tem algumas desvantagens:
  • Muitas vezes, você está limitado a vozes não naturais e genéricas que podem prejudicar sua marca.
  • O dispositivo de um usuário pode não suportar vozes específicas de gênero.
  • Alguns frameworks nativos (Cordova e ReactNative entre eles) exigem bibliotecas de terceiros para serviços TTS porque suas webviews não expõem as APIs de síntese de fala nativas exigidas pelo Web SDK.
Para resolver esses desafios, você pode definir a voz usada para as respostas da habilidade injetando um serviço TTS na instância do SDK iniciando o SDK com o flag de recurso ttService ou chamando o método setTTSService (descrito na documentação que acompanha o SDK). Você pode usar um serviço fornecido pela Oracle, como o serviço Oracle Cloud Infrastructure (OCI) Speech, ou um fornecido por terceiros.

Texto para fala

  • Flag de recurso: enableBotAudioResponse: true (O padrão é false.)
  • Serviço TTS padrão: WebSDK.TTS.oracle
  • Configuração de recurso: ttsVoice

Você pode enriquecer a experiência de conversação permitindo que o TTS (text-to-speech) fale as respostas à medida que elas chegam ao SDK. O SDK fornece dois tipos de serviço TTS prontos para uso: WebSDK.TTS.platform e WebSDK.TTS.oracle. Por padrão, o SDK usa o serviço de Fala do OCI (Oracle Cloud Infrastructure) para respostas faladas em um tom mais naturalista. Este serviço fornece uma experiência de marca fácil porque oferece várias vozes. No entanto, você pode usar o serviço TTS dependente da plataforma, WebSDK.TTS.platform, que é baseado na API do Web Speech. Ele usa as APIs de síntese de fala no dispositivo do usuário para falar as respostas.

Use o array ttsVoice para configurar a voz para o TTS. Cada item no array deve ser um objeto que tenha pelo menos um campo lang ou um campo name. O SDK procura a disponibilidade de cada voz na ordem em que são transmitidas na configuração. A primeira partida completa é definida como a voz. Se nenhuma correspondência exata for encontrada, o SDK usará a primeira correspondência com base no valor lang sozinho. Se ainda não houver correspondência, o SDK usará a voz padrão.
const settings = {
    ...,
    enableBotAudioResponse: true,
    ttsVoice: [{
        lang: 'en-US',
        name: 'Samantha'
    }, {
        lang: 'en-US',
        name: 'Alex'
    }, {
        lang: 'en-UK'
    }]
}
Para personalizar a forma como as declarações são faladas, o array ttsVoice permite especificar propriedades opcionais pitch, rate e volume em cada item. Essas propriedades correspondem aos mesmos campos na interface SpeechSynthesisUtterance.
  • A propriedade pitch pode ter um valor entre 0 e 2.
  • A propriedade rate pode ter um valor entre 0,1 e 10.
  • A propriedade volume pode ter um valor entre 0 e 1.
Por exemplo :
const settings = {
    // ....,
    ttsVoice: [{
        lang: 'en-us',
        name: 'Alex',
        pitch: 1.5,
        rate: 2,
        volume: 0.8
    }, {
        lang: 'en-us',
        name: 'Victoria',
        pitch: 1.2,
        rate: 1.7,
    }, {
        lang: 'en',
        name: 'Fiona',
        pitch: 2,
    }, {
        lang: 'en'
    }]
}

Interface de Serviço de Síntese de Fala

Você precisa implementar a interface SpeechSynthesisService para a instância de serviço TTS que você vai injetar.
/**
 * Interface for the speech synthesis service; this can be used to define a service that can be
 * injected into the SDK to perform speech synthesis on behalf of the skill or assistant
 */
interface SpeechSynthesisService {
    /**
     * Adds a phrase to the utterance queue to be spoken
     * @param phrase string
     */
    speak(phrase: string): void;

    /**
     * Cancels any ongoing speech synthesis utterance
     */
    cancel(): void;

    /**
     * Returns a Promise that resolves into a list of SpeechSynthesisServiceVoice objects representing
     * the available voices
     *
     * @return {*}  {Promise<SpeechSynthesisServiceVoice[]>}
     */
    getVoices(): Promise<SpeechSynthesisServiceVoice[]>;

    /**
     * Sets the voice to be used for speaking the utterances. It accepts an array of candidate voices
     * sorted in their preference order, and sets one of them according to its matching criteria.
     * It returns a Promise that gets resolved when the voice is set.
     *
     * @param {SpeechSynthesisServiceVoice[]} voice
     * @return {*}  {Promise<void>}
     */
    setVoice(voices: SpeechSynthesisServiceVoice[]): Promise<void>;

    /**
     * Returns the voice that is used for speaking the utterances
     */
    getVoice(): SpeechSynthesisServiceVoice;

    /**
     * Adds listener to SpeechSynthesisServiceEvent
     *
     * @param {SpeechSynthesisServiceEvent} event
     * @param {Function} listener
     */
    on(event: SpeechSynthesisServiceEvent, listener: () => void): void;

    /**
     * Removes listener(s) to SpeechSynthesisServiceEvent
     *
     * @param {SpeechSynthesisServiceEvent} event
     * @param {Function} listener
     */
    off(event: SpeechSynthesisServiceEvent, listener?: () => void): void;
}
Você deve implementar ou estender a interface SpeechSynthesisServiceVoice para as vozes usadas no serviço de síntese de fala:
/**
 * Represents a voice that the SpeechSynthesisService supports. Every SpeechSynthesisServiceVoice has
 * its own relative speech service including information about language, name and optionally more.
 */
interface SpeechSynthesisServiceVoice {
    /**
     * Returns a BCP 47 language tag indicating the language of the voice
     */
    readonly lang: string;

    /**
     * Returns a human-readable name that represents the voice
     */
    readonly name: string;

    /**
     * Pitch of the voice, can range between 0 and 2, default is 1
     * Optional
     */
    pitch?: number;

    /**
     * Speed at which the utterance is spoken at, can range between 0.1 and 10, default is 1
     * Optional
     */
    rate?: number;

    /**
     * Volume at which the utterance is spoken at, can range between 0 and 1, default is 1
     * Optional
     */
    volume?: number;
}
Observação

O objeto SpeechSynthesisServiceEvent tem dois eventos, TTSPlay e TTSEnd:
const SpeechSynthesisServiceEvent = {
    TTSPlay: 'tts:play',
    TTSEnd: 'tts:end'
}
Depois que seu serviço TTS é mapeado para um objeto que implementa a API de Síntese de Fala, ele pode ser passado para o SDK para injeção do serviço TTS. O serviço pode ser injetado quando esse objeto é passado para o campo ttsService durante a inicialização ou pode ser injetado dinamicamente passando o objeto para o método setTTSService(service).

Depois que o serviço TTS tiver sido injetado, o SDK tratará as chamadas para os métodos de serviço para emitir as mensagens. No entanto, você pode chamar esses métodos diretamente ou usar os métodos TTS expostos pelo SDK para qualquer requisito. No modo headless, por exemplo, você pode chamar o método Bots.speakTTS(message) para transmitir uma mensagem à medida que ela é recebida da habilidade. O SDK trata o parsing do texto declarável da mensagem e a passagem desse texto para o serviço TTS para que ele possa ser declarado.