Personnalisation du widget de discussion

Vous pouvez personnaliser différents aspects du widget de discussion, tels que la présentation et les icônes, les couleurs et le texte.

Conseil :

Cet article vous permet de vous familiariser avec les différentes propriétés de personnalisation.

Configuration réseau

Vous lancez le kit SDK à l'aide de ces propriétés de connexion. L'exemple d'application inclus avec le kit SDK fournit un exemple de définition des propriétés dans son fichier scripts/settings.js.
Nom de la propriété Description Requis ? Valeur par défaut
URI URL du serveur de discussion Oracle Oui N/A
channelId ID du canal Oracle Web Oui N/A
userId Identificateur unique de l'utilisateur. Si vous ne le fournissez pas, Oracle Digital Assistant en génère un. Non Valeur générée de façon aléatoire
clientAuthEnabled Détermine si le kit SDK se connecte à un canal sur lequel l'authentification client a été activée. Comme décrit dans Configuration de l'authentification client, définissez cette propriété sur true pour la connexion au canal avec l'authentification activée et l'utilisation du jeton JWT. Oui false

Indicateurs de fonctionnalité

Utilisez les propriétés de l'indicateur de fonctionnalité pour :
  • Connexions sécurisées
  • les boutons d'action en forme d'ellipse,
  • la lecture vocale des réponses de la brique,
  • le partage de pièce jointe,
  • la désactivation des clics sur les messages précédents (hors cible),
  • Compléter automatiquement l'entrée utilisateur
Par exemple :

    <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>

Conseil :

A partir de la version 22.08, le schéma de paramètres de configuration du widget de discussion est disponible au format de schéma JSON standard via un réseau CDN (https://static.oracle.com/cdn/oda/22.8.0/settings-schema.json), qui peut être utilisé pour créer des écrans de configuration dynamique.
Nom de la propriété Description Requis ? Valeur par défaut
alwaysShowSendButton Affiche le bouton d'envoi dans le pied de page de la discussion, même s'il n'y a pas de texte de saisie utilisateur. Non false
defaultGreetingTimeout Délai d'expiration par défaut, en secondes, après lequel un message d'accueil par défaut s'affiche. Non 5
defaultWaitMessageInterval Intervalle par défaut, en secondes, affiché par le message d'attente par défaut. Non 5
disablePastActions Désactive les boutons d'action dans un message de brique après qu'un utilisateur a interagi avec une action de postback, d'emplacement ou de soumission de formulaire. Valeurs autorisées : all, none ou postback. Lorsque cette option est définie sur all, tous les boutons d'action du message sont désactivés lors de l'interaction. La définition de postback désactive uniquement les actions de postback et d'emplacement, et la définition de none maintient tous les boutons activés même après une interaction. Le comportement activé par cette propriété ne dépend pas de la configuration au niveau de l'assistant numérique pour désactiver la sélection d'actions antérieures. Vous devez les définir séparément. Non all
displayActionsAsPills Affiche les boutons d'action en forme d'ellipse. Non false
enableAttachment Configure le partage des pièces jointes. Non true
enableAttachmentSecurity Lorsque cette propriété est définie sur true, des en-têtes supplémentaires sont transmis aux demandes de téléchargement de pièce jointe afin de faire en sorte qu'elles ne puissent pas être téléchargées sans transmettre un jeton JWT signé valide en tant qu'en-tête d'autorisation.

N'activez pas ce paramètre si la brique se connecte à une instance ODA de version 20.08 ou est exécutée sur une version antérieure à la version 20.08. Cette propriété s'applique uniquement aux connexions avec authentification client à la version 20.12 ou supérieure de la plate-forme ODA.

Non false
enableAutocomplete Définissez cette propriété sur true pour permettre à la brique de remplir automatiquement la demande utilisateur à l'aide des demandes utilisateur idéales saisies en tant que suggestions d'écriture automatique sur la page Créer une intention. La brique génère ces suggestions lorsque l'utilisateur saisit trois caractères ou plus. Elle déclenche également les mots dans l'entrée utilisateur qui correspondent aux expressions suggérées en gras. Non false
enableBotAudioResponse Active la formulation des réponses d'une brique telles qu'elles sont reçues à l'aide de l'API de synthèse vocale Web. Non false
enableClearMessage Active le bouton d'effacement de message dans l'en-tête du widget de discussion. Non false
enableDraggableButton Permet aux utilisateurs de sortir le bouton de widget de discussion lorsqu'il bloque le contenu sur la page Web. Cette fonctionnalité s'applique également aux navigateurs Android et iOS Safari. Non false
enableHeadless Permet d'utiliser le kit SDK Oracle Web sans son interface utilisateur afin de développer votre propre interface utilisateur de discussion. Non false
enableLocalConversationHistory Permet à la conversation précédente associée à un élément userId donné d'être chargée dans le navigateur lorsque le widget a été initialisé. Non false
enableLongPolling Utilise des demandes HTTP en cas d'échec de la connexion de socket Web. Non false
enableSecureConnection Configure la communication sécurisée (https au lieu de http et wss au lieu de ws). Non true
enableSpeech Lorsque cette propriété est définie sur true, elle active le microphone pour la reconnaissance vocale. Par exemple :
const chatSettings = {
    URI: 'idcs-oda-example.com',
    channelId: '9999b1-f99a-9999-999ee-df9d99999d',
    enableSpeech: true
};
Non false
enableSpeechAutoSend Lorsque la valeur est définie sur true (par défaut), la réponse vocale de l'utilisateur est automatiquement envoyée au serveur de discussion (et est affichée sous la forme d'un message envoyé dans le widget de discussion). Lorsque la valeur est définie sur false, la réponse vocale de l'utilisateur est affichée dans le champ de texte du message avant d'être envoyée au serveur de discussion. L'utilisateur peut ainsi la modifier avant de l'envoyer manuellement ou la supprimer. Non true
focusOnNewMessage Définit le focus sur le champ de saisie utilisateur ou sur le premier bouton d'action de message lorsqu'un nouveau message est reçu.
  • action : lorsqu'un message est reçu, le focus est sur le premier bouton d'action (si le message comporte des boutons d'action). Si le message ne comporte aucun bouton, le focus est sur le champ de saisie utilisateur.
  • input : le champ de saisie utilisateur conserve le focus à la réception de nouveaux messages.
Non input
multiLangChat Permet au widget de discussion de détecter la langue de l'utilisateur et de laisser l'utilisateur sélectionner sa langue préférée dans un menu déroulant de l'en-tête. Vous définissez le menu avec un objet qui établit la langue principale, et un tableau de deux balises de langue ou plus (tableau supportedLangs, décrit dans Discussion multilingue). Non N/A
name Nom de l'instance. Fournit un espace de noms à l'instance et est utilisé comme préfixe pour les noms de classe CSS et les ID d'élément. Non oda-chat
openChatOnLoad Développe le widget de discussion lors du chargement de la page. Non false
openLinksInNewWindow Remplace la préférence de navigateur de l'utilisateur en ouvrant des liens dans une nouvelle fenêtre. Ce paramètre s'applique à tous les liens présents dans la conversation, y compris les boutons d'action, les liens de basculement pour les pièces jointes et les liens de carte. Non false
showConnectionStatus Active l'affichage du statut de connexion dans l'en-tête de widget de discussion. Non false
showPrevConvStatus Affiche les messages de statut à la fin des anciens messages des conversations précédentes. Non true
showTypingIndicator Affiche une bulle de discussion lorsqu'une réponse est en attente. Non true

Fonctionnalité :

Utilisez les propriétés de fonctionnalité pour :
  • imiter une conversation lancée par une brique,
  • imbriquer du contenu défilant ou fixe (persistant) dans les parties supérieure et inférieure de la fenêtre de discussion,
  • Définissez l'environnement local.
  • définir le mode de débogage,
  • définir l'environnement local et la voix de la synthèse vocale.
Propriété Description Requis ? Valeur par défaut
customHeaderElementId Nomme l'ID de l'élément <div> ajouté à l'en-tête du widget de discussion. Non N/A
delegate Objet qui définit un délégué pour recevoir les callbacks avant que certains événements ne surviennent dans une conversation. L'objet delegate permet au code d'interagir avec les messages utilisateur et les réponses de brique avant l'envoi des messages et l'affichage des réponses. Non N/A
embedBottomScrollId ID de l'élément ajouté comme contenu défilant en bas de la discussion. Utilisez cette propriété pour ajouter du contenu personnalisé dans la vue de conversation du widget de discussion. Non N/A
embedBottomStickyId ID de l'élément utilisé pour le contenu persistant qui apparaît en bas de la discussion. Utilisez cette propriété pour ajouter du contenu personnalisé dans la vue de conversation du widget de discussion. Non N/A
embedded Lorsque vous définissez cette propriété sur true, vous activez le mode imbriqué pour le widget de discussion. En plus de définir cette propriété, vous devez nommer l'élément div qui héberge le widget dans la propriété targetElement. Non false
embeddedVideo La définition de cette option sur true intègre des liens pour les vidéos YouTube, Daily Motion et Oracle Video Hub afin qu'ils puissent être lus à partir du widget de discussion. Non false
embedTopscrollId ID de l'élément div ajouté en tant que contenu défilant en haut du widget de discussion. Non N/A
embedTopStickyId ID de l'élément div utilisé pour le contenu persistant qui apparaît en haut du widget de discussion. Utilisez cette propriété pour ajouter du contenu personnalisé dans la vue de conversation du widget de discussion. Par exemple, l'élément top-text div dans le fragment de code suivant est référencé en tant que embedTopStickyId: 'top-text' :

<div id="top-text" style="padding: 0; text-align: initial">
<p>Talk to Pizzabot to order your pizza.</p>
</div>
Le tutoriel de kit SDK Web explique comment configurer cette propriété et définir les options de défilement et de non-défilement pour les éléments du widget de discussion.
Non N/A
enableAgentSneakPreview Envoie le texte saisi par l'utilisateur ainsi que le statut de saisie à l'agent. Non false
enableAutocompleteClientCache Active la mise en cache côté client pour réduire le nombre d'appels serveur lorsque la fonction d'écriture automatique est en cours d'utilisation. Non false
enableDefaultClientResponse Lorsque la valeur est définie sur true, le client affiche les réponses par défaut lorsque la réponse de la brique a été retardée ou lorsqu'il n'y a aucune réponse de la brique. Non false
enableEndConversation Permet à l'utilisateur de mettre fin à la conversation et de réinitialiser la session de discussion. Il efface également l'historique local des conversations, se déconnecte du serveur de discussion et réduit le widget Non true
enableHeaderActionCollapse Réduit les actions d'en-tête dans un bouton de menu si le nombre d'icônes est supérieur à deux. Non true
enableResizableWidget Permet à l'utilisateur de redimensionner le widget de discussion après l'avoir développé. Si le widget est situé sur le côté droit de la page Web, les utilisateurs ajustent ses dimensions en faisant glisser le bord supérieur, le bord gauche ou le coin supérieur gauche. De la même manière, si le widget est placé sur le côté gauche, les utilisateurs redimensionnent le bord supérieur, le bord droit ou le coin supérieur droit. Non false
enableSendTypingStatus Envoie le statut de saisie de l'utilisateur à l'agent physique. Non false
enableTabsSync Synchronise les messages de conversation entre différents onglets pour un userId et un channelId donnés. Non true
enableVoiceOnlyMode Active le mode voix seule. L'activation du mode vocal seul élimine la nécessité pour les utilisateurs de cliquer sur le bouton micro à chaque fois qu'ils reçoivent un message de bot. Lorsque ce mode est activé, le SDK lance automatiquement la reconnaissance vocale une fois que le TTS (Text-to-Speech) pour le message reçu a été prononcé. Non false
hotkeys Objet contenant une liste de touches du clavier qui activent ou mettent au point des éléments à l'aide de la touche ALT combinée à la touche de raccourci transmise. Non {...} Par exemple :
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 Objet contenant des champs d'environnement local. Chaque environnement local gère les paires clé-valeur i18n pour les chaînes de texte utilisées dans le widget. Non {'en-us':{…}}
Par exemple :
"i18n": {
                "en-us": {
                    "chatTitle": "Pizza King"
                }
            } 
initBotAudioMuted Initialise la variation du message de brique en mode mis en sourdine. Cette fonctionnalité ne peut être activée que lorsque vous définissez enableBotAudioResponse sur true. Non true
initMessageOptions Même si initUserHiddenMessage n'envoie le message "masqué" initial qu'une fois que le client est connecté à la brique et que le widget de discussion a été développé, vous pouvez utiliser ce paramètre pour envoyer les messages dès que le client est connecté à la brique, que le widget soit développé ou non. Ce paramètre accepte un objet avec une propriété sendAt. La propriété sendAt peut prendre l'une des deux valeurs suivantes : 'init' ou 'expand'. Si vous définissez 'init', les messages d'initialisation sont envoyés dès que la connexion est établie. Si vous définissez 'expand', les messages d'initialisation sont envoyés uniquement lorsque le widget est développé. Dans le fragment de code suivant, le message est défini lorsque la connexion est établie en raison de la présence de sendAt: 'init' :
const chatSettings = {
    URI: '...',
    channelId: '...',
    initUserHiddenMessage: 'Hello',
    initMessageOptions: {
        sendAt: 'init'
    }
}
Bots = new WebSDK(settings);
Bots.connect();
Gardez à l'esprit que la facturation commence lorsque le message d'initialisation a été envoyé, même si le widget est toujours fermé (comme avec sendAt: 'init').
  N/A
initUserHiddenMessage Message utilisé pour lancer une conversation. Il peut s'agir d'une chaîne de texte ou d'une charge utile de message. Par exemple : initUserHiddenMessage: 'Hi'. Ces messages ne dépendent pas de l'historique de l'utilisateur. Ce message est envoyé dans chaque session après que le client s'est connecté à la brique et que le widget de discussion a été développé. Pour envoyer le premier message uniquement lorsque l'historique de conversation est vide, vous devez lier des processus d'écoute d'événement à l'aide de la méthode Bots.on(). Par exemple, vous pouvez effectuer cette opération en liant les événements WIDGET_OPENED et NETWORK, qui sont décrits dans les documents relatifs au kit SDK. Non N/A
initUserProfile Met à jour le profil utilisateur avant le début d'une conversation. Le format de la charge utile du profil doit être { profile: {...} }. Par exemple :
initUserProfile : {
    profile:{
    givenName: 'First',
    surname: 'Last',
    email: 'first.last@example.com',
    properties: {
        lastOrderedItems: '1 medium pepperoni'
    }
}
Cette fonction met à jour le contexte utilisateur une fois que le client est connecté à la brique et que le widget de discussion a été développé. Par conséquent, le profil utilisateur peut être reflété dans le premier message de réponse à l'utilisateur. Par exemple, la brique peut accueillir l'utilisateur avec un message tel que "Bienvenue, John Smith ! Votre dernière commande était une pizza moyenne aux pepperoni." Ces messages sont envoyés après que le client s'est connecté à la brique et que le widget de discussion est développé. Ces messages du profil utilisateur sont envoyés après que le client a été connecté à la brique et que le widget de discussion est développé. Un message de profil utilisateur est toujours envoyé avant le message "masqué" initial si initUserHiddenMessage est également transmis.

Vous pouvez uniquement transmettre la propriété profile dans la charge utile. Si vous devez transmettre une autre propriété telle que messagePayload. Si le message initial nécessite à la fois le profil et la propriété messagePayload, utilisez plutôt initUserHiddenMessage.

Non N/A
isDebugMode Active le mode de débogage. Non false
linkHandler Objet qui remplace la configuration pour gérer les clics sur les liens imbriqués dans les réponses de la brique. Cet objet gère les liens de deux manières : target accepte une chaîne et onclick accepte une fonction. Vous pouvez définir target ou onclick, mais pas les deux. Pour que tous les liens soient ouverts dans la vue Web, transmettez linkHandler: { target: 'oda-chat-webview' }. Non
{ onclick: <function>, target: 'string' }
locale Environnement local par défaut pour les chaînes de texte du widget. L'environnement local transmis pendant l'initialisation prime par rapport aux environnements locaux du navigateur des utilisateurs. S'il n'existe pas de correspondance exacte, le kit SDK tente de mettre en correspondance la langue la plus proche. Par exemple, si l'environnement local est 'da-dk', mais que les traductions i18n sont fournies uniquement pour 'da', la traduction 'da' est utilisée. En l'absence de traductions pour des environnements locaux transmis, des traductions sont recherchées et appliquées pour les environnements locaux du navigateur. En l'absence de traductions, l'environnement local par défaut, 'en', est utilisé pour les traductions. Non en-us
messageCacheSizeLimit Nombre maximal de messages pouvant être enregistrés simultanément dans localStorage. Non 2000
reconnectMaxAttempts Nombre de tentatives effectuées par le widget de discussion pour se reconnecter lorsque la connexion initiale échoue. Non 5
shareMenuItems Eléments du menu instantané de partage. Cette propriété accepte un tableau avec des valeurs de chaîne mises en correspondance avec les éléments de menu :
  • 'visual' pour les images et les vidéos
  • 'audio' pour les sons
  • 'file' pour les fichiers
  • 'location' pour les localisations
Vous pouvez spécifier les éléments disponibles dans le menu (['audio', 'file'], par exemple). Tous les éléments de menu sont disponibles lorsque le tableau est vide, que les éléments du tableau sont incorrects (['audio', 'visuil']) ou que shareMenuItems n'a pas été défini.
Non
['audio', 'file', 'location', 'visual']
skillVoices Tableau contenant les voix préférées utilisées pour la narration des réponses. Chaque élément du tableau doit être un objet avec deux champs : lang et name. Le champ name est facultatif. Le premier élément correspondant à une voix disponible dans le système est utilisé pour la narration. Ce paramètre est obsolète. Non System language
speechLocale Environnement local attendu des messages vocaux de l'utilisateur et employé pour la reconnaissance vocale. L'environnement local par défaut est Anglais-Etats-Unis ('en-US'). Les autres environnements locaux pris en charge sont l'anglais australien ('en-au'), l'anglais britannique ('en-uk'), le français ('fr-fr'), l'allemand ('de-de'), l'italien ('it-it'), l'indi-hindi (hi-in), l'indi-anglais (en-in), le portugais brésilien ('pt-br') et l'espagnol ('es-es'). L'environnement local vocal peut être défini de façon dynamique en appelant l'API setSpeechLocale('<locale>'). La reconnaissance vocale ne fonctionne pas si un environnement local non pris en charge a été transmis. Non 'en-us'
storageType Mécanisme de stockage Web utilisé afin de stocker l'historique des conversations pour les utilisateurs dont la valeur userId est transmise par l'application hôte. Les valeurs prises en charge sont 'localStorage' et 'sessionStorage'. Les conversations des utilisateurs anonymes sont toujours stockées dans sessionStorage et supprimées automatiquement à la fin de la session de navigateur. Non 'localStorage'
targetElement Nomme l'élément div où le widget de discussion est imbriqué dans la page Web. L'élément chat-container div dans le fragment de code suivant est référencé en tant que targetElement: 'chat-container' :
        <div id="chat-container" class="chatbox" 
            style="height: 600px; width: 400px; padding: 0;
            text-align: initial">
        </div>
Extrayez le tutoriel de kit SDK Web pour savoir comment ajouter l'élément div et le personnaliser.
Non N/A
theme Thème de mise en page principal. Trois thèmes sont disponibles : 'default', 'redwood-dark' et 'classic'. Non default
timestampFormat Formate l'horodatage de distribution qui accompagne les messages. Accepte les valeurs d'un objet DateTimeFormat options ou d'une chaîne de modèle comme décrit dans Personnalisation de l'horodatage

Remarque : contrôle l'horodatage du message, et non l'horodatage de l'en-tête.

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

}
timestampHeaderFormat Personnalisez le format d'horodatage dans l'en-tête du message. Vous pouvez utiliser un objet DateTimeFormat options ou une chaîne de modèle comme décrit dans Personnalisation de l'horodatage. Non N/A
timestampHeaderMode Configure les en-têtes d'horodatage qui apparaissent au-dessus du premier message du jour. 'absolute' (format par défaut) affiche l'horodatage complet au format absolu, 'relative' l'affiche dans un format relatif et 'none' masque entièrement l'en-tête d'horodatage. Non absolute
timestampMode Configure le mode d'affichage de l'horodatage : soit un horodatage absolu qui apparaît sur chaque message, soit un horodatage relatif qui apparaît uniquement sur le dernier message.
  • default : définit un horodatage relatif sur chaque message.
  • relative (valeur par défaut) : l'horodatage s'affiche avant le premier message du jour en tant qu'horodatage absolu dans un en-tête, puis en tant qu'horodatage relatif pour les nouveaux messages en tant que mise à jour indiquant le temps écoulé depuis l'ajout du message dans la conversation. L'horodatage relatif est mis à jour à intervalles définis jusqu'à la réception d'un nouveau message.
  • absolute : définit un horodatage absolu sur chaque message.
  • none : désactive l'horodatage.

Remarque : contrôle l'horodatage du message, et non l'horodatage de l'en-tête.

Non default (pour les horodatages absolus) ou relative.
ttsService Tableau contenant les voix préférées utilisées pour parler des réponses via la synthèse vocale (TTS). Chaque élément du tableau doit être un objet avec au moins l'un des champs suivants : lang et name. Le premier élément correspondant à une voix disponible dans le système est utilisé pour le TTS. Non oracle
typingIndicatorTimeout Définit le nombre de secondes au-delà duquel l'indicateur de saisie est automatiquement enlevé si le widget de discussion n'a pas encore reçu la réponse. Non 20
typingStatusInterval Définit l'intervalle, en secondes, pour limiter le statut de saisie envoyé à l'agent physique. Non 3
webViewConfig Personnalise la vue Web dans le widget. Non { referrerPolicy: 'no-referrer-when-downgrade', closeButtonType: 'icon', size: 'tall' }

Boutons Read More et Read Less pour les réponses de compétence multi-paragraphes

Vous pouvez optimiser l'expérience utilisateur pour les messages de brique à plusieurs paragraphes en ajoutant les boutons Lire plus et Lire moins.
Description de l'image readmore.png
Description de l'illustration readmore.png

Vous pouvez ajouter le code côté client pour ces boutons, qui masquent et affichent les paragraphes, à l'aide de l'objet delegate et des fonctions personnalisées.

  1. Dans settings.js, définissez un objet delegate avec une fonction de rappel beforeDisplay dans la déclaration const chatSettings :
    delegate: {
                beforeDisplay: function (message) {
                    var messagePayload = message && message.messagePayload;
                    if (messagePayload.type === 'text') {
                        messagePayload.text = splitParagraph(messagePayload.text);
                    }
                    return message;
                }
            }
    Si le message est de type text, beforeDisplay appelle la fonction splitParagraph personnalisée pour fractionner le texte par le premier paragraphe.
  2. Déclarez les variables pour les fonctions de vue splitParagraph et toggleParagraph personnalisées :
    var PREFIX_DOTS = 'dots_';
    var PREFIX_MORE = 'more_';
    var PREFIX_TOGGLE = 'toggle_button';
  3. Ajoutez l'expression de fonction splitParagraph et la fonction toggleParagraphView.
    splitParagraph est une IIFE (expression de fonction appelée immédiatement) qui isole la variable globalIDCounter de sorte qu'elle ne soit accessible que par la fonction splitParagraph. Le code identifie un paragraphe ("\n\n") et divise le texte en conséquence. Il ajoute ensuite trois points (...) pour indiquer qu'il y a plus de texte à afficher et un bouton Read More pour afficher le texte restant.

    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. Configurez et (en option) définissez les boutons Read More et Read Less. Le CSS inclut un style display:none pour afficher ou masquer les boutons en fonction de l'état de l'affichage de texte long.
    • Si vous ne souhaitez pas appliquer de style aux boutons, ajoutez le code suivant :
      <style>
      .more {
        display: none;
      }
      </style>
    • Si vous souhaitez définir le style des boutons, vous pouvez effectuer les opérations suivantes :
      <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>

Mise en page

Utilisez les propriétés de mise en page pour :
  • définir la position du widget dans la page Web,
  • définir les dimensions, les couleurs et le style de police du widget de discussion,
  • définir le remplissage des messages dans le widget,
  • définir la position de l'icône de badge de notification par rapport au bouton de bot,
  • définir la position de début de la conversation dans le widget.
Par exemple :
     <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>
Propriété Description Requis ? Valeur par défaut
actionsLayout Définit le sens de mise en page des actions locales. Lorsque vous définissez ce paramètre sur horizontal, ces boutons sont disposés horizontalement et seront renvoyés à la ligne si le contenu déborde. Non vertical
badgePosition Position de l'icône de badge par rapport au bouton d'icône. Non {"top": "0", "right": "0"}
cardActionsLayout Définit le sens de disposition des actions de carte. Lorsque vous définissez ce paramètre sur horizontal, ces boutons sont présentés horizontalement et seront renvoyés à la ligne si le contenu est affiché. Non vertical
colors Couleurs utilisées dans le widget de discussion. Non {"branding": "#1B8FD2", "text": "#212121", "textLight": "#737373"}
conversationBeginPosition Position de début de la conversation dans le widget. Si la valeur est top, les premiers messages apparaissent en haut du widget. Si la valeur est bottom, la conversation commence en bas. Non bottom
font Police utilisée dans le widget de discussion. Non 16px "Oracle Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue
fontFamily Famille de polices utilisée pour tout le texte du widget de discussion. Ce paramètre est prioritaire sur la configuration font. Non "Oracle Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue"
fontSize Taille de police à utiliser pour le texte d'en-tête, de bulle et de pied de page dans le widget. Ce paramètre est prioritaire sur la configuration font. Non 16px
globalActionsLayout Définit le sens de disposition des actions globales. Si ce paramètre est défini sur "horizontal", les boutons sont posés horizontalement et s'encapsulent si le contenu déborde. Non vertical
height Dimension de la largeur d'une discussion tel que définie par l'une des valeurs du type de données <length>. Non 70vh
messagePadding Remplissage autour des messages dans le widget de discussion. Non 15px
position Positionnement du widget de discussion dans la fenêtre du navigateur. Cette option doit être transmise en tant qu'objet JSON. Non {bottom: '20px', right: '20px'}
width Largeur du widget de discussion telle que définie sur l'une des valeurs de type de données <length>. Non 30vw

Icônes de bouton d'en-tête personnalisé

Vous pouvez personnaliser les boutons d'effacement de message Image de l'icône d'effacement des messages., à bascule de réponse audio Image de l'icône de réponse audio. et de fermeture Image de l'icône Fermer. de l'en-tête de deux manières : en transmettant l'URL source de l'image ou en transmettant une chaîne SVG brute. Pour les chaînes SVG brutes, la couleur de remplissage peut être personnalisée par les classes CSS, ainsi qu'en transmettant une valeur de couleur dans la propriété colors.headerButtonFill dans les paramètres initiaux.
Remarque

La personnalisation de la couleur peut ne pas fonctionner pour tous les éléments SVG, car ils peuvent être multicolores, ou posséder leurs propres couleurs de trait et de remplissage.
Icône : Fonction Indicateur de fonctionnalité Personnalisation
Supprimer le message Efface les messages en cours et anciens de la conversation. enableClearMessage: true '<image URL | SVG string>'
Réponse audio Active/désactive l'audio des réponses de brique lorsqu'elles sont reçues. S'agissant d'un bouton à bascule, il possède deux états : activé, dans lequel les réponses sont prononcées, et désactivé, dans lequel elles ne le sont pas. enableBotAudioResponse: true
  • Etat activé : audioResponseOnIcon: '<image URL | SVG string>'
  • Etat désactivé : audioResponseOffIcon: '<image URL | SVG string>
Fermer Réduit le widget et affiche le bouton de lancement Image de l'icône de lancement.. Vous ne pouvez pas désactiver ce bouton. Aucun : cette icône est toujours activée dans le widget de discussion. Elle n'est pas affichée en mode imbriqué. closeIcon : '<image URL | SVG string>'

Couleurs personnalisées

Vous pouvez personnaliser le widget en modifiant ses couleurs. Il existe deux approches de personnalisation des couleurs :
  • Vous pouvez transmettre la configuration colors :
    colors: {
        "branding": "#e00",
        "text": "#545454"
    },
    
  • Vous pouvez également utiliser des variables CSS définies dans le wrapper de discussion (.oda-chat-wrapper) :
    .oda-chat-wrapper {
        --color-branding: '#e00';
        --color-text: '#545454';
    }
    }
La couleur doit être une couleur hexadécimale. Si vous n'indiquez pas de couleur, c'est celle par défaut qui est utilisée. Ces fragments de code illustrent comment modifier la marque et les couleurs de texte. La couleur par défaut sera utilisée pour la couleur de texte secondaire.

Conseil :

Nous vous recommandons de modifier les couleurs à l'aide de variables CSS.
Variable CSS Clé Description
--color-actions-background actionsBackground Couleur d'arrière-plan des boutons d'action
--color-actions-background-hover actionsBackgroundFocus Couleur d'arrière-plan des boutons d'action lorsque le focus est sur eux.
--color-actions-background-focus actionsBackgroundHover Couleur d'arrière-plan des boutons d'action lorsque le curseur est positionné sur eux
--color-actions-border actionsBorder Couleur de bordure des boutons d'action
--color-actions-text actionsText Couleur du texte des boutons d'action
--color-actions-text actionsTextFocus Couleur du texte des boutons d'action lorsque le focus est sur eux
--color-actions-text-focus actionsTextHover Couleur du texte des boutons d'action lorsque le curseur est positionné sur eux
--color-user-message-background botMessageBackground Couleur de l'arrière-plan de la bulle du message de réponse de la brique
--color-bot-text botText Couleur du texte d'un message envoyé par la brique
--color-branding branding Couleur principale de la marque du widget. Cette couleur est utilisée en tant qu'arrière-plan d'en-tête et que couleur de pointage du curseur sur les boutons du pied de page.
--color-card-background cardBackground Couleur d'arrière-plan utilisée pour une carte.
--color-conversation-background conversationBackground Couleur utilisée pour l'arrière-plan du panneau de conversation.
--color-danger-actions-background dangerActionsBackground Couleur d'arrière-plan du bouton d'action de danger
--color-danger-actions-background-focus dangerActionsBackgroundFocus Couleur d'arrière-plan du bouton d'action de danger sur le focus
--color-danger-actions-background-hover dangerActionsBackgroundHover Couleur d'arrière-plan du bouton d'action de danger au survol
--color-danger-actions-border dangerActionsBorder Couleur de bordure du bouton d'action en cas de danger
--color-danger-actions-text dangerActionsText Couleur du texte du bouton d'action en cas de danger
--color-danger-actions-text-focus dangerActionsTextFocus Couleur du texte du bouton d'action en cas de danger sur le focus
--color-danger-actions-text-hover dangerActionsTextHover Couleur du texte du bouton d'action en cas de danger au survol
--color-danger-form-actions-background dangerFormActionsBackground Couleur d'arrière-plan des actions de danger dans les messages Table, Form, Table-Form et Edit-Form
--color-danger-form-actions-background-focus dangerFormActionsBackgroundFocus Couleur d'arrière-plan des actions de danger sur le focus dans les messages Table, Form, Table-Form et Edit-Form
--color-danger-form-actions-background-hover dangerFormActionsBackgroundHover Couleur d'arrière-plan des actions de danger lors du survol des messages Table, Form, Table-Form et Edit-Form
--color-danger-form-actions-border dangerFormActionsBorder Couleur de bordure des actions de danger dans les messages Table, Form, Table-Form et Edit-Form
--color-danger-form-actions-text dangerFormActionsText Couleur du texte des actions de danger dans les messages Table, Form, Table-Form et Edit-Form
--color-danger-form-actions-text-focus dangerFormActionsTextFocus Couleur du texte des actions de danger sur le focus dans les messages Table, Form, Table-Form et Edit-Form
--color-danger-form-actions-text-hover dangerFormActionsTextHover Couleur du texte des actions de danger lors du survol des messages Table, Form, Table-Form et Edit-Form
--color-error-border errorBorder Couleur de bordure d'une bulle de message d'erreur. La couleur est utilisée comme couleur de bordure du message d'erreur de niveau formulaire qui s'affiche dans les messages Modifier le formulaire.
--color-error-message-background errorMessageBackground Couleur d'arrière-plan d'une bulle de message d'erreur. La couleur est utilisée comme couleur d'arrière-plan du message d'erreur de niveau formulaire qui s'affiche dans les messages Modifier le formulaire.
--color-error-title errorTitle Couleur de titre du contenu du message d'erreur. La couleur est utilisée comme couleur de texte d'erreur du message d'erreur au niveau du formulaire qui s'affiche dans les messages Modifier le formulaire.
--color-footer-background footerBackground Couleur utilisée pour l'arrière-plan du pied de page.
--color-footer-button-fill footerButtonFill Couleur de remplissage d'une icône SVG utilisée dans les boutons situés dans le pied de page de la discussion.
--color-form-actions-background formActionsBackground Couleur d'arrière-plan des actions de formulaire
--color-form-actions-background-focus formActionsBackgroundFocus Couleur d'arrière-plan des actions de formulaire sur le focus
--color-form-actions-background-hover formActionsBackgroundHover Couleur d'arrière-plan des actions de formulaire au survol
--color-form-actions-border formActionsBorder Couleur de bordure des actions de formulaire
--color-form-actions-text formActionsText Couleur du texte des actions de formulaire
--color-form-actions-text-focus formActionsTextFocus Couleur du texte des actions de formulaire sur le focus
--color-form-actions-text-hover formActionsTextHover Couleur du texte des actions de formulaire lors du survol
--color-form-background formBackground Couleur d'arrière-plan des formulaires
--color-form-error formError Couleur de remplissage SVG de l'icône dans les messages d'erreur de niveau champ et formulaire qui s'affichent dans les messages Edit-Form. La couleur est utilisée comme couleur de bordure du champ de saisie en cas d'erreur dans les messages Edit-Form.
--color-form-error-text formErrorText Couleur du texte d'un message d'erreur de niveau champ affiché dans les messages Edit-Form
--color-form-header-background formHeaderBackground Couleur d'arrière-plan des titres de formulaire
--color-form-header-text formHeaderText Couleur du texte des titres de formulaire
--color-form-input-background formInputBackground Couleur d'arrière-plan des champs d'entrée dans les messages de modification de formulaire
--color-form-input-border formInputBorder Couleur de bordure des champs d'entrée dans les messages de modification de formulaire
--color-form-input-border-focus formInputBorderFocus Couleur de bordure des champs d'entrée sur le focus dans les messages Edit-Form
--color-form-input-text formInputText Couleur du texte des champs d'entrée dans les messages de modification de formulaire
--color-form-label formLabel Couleur des libellés de formulaire
--color-form-text formText Couleur du texte des formulaires
--color-global-actions-background globalActionsBackground Couleur d'arrière-plan des boutons d'action globale
--color-global-actions-background-focus globalActionsBackgroundFocus Couleur d'arrière-plan des boutons d'action globale lorsque le focus est sur eux.
--color-global-actions-background-hover globalActionsBackgroundHover Couleur d'arrière-plan des boutons d'action globale lorsque le curseur est positionné sur eux.
--color-global-actions-border globalActionsBorder Couleur de bordure des boutons d'action globale
--color-global-actions-text globalActionsText Couleur du texte des boutons d'action globale
--color-global-actions-text-focus globalActionsTextFocus Couleur du texte des boutons d'action globale lorsque le focus est sur eux.
--color-global-actions-text-hover globalActionsTextHover Couleur du texte des boutons d'action globale lorsque le curseur est positionné sur eux.
--color-header-background headerBackground Couleur d'arrière-plan de l'en-tête du widget de discussion
--color-header-button-fill headerButtonFill Couleur de remplissage des icônes SVG utilisées pour les boutons de l'en-tête de discussion
--color-header-text headerText Couleur du titre de l'en-tête de discussion
--color-input-background inputBackground Couleur d'arrière-plan du champ d'entrée de message dans le pied de page de la discussion
--color-input-text inputText Couleur du texte d'entrée de message dans le pied de page de la discussion
--color-links links Couleur des liens intégrés dans les messages de brique
--color-error-border N/A Couleur de bordure d'une bulle de message d'erreur
--color-error-message-background N/A Couleur d'arrière-plan d'une bulle de message d'erreur
--color-error-text N/A Couleur de description du contenu d'un message d'erreur
--color-error-title N/A Couleur du titre d'un contenu de message d'erreur
--color-footer-button-background-hover N/A Couleur d'arrière-plan des boutons du pied de page lorsque le curseur est positionné sur eux
--color-footer-button-fill-hover N/A Couleur de remplissage du pied de page d'en-tête lors du survol
--color-header-button-background-hover N/A Couleur d'arrière-plan des boutons d'en-tête lorsque le curseur est positionné sur eux
--color-header-button-fill-hover N/A Couleur de remplissage des boutons d'en-tête lors du survol
--color-input-border N/A Couleur de bordure du champ de saisie
--color-user-links N/A Couleur des liens intégrés dans les messages utilisateur.
--color-popup-background N/A Couleur d'arrière-plan des invites et des fenêtres contextuelles
--color-popup-button-background N/A Couleur d'arrière-plan des boutons contextuels
--color-popup-button-text N/A Couleur du texte des boutons contextuels
--color-popup-horizontal-rule N/A Couleur de règle d'horizon pour le séparateur pour l'action de menu de discussion multilang
--color-popup-item-background-hover N/A Couleur d'arrière-plan lors du pointage de la souris sur les éléments de liste instantanée
--color-popup-text N/A Couleur du texte et de l'icône des invites et des fenêtres instantanées
--color-table-background N/A Couleur d'arrière-plan des tableaux
--color-table-header-background N/A Couleur d'arrière-plan des en-têtes de table
--color-table-separator N/A Couleur de séparation des lignes de tableau
--color-table-text N/A Couleur du texte des tableaux
--color-notification-badge-background notificationBadgeBackground Couleur d'arrière-plan du badge de notification de message
--color-notification-badge-text notificationBadgeText Couleur du texte du nombre de messages dans le badge de notification
--color-primary-actions-background primaryActionsBackground Couleur d'arrière-plan du bouton d'action principale
--color-primary-actions-background-focus primaryActionsBackgroundFocus Couleur d'arrière-plan du bouton d'action principal sur le focus
--color-primary-actions-background-hover primaryActionsBackgroundHover Couleur d'arrière-plan du bouton d'action principal au survol
--color-primary-actions-border primaryActionsBorder Couleur de bordure du bouton d'action principale
--color-primary-actions-text primaryActionsText Couleur du texte du bouton d'action principal
--color-primary-actions-text-focus primaryActionsTextFocus Couleur du texte du bouton d'action principal sur le focus
--color-primary-actions-text-hover primaryActionsTextHover Couleur du texte du bouton d'action principal au survol
--color-primary-form-actions-background primaryFormActionsBackground Couleur d'arrière-plan des actions principales dans les messages Table, Form, Table-Form et Edit-Form
--color-primary-form-actions-background-focus primaryFormActionsBackgroundFocus Couleur d'arrière-plan des actions principales sur le focus dans les messages Table, Form, Table-Form et Edit-Form
--color-primary-form-actions-background-hover primaryFormActionsBackgroundHover Couleur d'arrière-plan des actions principales lors du survol des messages Table, Form, Table-Form et Edit-Form
--color-primary-form-actions-border primaryFormActionsBorder Couleur de bordure des actions principales dans les messages Table, Form, Table-Form et Edit-Form
--color-primary-form-actions-text primaryFormActionsText Couleur du texte des actions principales dans les messages Table, Form, Table-Form et Edit-Form
--color-primary-form-actions-text-focus primaryFormActionsTextFocus Couleur d'arrière-plan des actions principales sur le focus dans les messages Table, Form, Table-Form et Edit-Form
--color-primary-form-actions-text-hover primaryFormActionsTextHover Couleur d'arrière-plan des actions principales lors du survol des messages Table, Form, Table-Form et Edit-Form
--color-rating-star ratingStar Couleur appliquée aux étoiles de notation dans un message de retour lorsque les utilisateurs survolent ou les sélectionnent. Si vous n'indiquez pas de couleur, c'est la couleur branding qui est utilisée.
N/A recognitionViewBackground Couleur d'arrière-plan de la vue dans laquelle le texte reconnu est affiché lorsque les utilisateurs activent le mode vocal. Si vous ne définissez pas cette couleur, c'est celle définie pour headerBackground qui est utilisée.
N/A recognitionViewButtonFill Couleur de remplissage SVG pour la bascule entre mode vocal et texte lorsque les utilisateurs passent en mode vocal.
--color-recognition-view-text recognitionViewText Couleur utilisée pour le texte reconnu à partir de l'entrée vocale de l'utilisateur. Si vous ne définissez pas cette couleur, c'est celle définie pour text qui est utilisée.
N/A shareMenuText Couleur utilisée pour les options de menu de partage. Cette couleur remplace la valeur définie pour la clé de texte, si elle est transmise.
--color-table-actions-background-focus tableActionsBackgroundFocus Couleur d'arrière-plan des actions du tableau sur le focus
--color-table-actions-text-focus tableActionsTextFocus Couleur du texte des actions du tableau sur le focus
--color-table-actions-text-hover tableActionsTextHover Couleur du texte des actions du tableau lors du survol
--color-text text Couleur du texte des messages dans le widget de discussion.
-color-text-light textLight Couleur du texte secondaire dans les messages, par exemple, les descriptions de carte dans le widget de discussion.
--color-timestamp timestamp Couleur de l'horodatage relatif.
--color-typing-indicator typingIndicator Couleur de remplissage d'arrière-plan utilisée pour l'indicateur de saisie.
N/A userMessageBackgound Couleur d'arrière-plan de la bulle utilisée pour les messages utilisateur.
--color-user-text userText Couleur du texte d'un message envoyé par l'utilisateur.
--color-visualizer visualizer Couleur utilisée pour les barres du graphique du visualiseur. Si vous ne définissez pas cette couleur, c'est celle définie pour branding qui est utilisée.
--color-visualizer-container-background visualizerContainerBackground Couleur d'arrière-plan du conteneur du visualiseur vocal qui apparaît lorsque les utilisateurs basculent en mode vocal. Si vous ne définissez pas cette couleur, c'est celle définie pour userMessageBackgound qui est utilisée.
Remarque

Vous pouvez définir une image pour conversationBackground, headerBackground et footerBackground. Ces champs peuvent accepter tout paramètre pouvant être transmis à la propriété background d'arrière-plan CSS. Par exemple :
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")'},

Icônes personnalisées

Vous pouvez personnaliser les icônes, y compris l'icône de brique, l'icône de logo de discussion et les icônes d'avatar de l'utilisateur et de la brique.

Vous pouvez transmettre l'URL de la ressource d'image pour les icônes suivantes . Pour certaines icônes, vous pouvez utiliser l'URL ou transmettre une chaîne SVG (Scalable Vector Graphics) . Vous pouvez transmettre les données SVG brutes pour les icônes prenant en charge les chaînes SVG. La vue de discussion les affiche en tant qu'éléments SVG incorporés.

Conseil :

Les chaînes SVG sont chargées plus rapidement que les ressources d'image. Elles vous permettent également d'animer l'image et d'en modifier la couleur. La mise en page définie pour la propriété theme est appliquée aux chaînes SVG pour les boutons de pièce jointe, d'envoi et de microphone, mais pas pour les autres ressources d'image.
A partir de la version 21.10, vous pouvez utiliser la propriété icons pour regrouper toutes les icônes personnalisées dans un seul champ. Les icônes antérieures à la version 21.10 sont toujours prises en charge, mais les valeurs transmises avec l'objet icons sont prioritaires. Tous les champs de l'objet icons prennent en charge les chemins de ressource d'image et les chaînes SVG brutes.
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>'
    }
};
Propriété (version 21.10) Propriété (versions précédentes) Description Compatible chaîne SVG ?
avatarAgent agentAvatar Pour les briques avec agents physiques intégrés, cette icône apparaît avec les messages de l'agent physique. avatarBot (ou agentAvatar) s'affiche si cette propriété n'est pas définie. Oui
avatarbot botIcon Icône affichée avec le message de réponse de la brique. Cette icône de brique apparaît uniquement si vous la fournissez. Sinon, aucune icône n'est affichée. Oui
avatarUser personIcon Icône affichée avec les messages utilisateur. Cette icône n'apparaît pas par défaut, mais uniquement si vous la définissez. Oui
clearHistory clearMessageIcon Icône du bouton d'effacement de message située dans l'en-tête du widget Oui
close N/A Icône affichée pour le bouton Fermer dans les bannières de message d'erreur, les aperçus d'image développés et le widget WebView. Oui
collapse closeIcon Icône du bouton située dans l'en-tête de la vue de discussion, qui réduit la vue de discussion. Oui
download downloadIcon Icône utilisée pour le bouton de téléchargement de pièce jointe qui apparaît sur chaque message de pièce jointe envoyé par la brique. download - Oui
error errorIcon URL de l'image utilisée pour l'icône d'erreur.
  • errorIcon - Non
  • error : oui
Non
expandImage expandImageIcon Icône utilisée pour le contrôle de développement d'image qui apparaît sur chaque message de pièce jointe d'image envoyé par la brique. expandImage - Oui
fileAudio audioIcon Icône de la pièce jointe audio affichée lorsque l'URL de la source de pièce jointe est inaccessible.
  • audioIcon - Non
  • fileAudio - Oui
fileGeneric fileIcon Icône de fichier joint.
  • fileIcon - Non
  • fileGeneric - Oui
fileImage imageIcon Icône d'image jointe, qui apparaît lorsque la source de la pièce jointe est inaccessible.
  • fileImage - Non

    imageIcon - Oui

fileVideo videoIcon Icône de pièce jointe vidéo, qui est affichée lorsque l'URL source de la pièce jointe est inaccessible.
  • videoIcon - Non
  • fileVideo - Oui
keyboard keyboardIcon Icône de clavier, affichée sous forme de bouton permettant de passer du mode vocal au mode clavier. Oui
launch botButtonIcon Bouton du bot de brique, affiché lorsque le widget de discussion est réduit.
  • botButtonIcon - Non

    launch : oui

logo logoIcon Icône de logo de discussion, affichée dans l'en-tête du widget de discussion.
  • logoIcon - Non
  • logo - Oui
mic micIcon Icône de bouton micro dans le pied de page du widget de discussion qui apparaît lorsque Oui
rating N/A Icône affichée pour les boutons d'action de retour dans le composant d'évaluation. Pour une expérience utilisateur optimale pour l'action de pointage, transmettez une chaîne d'icône SVG remplie. rating - Oui
send sendIcon Icône du bouton d'envoi de message Oui
shareMenu attachmentIcon Icône de téléchargement de pièce jointe vers le serveur Oui
shareMenuAudio N/A Icône de l'élément de menu audio dans la fenêtre instantanée de menu de partage. Oui
shareMenuFile N/A Icône de l'élément de menu Fichier dans la fenêtre instantanée du menu Partage. Oui
shareMenuLocation N/A Icône du bouton de menu Partager dans la fenêtre instantanée du menu Partager. Oui
shareMenuVisual N/A Icône de l'élément de menu image/vidéo dans la fenêtre instantanée du menu de partage Oui
ttsOff audioResponseOffIcon Icône du bouton à bascule lorsque les réponses audio sont désactivées. Oui
ttsOn audioResponseOnIcon Icône du bouton à bascule lorsque les réponses audio sont activées. Oui
typingIndicator chatBubbleIcon Icône animée dans le volet de conversation qui indique qu'une réponse est envoyée à partir de la brique. Oui
Vous pouvez également redimensionner l'icône de bulle de discussion en cours de chargement (activée avec chatBubbleIcon).
Nom de la propriété Description Requis ? Valeur par défaut
chatBubbleIconHeight Hauteur de l'icône de bulle de discussion en cours de chargement. Non 42px
chatBubbleIconWidth Largeur de l'icône de bulle de discussion en cours de chargement. Non 56px

Champs personnalisés

Vous pouvez personnaliser les chaînes suivantes et les indiquer comme texte localisé. Comme l'illustre l'objet suivant, la localisation vous demande de fournir un environnement local valide pour chaque entrée. Vous devez mettre à jour toutes les clés pour les environnements locaux autres que en-us. Sinon, les traductions en-us sont affichées pour les valeurs manquantes.
"i18n": {
    "fr": {
        "chatTitle": "Soutien"
    },
    "en-us": {
        "chatTitle": "Support"
    },
    "es": {
        "chatTitle": "Apoyo"
    },
    "zh-cn": {
        "chatTitle": "支持"
    }
}
Si des chaînes personnalisées sont fournies pour un environnement linguistique autre que en, toutes les clés doivent être spécifiées pour cet environnement linguistique. Sinon, les traductions en sont affichées pour les valeurs manquantes.
<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';
    }
Clé Description Valeur par défaut
agent Texte utilisé pour l'agent 'Agent'
agentMessage Indicateur de message de brique pour les lecteurs d'écran. Il est prononcé par les lecteurs d'écran avant la réponse de la brique. Le texte (`{0}`) est remplacé par le nom de l'agent. `'{0} says'`
attachment_audio Texte utilisé pour la variation TTS d'une pièce jointe audio. 'Audio attachment'
attachment_file Texte utilisé pour la variation TTS d'un fichier joint. 'File attachment'
attachment_image Texte utilisé pour la variation TTS d'une pièce jointe d'image. 'Image attachment'
attachment_video Texte utilisé pour la variation TTS d'une pièce jointe vidéo. 'Video attachment'
attachmentAudioFallback Message de basculement affiché à la place d'une pièce jointe audio si le client ne peut pas faire entendre l'audio. Le texte entre {0} et {/0} est défini comme lien pour télécharger le fichier. Your browser does not support embedded audio. However you can {0}download it{/0}.
attachmentVideoFallback Message de basculement affiché à la place d'une pièce jointe vidéo si le client ne peut pas afficher la vidéo. Le texte entre {0} et {/0} est défini comme lien pour télécharger le fichier. Your browser does not support embedded video. However you can {0}download it{/0}.
audioResponseOn Info-bulle affichée lorsque l'utilisateur positionne le curseur de la souris sur le bouton "off" de variation audio dans un en-tête. Turn audio response on
avatarAgent Texte alternatif utilisé pour l'icône de l'agent qui s'affiche en regard des messages de l'agent. Agent icon
avatarBot Texte alternatif utilisé pour l'icône de brique affichée en regard des messages de brique. Bot icon
avatarUser Texte alternatif utilisé pour l'icône utilisateur affichée en regard des messages utilisateur. User icon
card Identificateur de la carte. 'Card {0}'. Vous pouvez localiser la chaîne en plaçant l'espace réservé ordinal ({0}) avant ou après le mot. Nous continuerons à prendre en charge la chaîne 'Card' utilisée dans les versions précédentes qui n'inclut pas l'espace réservé ordinal. Pour cette chaîne, le caractère ordinal est placé après le mot. Pour mettre en sourdine la variation, transmettez une chaîne vide (card: '').
cardImagePlaceholder Texte d'espace réservé affiché lorsque l'image de carte est extraite et chargée. Loading image
cardImagePlaceholder Texte d'espace réservé affiché lorsque l'image de carte est extraite et chargée. Loading image
cardNavNext Libellé du bouton de navigation de carte permettant d'afficher la carte suivante dans une mise en page horizontale. Next card
cardNavPrevious Libellé du bouton de navigation de carte permettant d'afficher la carte précédente dans une mise en page horizontale. Previous card
chatSubtitle Définit le sous-titre de la vue de discussion, affiché sous le titre dans l'en-tête de la vue de discussion. Si l'indicateur de sous-titre est défini et que les indicateurs showConnectionStatus et/ou showTypingIndicator sont définis sur true, le sous-titre apparaît à la place du statut de connexion ou de l'indicateur de saisie. N/A
chatTitle Titre du widget de discussion affiché dans l'en-tête. Ask
clear Info-bulle affichée lorsque l'utilisateur positionne le curseur de la souris sur le bouton Effacer les messages dans l'en-tête. Clear
close Info-bulle affichée lorsque l'utilisateur positionne le curseur de la souris sur le bouton de fermeture du widget dans l'en-tête. Close
closing Texte de statut affiché lorsque la connexion entre le widget de discussion et le serveur est en cours de fermeture. Closing
connected Texte de statut affiché lorsque la connexion entre le widget de discussion et le serveur est établie. Connected
connecting Texte de statut affiché lorsque le widget de discussion se connecte au serveur de discussion. Connecting
connectionFailureMessage Message d'échec affiché lorsque le widget ne peut pas se connecter à la brique. Sorry, the assistant is unavailable right now. If the issue persists, contact your help desk.
connectionRetryLabel Intitulé du bouton Réessayer la connexion. Try Again
defaultGreetingMessage Réponse d'accueil client par défaut affichée lorsque la réponse de brique n'a pas été reçue dans le nombre de secondes défini par defaultGreetingTimeout.. Hey, Nice to meet you! Allow me a moment to get back to you.
defaultSorryMessage Réponse client par défaut lorsque la réponse de brique n'a pas été reçue, nombre de secondes défini par typingIndicatorTimeout. Unfortunately, I am not able to get you the right content. Please try again.
defaultWaitMessage Réponse par défaut qui s'affiche à l'intervalle où aucune réponse de brique réelle n'a été reçue. Cet intervalle est défini, en secondes, par defaultWaitMessageInterval I'm still working on your request. Thank you for your patience!
disconnected Texte de statut affiché lorsque la connexion entre le widget de discussion et le serveur est fermée. Disconnected
download Texte d'accessibilité du bouton de téléchargement qui apparaît sur chaque message de pièce jointe envoyé par la brique. Download
endConversation Info-bulle qui apparaît lorsque vous passez le pointeur de la souris sur le bouton d'en-tête de fin de conversation. End Conversation
endConversationConfirmMessage Message de confirmation qui s'affiche lorsqu'un utilisateur clique sur le bouton Terminer la conversation. Are you sure you want to end the conversation?
endConversationDescription Message de description qui s'affiche avec le message de confirmation dans l'invite de fin de conversation. This will also clear your conversation history.
errorSpeechInvalidUrl Message d'erreur affiché lorsque l'URL du serveur vocal n'est pas définie. ODA URL for connection is not set. Please pass 'URI' parameter during SDK initialization.
errorSpeechMultipleConnection Message d'erreur affiché lorsque plusieurs connexions vocales sont tentées sur un intervalle court. Another voice recognition is ongoing. Can't start a new one.'
errorSpeechTooMuchTimeout Message d'erreur affiché lorsqu'un utilisateur enregistre un message vocal trop long pour être reconnu. Too much voice input to recognize. Can not generate recognized text.
errorSpeechUnsupportedLocale Message d'erreur affiché lorsqu'un enregistrement est tenté et qu'un environnement local non pris en charge a été configuré pour la reconnaissance vocale. The set speech locale is not supported. Cannot start recording.
imageViewerClose Texte d'accessibilité du bouton qui ferme l'image développée. Close image viewer
imageViewOpen Texte d'accessibilité du bouton qui développe l'image. Open image viewer
inputPlaceholder Texte d'espace réservé qui apparaît dans le champ de saisie utilisateur. Type a message
itemIterator Identificateur d'élément dans une liste d'éléments dans un message Table, Form ou Table-Form. Le texte ({0}) est remplacé par l'index des éléments. Item {0}
language_<languageTag> Libellé de la langue représentée par languageTag. Par exemple, English pour en dans la liste déroulante de sélection de langue disponible lorsque vous configurez une discussion multilingue. | Language Label
language_detect Libellé de l'option de détection automatique dans le menu déroulant de sélection de la langue. Detect Language
languageSelectDropdown Info-bulle qui apparaît lorsque les utilisateurs survolent le bouton de sélection de la langue dans l'en-tête. Select chat language
linkField Texte de variation de remplacement pour un champ de lien dans un message Table, Form ou Table-Form. L'espace réservé ({0}) est remplacé par le linkLabel du champ. Click on the highlighted text to open Link for {0}
noSpeechTimeout Texte de statut affiché lorsque le serveur de discussion ne parvient pas à reconnaître la voix. Could not detect the voice, no message sent.
noText Intitulé du bouton Pas de confirmation. No
openMap Libellé du bouton d'action utilisé pour ouvrir une carte de localisation. Open Map
previousChats Texte de statut qui apparaît à la fin des anciens messages. Previous conversations
ratingStar Texte d'info-bulle affiché pour chaque étoile d'évaluation dans un message de retour. L'espace réservé `{0}` est remplacé par le nombre d'étoiles que l'utilisateur a sélectionné. Rate {0} star
recognitionTextPlaceholder Lorsque le mode vocal est activé, il s'agit du texte d'espace réservé affiché dans le champ de texte de reconnaissance. Speak your message
relTimeDay Horodatage relatif affiché tous les jours depuis la réception du message précédent. {0} est remplacé par le nombre de jours écoulés. {0}d ago
relTimeHr Horodatage relatif affiché toutes les heures dans les premières 24 heures après la réception du message précédent. {0} est remplacé par le nombre d'heures écoulées. {0}hr ago
relTimeMin Horodatage relatif affiché toutes les minutes depuis la réception du dernier message. {0} est remplacé par le nombre de minutes écoulées. {0}min ago
relTimeMoment Horodatage relatif affiché dix secondes après la réception du message et dans un délai de 60 secondes après la réception du dernier message. A few seconds ago
relTimeMon Horodatage relatif affiché tous les mois depuis la réception du message précédent. {0} est remplacé par le nombre de mois écoulés. {0}mth ago
relTimeNow Horodatage relatif affiché pour un nouveau message. Now
relTimeYr Horodatage relatif affiché toutes les années depuis la réception du message précédent. {0} est remplacé par le nombre d'années écoulées. {0}yr ago
requestLocation Texte affiché lorsque la localisation de l'utilisateur est demandée. Requesting location
requestLocationDeniedPermission Message d'erreur affiché lorsque l'autorisation d'accès à la localisation est refusée. Location permission denied. Please allow access to share your location, or else type in your location.
requestLocationDeniedTimeout Message d'erreur affiché lorsque la demande de localisation n'est pas résolue en raison d'une expiration. Taking too long to get your current location. Please try again, or else type in your location.
requestLocationDeniedUnavailable Message d'erreur affiché lorsque la demande de localisation est refusée car la localisation en cours de l'appareil client n'est pas disponible. Your current location is unavailable. Please try again, or else type in your location.
requestLocationString Texte d'erreur affiché lorsque l'utilisateur refuse la demande de localisation. Cannot access your location. Please allow access to proceed further.
retryMessage Texte affiché lorsque le message utilisateur n'a pas été envoyé au serveur. Try again
send Info-bulle affichée lorsque l'utilisateur positionne le curseur de la souris sur le bouton d'envoi dans le pied de page. Send
shareAudio Texte de l'élément de menu dans la fenêtre instantanée de partage d'un fichier audio Share Audio
shareFailureMessage Message d'erreur affiché lorsque l'utilisateur clique sur le bouton d'action de partage d'un message, mais que l'API de partage n'est pas disponible sur l'appareil client ou que la demande de partage a été rejetée. Sorry, sharing is not available on this device.
shareFile Texte de l'élément de menu dans la fenêtre instantanée de partage d'un fichier générique Share File
shareLocation Texte de l'élément de menu permettant de partager une localisation dans la fenêtre instantanée Share Location
shareVisual Texte de l'élément de menu dans la fenêtre instantanée de partage d'une image ou d'un fichier vidéo Share Image/Video
skillMessage Indicateur de message de brique pour les lecteurs d'écran. Il est prononcé par les lecteurs d'écran avant la réponse de la brique. Skill says
speak Info-bulle affichée lorsque l'utilisateur positionne le curseur de la souris sur le bouton de parole dans le pied de page. Speak
typingIndicator Texte d'accessibilité pour l'indicateur de saisie. Il est parlé par les lecteurs d'écran. Waiting for response
upload Info-bulle affichée lorsque l'utilisateur positionne le curseur de la souris sur le bouton de téléchargement vers le serveur dans le pied de page. Share popup
uploadFailed Texte d'erreur affiché lorsqu'un téléchargement vers le serveur échoue. Upload Failed.
uploadFileSizeLimitExceeded Texte d'erreur affiché lorsque la taille du fichier de téléchargement vers le serveur dépasse la limite. Upload Failed. File size should not be more than 25MB.
uploadFileSizeZeroByte Texte d'erreur affiché lorsque la taille du fichier de téléchargement est de 0 octet. Upload Failed. Files of size zero bytes cannot be uploaded.
uploadUnsupportedFileType Texte d'erreur affiché lorsqu'un téléchargement vers le serveur est tenté pour un type de fichier non pris en charge. Upload Failed. Unsupported file type.
userMessage Indicateur de message utilisateur pour les lecteurs d'écran. Il est prononcé par les lecteurs d'écran avant l'envoi du message par l'utilisateur. I say
utteranceGeneric Description de basculement du message de réponse utilisé dans la variation. Message from skill.
webViewAccessibilityTitle Titre d'accessibilité par défaut pour la vue Web, lu à voix haute par les lecteurs d'écran. In-widget WebView to display links
webViewClose Titre label/tooltip par défaut pour le bouton de fermeture de la vue Web. Done
webViewErrorInfoDismiss Info-bulle du bouton de rejet utilisé pour fermer le lien de restauration dans la vue Web. 'Dismiss'
webViewErrorInfoText Texte d'information affiché dans la vue Web lorsque le lien sélectionné ne peut pas y être ouvert. Le texte entre {0} et {/0} est défini sur le lien d'origine qui s'ouvre dans un nouvel onglet ou une nouvelle fenêtre. Sorry, we can't open this page in the chat window. Click {0}here{/0} to open it in your browser.
yesText Libellé du bouton de confirmation Oui. Yes
editFieldErrorMessage Message d'erreur de niveau champ qui s'affiche lorsque la valeur saisie par l'utilisateur n'est pas valide pour ce champ. Le kit SDK utilise par défaut ce message lorsque la brique ne fournit pas de message d'erreur client. Field Input is invalid
editFormErrorMessage Message d'erreur de niveau formulaire affiché sous l'action d'envoi du formulaire pour la validation côté client. Ce message s'affiche lorsqu'au moins un des champs n'est pas valide et qu'il existe plusieurs champs. Le kit SDK prend par défaut la valeur de ce message lorsque la brique ne fournit pas de message d'erreur dans la charge utile de message. Some of the fields need your attention.
noResultText Texte de statut affiché lorsqu'il n'y a aucune correspondance dans une recherche d'utilisateur dans la vue de liste à sélection multiple. No more results

Configuration des options du menu de partage

Par défaut, le menu de partage affiche des options pour les types de fichier suivants :
  • Fichiers multimédias visuels (images et vidéos)
  • Fichiers audio
  • Fichiers généraux tels que des documents, des fichiers PDF et des feuilles de calcul
  • emplacement


Le paramètre shareMenuItems permet de limiter les éléments affichés dans le menu de partage. Le paramètre accepte un tableau de chaînes avec des clés mises en correspondance avec les éléments du menu de partage : 'visual' pour l'élément Partager l'image/la vidéo, 'audio' pour l'élément Partager l'audio, 'file' pour l'élément Partager le fichier et 'location' pour l'élément Partager la localisation. Vous pouvez utiliser ces clés, qui ne distinguent pas les majuscules des minuscules, pour indiquer les éléments disponibles dans le menu (['visual', 'location'], par exemple). Tous les éléments du menu sont disponibles lorsque le tableau est vide ou lorsqu'une valeur non valide est transmise.
Remarque

Vous pouvez désactiver la fonctionnalité de pièce jointe en définissant enableAttachment sur false.


L'utilisation de la fonctionnalité de pièce jointe nécessite souvent la mise à jour de la stratégie de sécurité réseau du site hôte. Les pièces jointes, qui sont téléchargées vers le stockage d'objet Oracle Digital Assistant à l'aide d'appels HTTP, peuvent être bloquées par les stratégies CORS du site. Lorsque le site bloque les téléchargements, une erreur peut apparaître dans la console du navigateur indiquant que le client a bloqué la demande en raison d'une stratégie CORS. Pour résoudre ces problèmes, la stratégie de sécurité réseau du site hôte doit être mise à jour afin d'autoriser le domaine Oracle Digital Assistant. Cela permet aux demandes de téléchargement d'être acceptées. Comme la stratégie CORS ne s'applique pas aux sockets Web, les conversations entre le kit SDK et les briques ne sont pas concernées par ces restrictions.
Remarque

N'activez pas ce paramètre si la brique se connecte à une instance ODA de version 20.08 ou si elle est exécutée sur une version antérieure à la version 20.08. Cette propriété s'applique uniquement aux connexions avec authentification client à la version 20.12 ou supérieure de la plate-forme ODA.

Options de menu de partage personnalisées

Vous pouvez personnaliser les options du menu de partage pour afficher des types de fichier spécifiques. Pour créer ce menu personnalisé, transmettez chaque option de menu en tant qu'objet du tableau 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)
}
L'option de menu peut être transmise avec ou sans la catégorie string.

Conseil :

Pour prendre en charge les libellés dans plusieurs langues, nous vous recommandons d'utiliser i18n au lieu de la balise label.
Le fragment de code suivant illustre la transmission du tableau shareMenuItems dans la variable settings. Vous définissez les libellés en les transmettant avec des clés share_, qui sont également illustrées dans ce fragment de code. Vous pouvez définir le libellé sur un caractère générique (*) à l'aide de la clé 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'
        }
    }
}

Personnalisation des classes CSS

Vous pouvez remplacer les classes CSS du widget par des règles de style personnalisées pour personnaliser davantage son apparence.
Classe Composant
oda-chat-launch-button Bouton de lancement du widget de discussion
oda-chat-button-clear Bouton d'effacement des messages
oda-chat-button-close Bouton de fermeture du widget
oda-chat-button-narration Bouton à bascule de réponse audio de la brique
oda-chat-button-send Bouton d'envoi de message
oda-chat-button-upload Bouton de téléchargement du fichier vers le serveur
oda-chat-card Message de carte
oda-chat-closing Appliqué en tant que semblable à oda-chat-connection-status lorsque le widget se déconnecte du serveur
oda-chat-connected Appliqué en tant que semblable à oda-chat-connection-status lorsque le widget est connecté au serveur
oda-chat-connecting Appliqué en tant que semblable à oda-chat-connection-status lorsque le widget se connecte au serveur
oda-chat-connection-status Statut de la connexion. Chaque valeur de connexion possède sa propre classe, comme oda-chat-connected, oda-chat-disconnected ou oda-chat-connecting.
oda-chat-conversation Conteneur de la conversation
oda-chat-disconnected Appliqué en tant que semblable à oda-chat-connection-status lorsque le widget est déconnecté du serveur
oda-chat-footer Pied de page du widget de discussion
oda-chat-footer-button Classe commune pour tous les boutons de pied de page
oda-chat-header En-tête du widget de discussion
oda-chat-header-button Classe commune pour tous les boutons d'en-tête
oda-chat-icon-wrapper Wrapper pour la brique ou pour une personne affiché avec le message.
oda-chat-left Wrapper du message de brique
oda-chat-logo Logo dans l'en-tête du widget
oda-chat-message Classe de wrapper commune pour tous les messages de discussion
oda-chat-message-action-location Bouton d'action de demande de localisation
oda-chat-message-action-postback Bouton d'action de postback
oda-chat-message-actions Wrapper des boutons d'action
oda-chat-message-bubble Bulle du message
oda-chat-message-global-actions Wrapper des boutons d'action global
oda-chat-message-icon Image pour la brique ou pour une personne affichée avec le message.
oda-chat-notification-badge Badge de notification pour les messages non lus.
oda-chat-rating-star Bouton d'étoile de notation dans un message de retour
oda-chat-rating-star-icon Icône SVG du bouton d'étoile d'évaluation
oda-chat-right Wrapper du message utilisateur
oda-chat-title Titre dans l'en-tête du widget
oda-chat-user-input Zone de texte de saisie utilisateur
oda-chat-widget Composant de discussion développé, qui encapsule l'en-tête, la conversation et le pied de page du widget.
oda-chat-wrapper Wrapper de la totalité du composant de discussion

Personnalisation de l'horodatage

Par défaut, l'horodatage qui apparaît dans l'en-tête lorsque timestampHeaderMode et timestampHeaderFormat sont définis affiche le format jour de la semaine, mois, date, année et heure de l'environnement local. Par exemple : Thursday, August 13, 2020, 9:52:22 AM. Vous pouvez configurer cet horodatage en transmettant les options de formatage dans le paramètre timestampFormat. Vous pouvez formater l'horodatage en transmettant une chaîne de modèle de jeton de formatage ou en transmettant un objet contenant les options Intl.DateTimeFormat.

Formatage de la date et de l'heure avec des chaînes de modèle

Les chaînes de modèle utilisées pour formater l'horodatage sont constituées de jetons de format. Par exemple, la transmission de timestampFormat: 'hh:mm:ss a' définit l'horodatage sur 09:30:14 pm.
Remarque

Ces jetons distinguent les majuscules des minuscules. Par exemple, la transmission de yyyy au lieu de YYYY empêcherait l'affichage de l'année.
Composant Sème Sortie
Jour du mois
  • D
  • Do
  • DD
  • 1 2 ... 30 31
  • 1er 2 ... 30 31
  • 1 2 ... 30 31
Jour de la semaine
  • d
  • dd
  • dddd
  • 0 1 ... 5 6
  • Dim Lun ... Ven Sam
  • Dimanche Lundi ... Vendredi Samedi
Mois
  • M
  • MM
  • MMM
  • MMMM
  • 1 2 ... 11 12
  • 1 2 ... 11 12
  • Jan Fév ... Nov Déc
  • Janvier Février ... Novembre Décembre
Année
  • YY
  • YYYY
  • 70 71 ... 29 30
  • 1 970 1 971 ... 2 029 2 030
Heure
  • H
  • HH
  • h
  • hh
  • 0 1 ... 22 23
  • 0 1 ... 22 23
  • 1 2 ... 11 12
  • 1 2 ... 11 12
Minutes
  • m
  • mm
  • 0 1 ... 58 59
  • 0 1 ... 58 59
Seconde
  • s
  • ss
  • 0 1 ... 58 59
  • 0 1 ... 58 59
Fraction de seconde
  • S
  • SS
  • SSS
  • 0 1 ... 8 9
  • 0 1 ... 98 99
  • 0 1 ... 998 999
AM/PM
  • A
  • a
  • AM PM
  • am pm
fuseau horaire
  • Z
  • ZZ
  • -7:0 -6:0 ... +6:0 +7:0
  • -0700 -0600 ... +0600 +0700li

Formatage de l'horodatage avec les objets Intl.DateTimeFormat

L'horodatage peut également être formaté à l'aide des options définies pour l'objet Intl.DateTimeFormat. Les propriétés transmises avec l'objet sont les suivantes :
Propriété Valeurs
dateStyle 'full' | 'long' | 'medium' | 'short'
timeStyle 'full' | 'long' | 'medium' | 'short'
weekday
  • 'long' (par exemple, Thursday)
  • 'short' (par exemple, Thu)
  • 'narrow' (par exemple, T)
day
  • 'numeric'
  • '2-digit'
month
  • 'numeric' (par exemple, 2)
  • '2-digit' (par exemple, 02)
  • 'long' (par exemple, March)
  • 'short' (par exemple, Mar)
  • 'narrow' (par exemple, M)
year
  • 'numeric'
  • '2-digit'
era
  • 'long' (par exemple, Anno Domini)
  • 'short' (par exemple, AD)
  • 'narrow' (par exemple, A)
hour
  • 'numeric'
  • '2-digit'
minute
  • 'numeric'
  • '2-digit'
second
  • 'numeric'
  • '2-digit'
timeZoneName
  • 'long' (par exemple, British Summer Time)
  • 'short' (par exemple, GMT+1)
timeZone Le fuseau horaire. Toutes les implémentations doivent reconnaître le temps UTC. La valeur par défaut est le fuseau horaire par défaut de l'exécution. Les implémentations peuvent également reconnaître les noms de fuseau horaire de la base de données de fuseau horaire IANA, tels que Asia/Shanghai, Asia/Kolkata, America/New_York.
hour12 Indique si un format d'heure sur 12 heures doit être utilisé (par opposition au format sur 24 heures). Les valeurs sont true et false.

Personnaliser la jauge d'évaluation des messages de retour

Le message du composant de retour vous permet de collecter les commentaires des utilisateurs. Si vous utilisez le SDK 21.10, la présentation par défaut du composant de retour est un système d'évaluation par étoiles, une ligne horizontale d'étoiles qui sont mises en surbrillance lorsque les utilisateurs survolent et les sélectionnent. Vous pouvez modifier le comportement du composant à l'aide du composant Commentaires utilisateur, mais vous pouvez personnaliser l'apparence des composants à l'aide des paramètres de kit SDK.

Vous pouvez modifier l'icône des boutons de sélection de notation du composant en transmettant l'icône de votre choix en définissant l'icône rating dans le champ icons.

Conseil :

Pour une expérience utilisateur optimale, utilisez une chaîne SVG pleine sans couleur de remplissage, car elle permet une mise en surbrillance reconnaissable sur le pointeur de la souris.
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
    }
})
La couleur de l'icône dans les deux états, non sélectionné et survolé/sélectionné, peut être configurée avec les champs de couleur ratingStar et ratingStarFill dans le paramètre de couleurs respectivement.
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'
    }
})

Conseil :

Vous pouvez personnaliser la sortie des invites par le composant Retour d'utilisateur en modifiant les groupes de ressources liés au retour accessibles via la page Configuration du groupe de ressources ou en modifiant les clés systemComponent_Feedback_ dans un fichier CSV de groupe de ressources exporté.

Envoi du message initial lorsque l'historique de conversation est vide

Les messages initUserHiddenMessage sont envoyés indépendamment de l'historique de conversation de l'utilisateur, la première fois que le widget de discussion est ouvert pour chaque session. Pour envoyer le message initial lorsque l'historique de conversation est vide, vous devez lier un processus d'écoute d'événement à la méthode Bots.on(). Par exemple :
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();

Injection de service de synthèse vocale

En utilisant le service text-to-speech natif de l'appareil, la synthèse text-to-speech (TTS) du SDK utilise le service de l'appareil pour permettre aux réponses de la brique d'être émises dès qu'elles sont reçues par l'instance Web SDK. Il s'agit de l'approche prête à l'emploi, et bien qu'elle soit fiable, elle présente quelques inconvénients :
  • Vous êtes souvent limité à des voix non naturelles et génériques qui peuvent miner votre image de marque.
  • L'appareil d'un utilisateur peut ne pas prendre en charge les voix spécifiques au genre.
  • Certains frameworks natifs (Cordova et ReactNative parmi eux) nécessitent des bibliothèques tierces pour les services TTS car leurs vues Web n'exposent pas les API de synthèse vocale natives requises par le SDK Web.
Pour résoudre ces problèmes, vous pouvez définir la voix utilisée pour les réponses de la brique en injectant un service TTS dans l'instance de kit SDK en lançant le kit SDK avec l'indicateur de fonctionnalité ttService ou en appelant la méthode setTTSService (décrite dans la documentation qui accompagne le kit SDK). Vous pouvez utiliser un service fourni par Oracle, tel qu'Oracle Cloud Infrastructure (OCI) Speech, ou un service fourni par un tiers.

Text-to-Speech

  • Indicateur de fonctionnalité : enableBotAudioResponse: true (la valeur par défaut est false.)
  • Service TTS par défaut : WebSDK.TTS.oracle
  • Configuration des fonctionnalités : ttsVoice

Vous pouvez enrichir l'expérience conversationnelle en permettant à la synthèse vocale (TTS) de parler les réponses lorsqu'elles atteignent le SDK. Le kit SDK fournit deux types de service TTS prêts à l'emploi : WebSDK.TTS.platform et WebSDK.TTS.oracle. Par défaut, le kit SDK utilise le service Speech d'Oracle Cloud Infrastructure (OCI) pour les réponses prononcées de manière plus naturelle. Ce service offre une expérience de marque facile car il offre plusieurs voix. Toutefois, vous pouvez utiliser le service TTS dépendant de la plate-forme, WebSDK.TTS.platform, qui est basé sur l'API Web Speech. Il utilise les API de synthèse vocale sur l'appareil de l'utilisateur pour prononcer les réponses.

Vous utilisez le tableau ttsVoice pour configurer la voix du TTS. Chaque élément du tableau doit être un objet comportant au moins un champ lang ou un champ name. Le SDK recherche la disponibilité de chaque voix dans l'ordre dans lequel elles sont transmises dans le paramètre. Le premier match complet est défini comme la voix. Si aucune correspondance exacte n'est trouvée, le kit SDK utilise la première correspondance en fonction de la valeur lang uniquement. S'il n'y a toujours aucune correspondance, le SDK utilise la voix par défaut.
const settings = {
    ...,
    enableBotAudioResponse: true,
    ttsVoice: [{
        lang: 'en-US',
        name: 'Samantha'
    }, {
        lang: 'en-US',
        name: 'Alex'
    }, {
        lang: 'en-UK'
    }]
}
Pour personnaliser la façon dont les variations sont parlées, le tableau ttsVoice permet de transmettre des propriétés facultatives pitch, rate et volume dans chaque élément. Ces propriétés correspondent aux mêmes champs dans l'interface SpeechSynthesisUtterance.
  • La propriété pitch peut avoir une valeur comprise entre 0 et 2.
  • La propriété rate peut avoir une valeur comprise entre 0,1 et 10.
  • La propriété volume peut avoir une valeur comprise entre 0 et 1.
Par exemple :
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 du service de synthèse vocale

Vous devez implémenter l'interface SpeechSynthesisService pour l'instance de service TTS que vous allez injecter.
/**
 * 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;
}
Vous devez implémenter ou étendre l'interface SpeechSynthesisServiceVoice pour les voix utilisées dans le service de synthèse vocale :
/**
 * 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;
}
Remarque

L'objet SpeechSynthesisServiceEvent comporte deux événements, TTSPlay et TTSEnd :
const SpeechSynthesisServiceEvent = {
    TTSPlay: 'tts:play',
    TTSEnd: 'tts:end'
}
Une fois que votre service TTS est mis en correspondance avec un objet qui implémente l'API de synthèse vocale, il peut être transmis au SDK pour injection du service TTS. Le service peut être injecté lorsque cet objet est transmis au champ ttsService lors de l'initialisation, ou il peut être injecté dynamiquement en transmettant l'objet à la méthode setTTSService(service).

Une fois le service TTS injecté, le kit SDK gère les appels aux méthodes de service pour la transmission des messages. Toutefois, vous pouvez appeler ces méthodes directement, ou vous pouvez utiliser les méthodes TTS exposées par le SDK pour toutes les exigences. En mode sans interface utilisateur, par exemple, vous pouvez appeler la méthode Bots.speakTTS(message) pour transmettre un message tel qu'il est reçu de la brique. Le kit SDK gère à la fois l'analyse du texte pouvant faire l'objet d'une variation à partir du message et la transmission de ce texte au service TTS afin qu'il puisse être prononcé.