Fonctions
Voici les fonctionnalités que vous pouvez configurer dans le kit SDK Web Oracle.
Horodatages absolus et relatifs
- Indicateur de fonctionnalité :
timestampMode: 'relative' | 'absolute'
(valeur par défaut :'relative'
) - Configuration des fonctionnalités :
timestampMode
Vous pouvez activer les horodatages absolus ou relatifs pour les messages de discussion. Les horodatages absolus affichent l'heure exacte de chaque message. Les heures relatives s'affichent uniquement sur le dernier message et expriment le temps en secondes, jours, heures, mois ou années écoulé par rapport au message précédent.
Description de l'illustration relative-v-absolute-timestamps.png
Précision Grâce à l'horodatage absolu, ils sont idéaux pour les tâches d'archivage, mais dans le contexte limité d'une session de discussion, cette précision détourne l'attention de l'utilisateur, car celui-ci doit comparer l'horodatage pour connaître le temps écoulé entre les messages. Les horodatages relatifs permettent aux utilisateurs de suivre facilement la conversation par le biais de termes tels que A l'instant et Il y a quelques instants, qui peuvent être immédiatement compris. Les horodatages relatifs améliorent l'expérience utilisateur d'une autre manière qui simplifie vos tâches de développement : étant donné que les horodatages relatifs marquent les messages en secondes, jours, heures, mois ou années écoulés, il n'est pas nécessaire de les convertir selon les fuseaux horaires.
Comportement des horodatages relatifs
timestampMode: 'relative'
ou timestampMode: 'default'
), un horodatage absolu est affiché avant le premier message du jour sous forme d'en-tête. Cet en-tête apparaît lorsque la conversation n'a pas été effacée et que des messages plus anciens sont toujours disponibles dans l'historique. Un horodatage relatif s'affiche sur chaque nouveau message.

Description de l'illustration most-recent-message-timestamp.png
Cet horodatage est mis à jour aux intervalles réguliers suivants (secondes, minutes, etc.) jusqu'à réception d'un nouveau message.
- Pendant les 10 premières secondes
- Entre 10 et 60 secondes
- Toutes les minutes entre 1 et 60 minutes
- Toutes les heures entre 1 et 24 heures
- Tous les jours entre 1 et 30 jours
- Tous les mois entre 1 et 12 mois
- Tous les ans après la première année
Ajout d'un horodatage relatif
- Activez les horodatages relatifs :
timestampMode: 'relative'
. - Etapes facultatives :
- Définissez la couleur de l'horodatage relatif :
timestamp
: '<a hexadecimal color value>
' - Pour les briques multilingues, localisez le texte d'horodatage à l'aide des clés suivantes :
Clé Texte par défaut Description relTimeNow
Now
Horodatage initial, affiché pendant les 9 premières secondes. Cet horodatage s'affiche également lorsque la conversation est réinitialisée. relTimeMoment
a few moments ago
S'affiche pendant 10 à 60 secondes. relTimeMin
{0}min ago
Se met à jour toutes les minutes. relTimeHr
{0}hr ago
Se met à jour toutes les heures. relTimeDay
{0}d ago
Se met à jour tous les jours du premier mois. relTimeMon
{0}mth ago
Se met à jour tous les mois pendant les douze premiers mois. relTimeYr
{0}yr ago
Se met à jour tous les ans. - Utilisez les paramètres
timeStampFormat
pour modifier le format de l'horodatage absolu affiché avant le premier message de chaque jour.
- Définissez la couleur de l'horodatage relatif :
Ecriture automatique
- Indicateur de fonctionnalité :
enableAutocomplete: true
(valeur par défaut :false
) - Activer la mise en cache côté client :
enableAutocompleteClientCache
enableAutocomplete: true
et ajoutez un ensemble de messages utilisateur optimisés à la page Créer une intention. Une fois la fonctionnalité activée, une fenêtre instantanée affiche ces messages une fois que les utilisateurs ont entré au moins trois caractères. Les mots des messages suggérés qui correspondent à l'entrée utilisateur sont affichés en gras. A partir de là, les utilisateurs peuvent saisir leur propre entrée ou choisir l'un des messages d'écriture automatique.
Cette fonctionnalité n'est disponible que sur WebSocket.
Lorsqu'un assistant numérique est associé au canal Oracle Web, tous les exemples de variation configurés pour l'une des briques inscrites auprès de cet assistant numérique peuvent être utilisés en tant que suggestions d'écriture automatique.
Soumission automatique d'un champ
Lorsqu'un champ a la propriété autoSubmit
définie sur true
, le client envoie une adresse FormSubmissionMessagePayload
avec la correspondance submittedField
contenant les valeurs de champ valides qui ont été entrées jusqu'à présent. Les champs qui ne sont pas encore définis (qu'ils soient obligatoires ou non) ou qui enfreignent une validation côté client ne sont pas inclus dans la carte submittedField
. Si le champ soumis automatiquement contient lui-même une valeur non valide, le message de soumission n'est pas envoyé et le message d'erreur client s'affiche pour ce champ particulier. Lorsqu'une soumission automatique réussit, partialSubmitField
dans le message de soumission de formulaire est défini sur id
du champ autoSubmit
.
Remplacement d'un formulaire de saisie précédent
Lorsque l'utilisateur final soumet le formulaire, car autosubmit
est défini sur true
dans un champ, la brique peut envoyer un nouveau EditFormMessagePayload
. Ce message doit remplacer le message de formulaire d'entrée précédent. En définissant la propriété d'extension de canal replaceMessage
sur true
, vous autorisez le kit SDK à remplacer le message de formulaire d'entrée précédent par le message de formulaire d'entrée en cours.
Mise en page automatique RTL
Lorsque la direction de base de la page hôte est définie avec <html dir="rtl">
pour s'adapter aux langues écrites de droite à gauche, le widget de discussion s'affiche automatiquement à gauche. Etant donné que le widget est aligné à gauche pour les langues écrites de droite à gauche, ses icônes et ses éléments de texte sont également repositionnés. Les icônes se trouvent dans des positions opposées à celles de l'affichage pour les langues écrites de gauche à droite. Par exemple, les icônes d'envoi, de micro et de pièce jointe sont inversées : les icônes de micro et d'envoi occupent le côté gauche du champ de saisie (l'icône d'envoi directionnelle pointant vers la gauche) tandis que l'icône de pièce jointe se trouve du côté droit du champ de saisie. L'alignement des éléments de texte tels que inputPlaceholder
et chatTitle
dépend de l'écriture de gauche à droite ou de droite à gauche de la langue. Pour les langues écrites de droite à gauche, le texte inputPlaceHolder et chatTitle apparaissent sur le côté droit du champ de saisie.
Avatars
avatarBot
: URL de la source d'image ou chaîne source de l'image SVG affichée en regard des messages de brique.avatarUser
: URL de la source d'image ou chaîne source de l'image SVG affichée en regard des messages utilisateur. En outre, si la brique dispose d'une intégration d'agent physique, le kit SDK peut être configuré de manière à afficher une icône différente pour les messages d'agent.avatarAgent
: URL de la source d'image ou chaîne source de l'image SVG affichée en regard des messages d'agent. Si cette valeur n'est pas fournie, mais queavatarBot
est défini, l'icôneavatarBot
est utilisée à la place.
Ces paramètres peuvent être transmis uniquement dans les paramètres d'initialisation. Ils ne peuvent pas être modifiés de façon dynamique.
new WebSDK({
URI: '<URI>',
//...,
icons: {
avatarBot: '../assets/images/avatar-bot.png',
avatarUser: '../assets/images/avatar-user.jpg',
avatarAgent: '<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24"><path d="M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 9c2.7 0 5.8 1.29 6 2v1H6v-.99c.2-.72 3.3-2.01 6-2.01m0-11C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"/></svg>'
}
})
Synchronisation de conversations entre onglets
Indicateur de fonctionnalité : enableTabsSync: true
(valeur par défaut : true
)
Les utilisateurs peuvent avoir besoin d'ouvrir le site Web dans plusieurs onglets pour diverses raisons. Avec enableTabsSync: true
, vous pouvez synchroniser et poursuivre la conversation de l'utilisateur à partir de n'importe quel onglet, à condition que les paramètres de connexion (URI
, channelId
et userId
) soient identiques dans tous les onglets. Cette fonctionnalité garantit que les utilisateurs peuvent afficher les messages de la brique sur n'importe quel onglet et répondre à partir du même onglet ou de tout autre onglet. De plus, si l'utilisateur efface l'historique des conversations dans un onglet, il est également supprimé des autres onglets. Si l'utilisateur met à jour la langue de discussion dans un onglet, la langue de discussion est synchronisée avec les autres onglets.
- Un nouvel onglet est synchronisé avec les onglets existants pour les nouveaux messages entre l'utilisateur et la brique lors de l'ouverture. Si vous n'avez pas configuré le kit SDK pour qu'il affiche les messages de l'historique de conversation, le widget de discussion initial du nouvel onglet apparaît vide lorsqu'il est ouvert.
- Si vous avez configuré le kit SDK pour qu'il affiche l'historique des conversations, les messages de la discussion en cours sur les onglets existants apparaîtront dans l'historique des conversations sur un nouvel onglet. La définition de
disablePastActions
surall
oupostback
peut empêcher toute interaction avec les actions des messages dans le nouvel onglet. - Le navigateur Safari ne prend actuellement pas en charge cette fonctionnalité.
Rendu de message personnalisé
Indicateur de fonctionnalité : delegate.render: (message) => boolean (default: undefined)
render
qui prend le modèle de message comme entrée et renvoie un indicateur booléen comme sortie. Il doit renvoyer true
pour remplacer le rendu par défaut par votre rendu personnalisé pour un type de message particulier. Si false
est renvoyé, le message par défaut est affiché à la place.
Pour un rendu personnalisé, la gestion de tous les clics d'action et la désactivation ou l'activation de l'action doivent être traitées explicitement.
samples
du kit SDK pour savoir comment utiliser cette fonctionnalité avec des structures telles que React, Angular et Oracle JavaScript Extension Toolkit (JET).
Réponses client par défaut
Indicateur de fonctionnalité : enableDefaultClientResponse: true
(valeur par défaut : false
)
Utilisez cet indicateur pour fournir des réponses côté client par défaut ainsi qu'un indicateur de saisie lorsque la réponse de brique a été retardée ou lorsqu'il n'y a aucune réponse de brique. Si l'utilisateur envoie le premier message/la première requête, mais que la brique ne répond pas dans les secondes définies par l'indicateur defaultGreetingTimeout
, la brique peut afficher un message d'accueil configuré à l'aide de la chaîne de traduction defaultGreetingMessage
. Ensuite, le client vérifie à nouveau la réponse de la brique. Le client affiche la réponse de brique si elle a été reçue, mais si ce n'est pas le cas, il affiche un message d'attente (configuré avec la chaîne de traduction defaultWaitMessage
) à des intervalles définis par defaultWaitMessageInterval
. Lorsque l'attente de la réponse de la brique dépasse le seuil défini par l'indicateur typingIndicatorTimeout
, le client affiche une réponse désolée à l'utilisateur et arrête l'indicateur de saisie. Vous pouvez configurer la réponse désolée à l'aide de la chaîne de traduction defaultSorryMessage
.
Délégation
Configuration des fonctionnalités : delegate
delegate
ou utilisez la méthode setDelegate
. L'objet délégué peut éventuellement contenir les fonctions de délégation beforeDisplay
, beforeSend
, beforePostbackSend
, beforeEndConversation
et render
.var delegate = {
beforeDisplay: function(message) {
return message;
},
beforeSend: function(message) {
return message;
},
beforePostbackSend: function(postback) {
return postback;
},
beforeEndConversation: function(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(message);
}, 2000);
});
},
render: function(message) {
if (message.messagePayload.type === 'card') {
// Perform custom rendering for card using msgId
return true;
}
return false;
}
}
beforeDisplay
Le délégué beforeDisplay
permet de modifier le message d'une brique avant de l'afficher dans la conversation. Le message renvoyé par le délégué s'affiche à la place du message d'origine. Le message renvoyé n'est pas affiché si le délégué renvoie une valeur fausse telle que null
, undefined
ou false
. Si le délégué renvoie une erreur, le message d'origine s'affiche à la place du message renvoyé par le délégué. Utilisez le délégué beforeDisplay
pour appliquer de manière sélective le comportement des liens de vue Web dans le widget.
beforeSend
Le délégué beforeSend
permet de modifier un message utilisateur avant qu'il ne soit envoyé au serveur de discussion dans le cadre de sendMessage
. Le message renvoyé par le délégué est envoyé à la brique au lieu du message d'origine. Le message renvoyé par le délégué n'est pas défini si ce dernier renvoie une valeur erronée telle que null
, undefined
ou false
, le message n'est pas envoyé. En cas d'erreur, le message d'origine est envoyé à la place du message renvoyé par le délégué.
beforePostbackSend
Le délégué beforePostbackSend
est semblable à beforeSend
, et est simplement appliqué aux messages de postback de l'utilisateur. Le postback renvoyé par le délégué est envoyé à la brique. S'il renvoie une valeur incorrecte, telle que null
, undefined
ou false
, aucun message n'est envoyé.
beforeEndConversation
beforeEndConversation
autorise une interception à la fin d'un flux de conversation si une activité de pré-sortie doit être effectuée. function
reçoit le message de sortie en tant que paramètre d'entrée et doit renvoyer une valeur Promise
. Si cette Promise
est résolue avec le message de sortie, le message de sortie CloseSession
est envoyé au serveur de discussion. Sinon, le message de sortie ne peut pas être envoyé....
beforeEndConversation: function(message) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(message);
}, 2000);
});
}
recomposer
Le délégué render
vous permet de remplacer l'affichage du message par défaut. Si la fonction déléguée render
renvoie true
pour un type de message particulier, WebSDK crée un emplacement d'espace réservé au lieu de l'affichage du message par défaut. Pour identifier l'espace réservé, ajoutez la valeur msgId
du message en tant que valeur id
de l'élément. Dans la fonction déléguée render
, vous pouvez utiliser cet identificateur pour obtenir la référence de l'espace réservé et afficher votre modèle de message personnalisé. Reportez-vous à Rendu des messages personnalisés.
Bouton de lancement et widget déplaçables
Indicateur de fonctionnalité : enableDraggableButton: true
(valeur par défaut : false
)
Parfois, en particulier sur les appareils mobiles limitant la taille de l'écran, le widget de discussion ou le bouton de lancement peuvent bloquer du contenu sur une page Web. En définissant enableDraggableButton: true
, vous pouvez permettre aux utilisateurs de faire glisser le widget ou le bouton de lancement vers l'extérieur lorsqu'il bloque la vue. Cet indicateur concerne uniquement l'emplacement du bouton de lancement, et non le widget de discussion : le widget est toujours ouvert à son emplacement d'origine.
Indicateur de saisie dynamique
Indicateur de fonctionnalité : showTypingIndicator: 'true'
Grâce à l'indicateur de saisie, les utilisateurs comprennent qu'ils peuvent s'interrompre dans l'envoi de messages car la brique prépare une réponse. Par défaut, les briques affichent l'indicateur de saisie uniquement pour leur première réponse lorsque vous initialisez le kit SDK avec showTypingIndicator: 'true'
. Pour une expérience utilisateur optimale, la brique doit disposer d'un indicateur de saisie dynamique, qui est un indicateur de saisie affiché à chaque réponse de la brique. En plus d'informer les utilisateurs du fait que la brique n'est pas arrivée à expiration mais travaille toujours activement à une réponse, l'affichage de l'indicateur de saisie à chaque réponse de la brique veille à ce que les utilisateurs ne tentent pas d'envoyer des messages prématurément, comme cela peut être le cas lorsque la propriété keepTurn
ordonne à la brique de répondre avec une série de messages distincts qui ne permettent pas à l'utilisateur de la couper avec une réponse.
- Initialisez le kit SDK avec
showTypingIndicator
défini surtrue
. - Appelez l'API
showTypingIndicator
.
showTypingIndicator
peut uniquement activer l'affichage de l'indicateur de saisie dynamique dans les circonstances suivantes :
- Le widget est connecté au serveur de discussion Oracle. L'indicateur de saisie dynamique n'apparaît pas lorsque la connexion est fermée.
- Le kit SDK a été initialisé avec
showTypingIndicator
défini surtrue
.Remarque
Cette API ne peut pas fonctionner lorsque le kit SDK est utilisé en mode sans interface utilisateur.
typingIndicatorTimeout
, dont la valeur par défaut est de 20 secondes. Si l'API est appelée alors qu'un indicateur de saisie est déjà affiché, l'horloge est réinitialisée et l'indicateur est masqué.
L'indicateur de saisie disparaît dès que l'utilisateur reçoit les messages de la brique. L'indicateur de saisie se déplace en bas de la fenêtre de discussion si un utilisateur saisit un message, télécharge une pièce jointe ou envoie une localisation pendant qu'il est affiché.
Contrôle du comportement des liens imbriqués
- Gestion personnalisée :
linkHandler: { onclick: <function>, target: '<string>' }
- Dans la vue Web dans le widget :
linkHandler: { target: 'oda-chat-webview' }
- Dans une nouvelle fenêtre :
openLinksInNewWindow: 'true'
openLinksInNewWindow: true
ou le comportement par défaut d'ouverture des liens dans un nouvel onglet, vous pouvez également ouvrir les liens en superposition à la page Web du widget. Pour activer cette option et d'autres remplacements du comportement des liens, initialisez le kit SDK avec :
linkHandler: {
target: '_blank', // open link in a new page
onclick: (event) => { // some operation }
}
Utilisez linkHander
aux fins suivantes :
- Contrôler la navigation
iframe
pour qu'elle puisse continuer la superposition à la page sans avoir à inclure le widget dans chaque page, à le rouvrir lors de la navigation et à conserver le même ID utilisateur. - Ouvrir certains liens dans une nouvelle fenêtre, mais d'autres dans le même onglet.
- Effectuer une action lorsqu'un utilisateur clique sur un lien.
- Empêcher l'ouverture d'un lien.
- Ouvrir un lien dans une vue Web.
openLinksInNewWindow
, vous devez définir l'un des attributs suivants ou les deux :
self
: contexte de navigation actueltarget
: nomme le contexte d'emplacement de navigation, tel qu'un onglet, une fenêtre ouiFrame
. Définissez l'emplacementiFrame
comme attributtarget
d'un élément d'ancrage (<a>
). Vous pouvez définir les attributs_self
,_blank
,_parent
et_top
de la cible.onclick
: accepte une fonction de callback appelée lorsqu'un utilisateur clique sur le lien. Le callback est transmis à l'événementMouseEvent
reçu lors du clic et peut être utilisé pour effectuer une action, voire pour empêcher l'ouverture du lien.
Mode imbriqué
- Indicateur de fonctionnalité :
embedded: true
(valeur par défaut :false
) - Transmettez l'ID de l'élément de conteneur cible :
targetElement
- ajoutant
embedded: true
, - définissant la propriété
targetElement
avec l'ID de l'élément DOM (composant HTML) utilisé en tant que conteneur du widget (par exemple,'container-div'
dans le fragment de code suivant).
<head>
<meta charset="utf-8">
<title>Oracle Web SDK Sample</title>
<script src="scripts/settings.js"></script>
<script>
var chatWidgetSettings = {
URI: YOUR_URI,
channelId: YOUR_CHANNELID,
embedded: true,
targetElement: 'container-div'
...
</script>
</head>
<body>
<h3 align="center">The Widget Is Embedded Here!</h3>
</body>
<div id="container-div"
style="height: 600px; width: 380px; padding: 0; text-align: initial">
</div>
Le widget occupe toute la largeur et la hauteur du conteneur. Si le conteneur ne le permet pas, le widget n'est pas affiché dans la page.
Terminer la session de conversation
Indicateur de fonctionnalité : enableEndConversation: true
(valeur par défaut : true
)
A partir de la version 21.12, le kit SDK ajoute un bouton de fermeture à l'en-tête du widget de discussion par défaut (enableEndConversation: true
) qui permet aux utilisateurs de mettre fin à la session en cours.
endConversationConfirmMessage
et endConversationDescription
. Lorsqu'un utilisateur ferme l'invite en cliquant sur Oui, le kit SDK envoie à la brique un message d'événement qui marque la session de conversation en cours comme terminée. L'instance se déconnecte ensuite de la brique, réduit le widget de discussion et efface l'historique de conversation de l'utilisateur en cours. Il déclenche également un événement chatend
auquel vous pouvez vous inscrire :Bots.on('chatend', function() {
console.log('The conversation is ended.');
});
L'ouverture du widget de discussion démarre ensuite une nouvelle session de conversation.Vous pouvez également mettre fin à une session en appelant la méthode
Bots.endChat()
(décrite dans la référence qui accompagne le kit SDK Web Oracle disponible sur la page Téléchargements). L'appel de cette méthode peut être utile lorsque le kit SDK est initialisé en mode sans interface utilisateur.
Focus sur la première action dans un message
Indicateur de fonctionnalité : focusOnNewMessage: 'action'
(valeur par défaut : 'input'
)
Pour les utilisateurs qui préfèrent la navigation au clavier (superutilisateurs inclus), vous pouvez déplacer le focus du champ de saisie utilisateur vers le premier bouton d'action (ou le plus à gauche) dans un message. Par défaut, le widget de discussion rétablit le focus sur le champ de saisie utilisateur à chaque nouveau message (focusOnNewMessage: 'input'
). Cette méthode fonctionne bien pour les flux de dialogue qui attendent d'importantes entrées textuelles de la part de l'utilisateur, mais lorsque le flux de dialogue implique un certain nombre de messages avec des actions, les utilisateurs peuvent uniquement sélectionner ces actions à l'aide de la souris ou de la navigation Maj+Tab. Pour ce cas d'emploi, vous pouvez passer le focus sur le premier bouton d'action dans le message de brique à sa réception en définissant focusOnNewMessage: 'action'
. Si le message ne contient aucune action, le focus est défini sur le champ de saisie utilisateur.
Raccourcis clavier et raccourcis clavier
hotkeys
, vous pouvez créer des raccourcis de combinaison de touches Alt qui activent les éléments d'interface utilisateur dans le widget de discussion ou les déplacent vers eux. Les utilisateurs peuvent exécuter ces raccourcis au lieu d'utiliser la souris ou les gestes tactiles. Par exemple, les utilisateurs peuvent saisir Alt + L pour lancer le widget de discussion et Alt + C pour le réduire. Vous affectez les touches du clavier à des éléments à l'aide des paires clé-valeur de l'objet hotkeys
. Par exemple :
var settings = {
// ...,
hotkeys: {
collapse: 'c', // Usage: press Alt + C to collapse the chat widget when chat widget is expanded
launch: 'l' // Usage: press Alt + L to launch the chat widget when chat widget is collapsed
}
};
Lors de la création des paires clé-valeur suivantes :- Vous ne pouvez transmettre qu'une seule lettre ou un seul chiffre pour une clé.
- Vous pouvez utiliser uniquement les touches du clavier a-z et 0-9 comme valeurs.
L'attribut n'est pas sensible à la casse.
Clé | Elément |
---|---|
clearHistory |
Bouton qui efface l'historique des conversations. |
close |
Bouton qui ferme le widget de discussion et met fin à la conversation. |
collapse |
Bouton permettant de réduire le widget de discussion développé. |
input |
Champ de saisie de texte dans le pied de page de la discussion |
keyboard |
Bouton permettant de faire passer le mode d'entrée de la voix au texte. |
language |
Menu de sélection qui affiche la liste de sélection de la langue. |
launch |
Bouton de lancement du widget de discussion |
mic |
Bouton permettant de faire passer le mode d'entrée du texte à la voix. |
send |
Bouton qui envoie le texte d'entrée à la brique. |
shareMenu |
Bouton de menu de partage dans le pied de page de la discussion |
shareMenuAudio |
Option de menu dans la fenêtre instantanée de menu de partage qui sélectionne un fichier audio à partager. |
shareMenuFile |
Option de menu dans la fenêtre instantanée de menu de partage qui sélectionne un fichier générique à partager |
shareMenuLocation |
Option de menu de la fenêtre instantanée de menu de partage qui sélectionne l'emplacement de l'utilisateur à partager. |
shareMenuVisual |
Option de menu dans le menu contextuel de partage qui sélectionne une image ou un fichier vidéo à partager. |
SDK sans interface utilisateur
Indicateur de fonctionnalité : enableHeadless: true
(valeur par défaut : false
)
enableHeadless: true
dans les paramètres initiaux. La communication peut être implémentée comme suit :
- Envoi de messages : appelle
Bots.sendMessage(message)
pour transmettre la charge utile au serveur. - Réception des messages : permet d'écouter les réponses en utilisant
Bots.on('message:received', <messageReceivedCallbackFunction>)
. - Obtention de la mise à jour du statut de connexion : écoute les mises à jour de statut de la connexion à l'aide de
Bots.on('networkstatuschange', <networkStatusCallbackFunction>)
. Le callback comporte un paramètre de statut mis à jour avec des valeurs comprises entre 0 et 3, chacune étant mise en correspondance avec des états de socket Web :0
:WebSocket.CONNECTING
1
:WebSocket.OPEN
2
:WebSocket.CLOSING
3
:WebSocket.CLOSED
- Renvoyer des suggestions pour une requête : renvoie une promesse résolue en suggestions pour la chaîne de requête donnée. La promesse est rejetée si l'extraction de la suggestion prend trop de temps (environ 10 secondes).
Bots.getSuggestions(utterance) .then((suggestions) => { const suggestionString = suggestions.toString(); console.log('The suggestions are: ', suggestionString); }) .catch((reason) => { console.log('Suggestion request failed', reason); });
Remarque
Pour utiliser cette API, vous devez activer l'écriture automatique :
et la configurer pour les intentions.enableAutocomplete: true
Discussion multilingue
La prise en charge des langues natives du kit SDK Web permet au widget de discussion de détecter la langue de l'utilisateur ou de permettre aux utilisateurs de sélectionner la langue de la conversation. Les utilisateurs peuvent changer de langue, mais uniquement entre différentes conversations et pas au cours d'une conversation, car la conversation est réinitialisée chaque fois qu'un utilisateur sélectionne une nouvelle langue.
Activer le menu de langue
multiLangChat
avec un objet contenant le tableau supportedLangs
, composé de balises de langue (lang
) et de libellés d'affichage facultatifs (label
). En dehors de ce tableau, vous pouvez éventuellement définir la langue par défaut avec la clé primary
(primary: 'en'
dans le fragment de code suivant).multiLangChat: {
supportedLangs: [{
lang: 'en'
}, {
lang: 'es',
label: 'Español'
}, {
lang: 'fr',
label: 'Français'
}, {
lang: 'hi',
label: 'हिंदी'
}],
primary: 'en'
}
Le widget de discussion affiche les langues prises en charge transmises dans un menu déroulant situé dans l'en-tête. Outre les langues disponibles, le menu inclut également une option Détecter la langue. Lorsqu'un utilisateur sélectionne une langue dans ce menu, la conversation en cours est réinitialisée et une nouvelle conversation est démarrée avec la langue sélectionnée. La langue sélectionnée par l'utilisateur est conservée d'une session à l'autre dans le même navigateur. La langue précédente de l'utilisateur est donc automatiquement sélectionnée lorsque l'utilisateur revient sur la brique via la page contenant le widget de discussion.
Conseil :
Vous pouvez ajouter un processus d'écoute d'événement pour l'événementchatlanguagechange
(décrit dans la référence accompagnant le kit SDK Web Oracle disponible à partir de la page Téléchargements), qui est déclenché lorsqu'une langue de discussion a été sélectionnée dans le menu déroulant ou a été modifiée.Bots.on('chatlanguagechange', function(language) {
console.log('The selected chat language is', language);
});
- Vous devez définir au moins deux langues pour activer l'affichage du menu déroulant.
- La clé
label
est facultative pour les langues prises en charge de façon native :fr
affiche Français dans le menu,es
affiche Espagnol, etc. - Les libellés des langues peuvent être définis de façon dynamique par transmission avec le paramètre
i18n
. Vous pouvez définir le libellé de n'importe quelle langue en le transmettant à sa clélanguage_<languageTag>
. Ce modèle permet de définir des libellés pour n'importe quelle langue, prise en charge ou non, et de traduire le libellé lui-même dans différents environnements locaux. Par exemple :
Si la propriétéi18n: { en: { langauge_de: 'German', language_en: 'English', language_sw: 'Swahili', language_tr: 'Turkish' }, de: { langauge_de: 'Deutsche', language_en: 'Englisch', language_sw: 'Swahili', language_tr: 'Türkisch' } }
i18n
inclut des chaînes de traduction pour la langue sélectionnée, le texte des champs tels que l'espace réservé d'entrée, le titre de la discussion, le texte de pointage des boutons et les titres d'info-bulle passent automatiquement dans la langue sélectionnée. Le texte du champ peut passer dans une autre langue uniquement s'il existe des chaînes de traduction pour la langue sélectionnée. Si aucune chaîne de traduction n'existe, la langue du texte du champ reste inchangée. - Le widget détecte automatiquement la langue dans le profil utilisateur et active l'option Détecter la langue si vous omettez la clé
primary
. - Bien que
label
soit facultatif, si vous avez ajouté une langue qui ne fait pas partie des langues prises en charge de façon native, vous devez ajouter un libellé pour identifier la balise, en particulier lorsqu'il n'existe aucune chaîne i18n pour la langue. Par exemple, si vous ne définissez paslabel: 'हिंदी'
, pourlang: hi
, la liste déroulante affiche hi, ce qui ne constitue pas une expérience utilisateur optimale.
Désactiver le menu de langue
A partir de la version 21.12, vous pouvez également configurer et mettre à jour la langue de discussion sans avoir à configurer le menu déroulant de sélection de la langue en transmettant multiLangChat.primary
dans la configuration initiale sans transmettre également un tableau multiLangChat.supportedLangs
. La valeur transmise dans la variable primary
est définie en tant que langue de discussion pour la conversation.
Détection de la langue
Si vous omettez la clé
primary
, le widget détecte automatiquement la langue dans le profil utilisateur et active l'option Détecter la langue dans le menu.
Vous pouvez mettre à jour dynamiquement la langue sélectionnée en appelant l'API setPrimaryChatLanguage(lang)
. Si la valeur lang
transmise correspond à l'une des langues prises en charge, cette langue est sélectionnée. Si aucune correspondance n'est trouvée, la langue détectée est activée. Vous pouvez également activer l'option Langue détectée en appelant l'API setPrimaryChatLanguage('und')
, où 'und'
indique une valeur indéterminée ou en transmettant multiLangChat: {primary: null}
ou multiLangChat: {primary: 'und'}
.
setPrimaryChatLanguage(lang)
même si le menu déroulant n'a pas été configuré. Par exemple :Bots.setPrimaryChatLanguage('fr')
Vous pouvez mettre à jour dynamiquement la langue, que la langue de discussion soit initialement configurée ou non.La reconnaissance vocale, lorsqu'elle est configurée, est disponible lorsque les utilisateurs sélectionnent une langue prise en charge. Elle n'est pas disponible lorsque l'option Détecter la langue est définie. La sélection d'une langue non prise en charge par la reconnaissance vocale désactive la fonctionnalité de reconnaissance jusqu'à ce qu'une langue prise en charge soit sélectionnée.
Référence rapide de discussion multilingue
Procédez comme suit... | ... Procédure |
---|---|
Afficher la liste déroulante de sélection de la langue pour les utilisateurs finaux. | Transmettez multiLangChat.supportedLangs .
|
Définissez la langue de la discussion sans afficher le menu déroulant de sélection de la langue pour les utilisateurs finaux. | Transmettez multiLangChat.primary .
|
Définissez une langue par défaut. | Transmettez multiLangChat.primary avec multiLangChat.supportedLangs . La valeur primary doit être l'une des langues prises en charge dans le tableau.
|
Activer la détection de la langue. | Transmettez primary: null ou primary: 'und' avec multiLangChat .
|
Mettez à jour dynamiquement le langage de discussion. | Appelez l'API setPrimaryChatLanguage(lang) .
|
Vue Web dans le widget
Vous pouvez configurer le comportement des liens dans les messages de discussion pour permettre aux utilisateurs d'accéder aux pages Web à partir du widget de discussion. Au lieu d'avoir à abandonner la conversation pour afficher une page dans un onglet ou dans une fenêtre de navigateur distincte, l'utilisateur peut rester dans la conversation, car le widget de discussion ouvre le lien dans une vue Web.
Configuration du comportement des liens avec la vue Web
- Pour ouvrir tous les liens dans la vue Web, transmettez
linkHandler: { target: 'oda-chat-webview' }
dans les paramètres. La cible de tous les liens est ainsi définie suroda-chat-webview
, qui est le nom pouriframe
dans la vue Web. - Pour ouvrir uniquement certains liens dans la vue Web tout en vous assurant que les autres liens sont ouverts normalement dans d'autres onglets ou fenêtres, utilisez le délégué
beforeDisplay
. Pour ouvrir une action d'URL de message spécifique dans la vue Web, remplacez la valeur'url'
du champaction.type
par'webview'
. Lorsque le type d'action est'webview'
dans la fonctionbeforeDisplay
, le bouton d'action ouvre le lien dans la vue Web lorsque vous cliquez dessus.
Ouverture de liens à partir de la vue Web
Les liens imbriqués dans une page affichée dans la vue Web peuvent uniquement être ouverts dans la vue Web lorsqu'ils sont convertis en éléments d'ancrage (<a>
), avec un attribut cible défini sur target="oda-chat-webview"
.
Personnalisation de WebView
webViewConfig
qui accepte un objet. Par exemple :{ referrerPolicy: 'no-referrer-when-downgrade', closeButtonType: 'icon', size: 'tall'
Les champs de cet objet sont facultatifs. La configuration peut également être mise à jour de façon dynamique via la transmission d'un objet
webViewConfig
dans la méthode setWebViewConfig
. Chaque propriété de l'objet est facultative.
Champ | Valeur | Description |
---|---|---|
accessibilityTitle
|
Chaîne | Nom de l'élément de cadre de vue Web pour l'accessibilité Web. |
closeButtonIcon
|
Chaîne | Chaîne SVG/d'URL d'image utilisée pour afficher l'icône du bouton de fermeture. |
closeButtonLabel
|
Chaîne | Libellé de texte/titre d'info-bulle pour le bouton de fermeture. |
closeButtonType
|
|
Définit l'affichage du bouton de fermeture de la vue Web. |
referrerPolicy
|
ReferrerPolicy
|
Indique le référent à envoyer lors de l'extraction de la ressource du cadre. La valeur de stratégie referrerPolicy doit être une directive valide. La stratégie par défaut appliquée est 'no-referrer-when-downgrade' .
|
sandbox
|
Tableau de chaînes | Tableau de chaînes de restriction valides permettant d'exclure certaines actions dans le cadre. Les restrictions qui peuvent être transmises à ce champ sont incluses dans la description de l'attribut sandbox sur MDN Web Docs.
|
size
|
|
Hauteur de la vue Web par rapport à la hauteur du widget de discussion. Lorsqu'elle est définie sur 'tall' , elle correspond à 80 % de la hauteur du widget, mais lorsqu'elle est définie sur 'full' , elle est égale à la hauteur du widget.
|
title
|
Chaîne | Titre affiché dans l'en-tête du conteneur de la vue Web. |
- Les pages qui fournissent l'en-tête de réponse
X-frame-options: deny
ouX-frame-options: sameorigin
peuvent ne pas s'ouvrir dans la vue Web en raison de restrictions côté serveur qui empêchent l'ouverture de la page dans des iFrames. Dans ce cas, la vue Web présente à nouveau le lien à l'utilisateur afin qu'il puisse l'ouvrir dans une nouvelle fenêtre ou un nouvel onglet. - En raison de restrictions côté serveur, les pages d'autorisation ne peuvent pas être ouvertes dans WebViews, car les pages d'autorisation renvoient toujours
X-frame-options: deny
pour empêcher une attaque par détournement de clic. - Les liens externes ne peuvent pas être ouverts correctement dans la vue Web. Seuls les liens imbriqués dans les messages de conversation peuvent être ouverts dans la vue Web.
Remarque
Les messages externes étant incompatibles avec la vue Web, ne ciblez aucun lien externe à ouvrir dans la vue Web.
webViewErrorInfoText
:settings = {
URI: 'instance',
//...,
i18n: {
en: {
webViewErrorInfoText: 'This link can not be opened here. You can open it in a new page by clicking {0}here{/0}.'
}
}
}
Interrogation longue
Indicateur de fonctionnalité : enableLongPolling: true
(valeur par défaut : false
)
Le kit SDK utilise des sockets Web pour se connecter au serveur et converser avec des briques. Si, pour une raison quelconque, le socket Web est désactivé sur le réseau, les appels HTTP traditionnels peuvent être utilisés pour discuter avec la brique. Cette fonctionnalité est appelée interrogation longue car le kit SDK doit appeler en continu (ou interroger) le serveur afin d'extraire les derniers messages de la brique. Cette fonctionnalité de basculement peut être activée en transmettant enableLongPolling: true
dans les paramètres initiaux.
Indicateur de saisie pour les conversations utilisateur-agent
Indicateur de fonctionnalité : enableSendTypingStatus
: booléen (valeur par défaut : false
)
Cette fonctionnalité permet aux agents de vérifier si les utilisateurs sont toujours engagés dans la conversation en envoyant le statut de l'utilisateur à l'agent physique. Lorsque enableSendTypingStatus
est défini sur true
, le kit SDK envoie un événement de statut de saisie RESPONDING
avec le texte en cours de saisie par l'utilisateur à Oracle B2C Service ou Oracle Fusion Service. Cela, à son tour, affiche un indicateur de saisie sur la console de l'agent. Lorsque l'utilisateur a terminé la saisie, le kit SDK envoie un événement LISTENING
au service pour masquer l'indicateur de saisie sur la console de l'agent.
La configuration typingStatusInterval
, qui a une valeur minimale de trois secondes, ralentit la mise à jour du statut de saisie.
enableAgentSneakPreview
(qui est par défaut false
) doit être défini sur true
et l'aperçu en avant-première doit être activé dans la configuration de discussion Oracle B2C Service.
Il n'est pas nécessaire de configurer le statut de saisie en direct côté utilisateur. L'utilisateur peut voir le statut de saisie de l'agent par défaut. Lorsque l'agent saisit, le kit SDK reçoit un message de statut
RESPONDING
qui entraîne l'affichage d'un indicateur de saisie dans la vue de l'utilisateur. De même, lorsque l'agent est inactif, le kit SDK reçoit un message de statut LISTENING
qui masque l'indicateur de saisie.
Reconnaissance vocale
Indicateur de fonctionnalité : enableSpeech: true
(valeur par défaut : false
)
Si vous définissez enableSpeech: true
, le bouton de microphone sera affiché à la place du bouton d'envoi lorsque le champ d'entrée utilisateur est vide.
Votre brique peut également utiliser la reconnaissance vocale avec la méthode startVoiceRecording(onSpeechRecognition, onSpeechNetworkChange)
pour démarrer l'enregistrement et la méthode stopVoiceRecording
pour arrêter l'enregistrement. (Ces méthodes sont décrites dans le guide de l'utilisateur fourni avec le kit SDK.)
L'indicateur enableSpeechAutoSend
vous permet de définir si vous souhaitez envoyer le texte reconnu à partir de la voix de l'utilisateur directement au serveur de discussion, sans saisie manuelle de la part de l'utilisateur. En définissant cette propriété sur true
(valeur par défaut), vous autorisez l'envoi automatique de la réponse vocale de l'utilisateur au serveur de discussion. En la définissant sur false
, vous permettez à l'utilisateur de modifier le message avant qu'il ne soit envoyé au serveur de discussion ou de le supprimer.
Visualiseur vocal
Configuration des fonctionnalités : enableSpeechAutoSend

Le mode vocal est signalé par l'affichage de l'icône de clavier


Description de l'image voice-visualizer.png
enableSpeechAutosend
étant true
(enableSpeechAutoSend: true
), les messages sont envoyés automatiquement une fois qu'ils sont reconnus. Si vous définissez enableSpeechAutoSend: false
, le mode d'entrée passe au texte une fois le message vocal reconnu, ce qui permet aux utilisateurs de modifier ou de compléter leurs messages à l'aide de texte avant de les envoyer manuellement. Sinon, les utilisateurs peuvent compléter leurs messages avec la voix en cliquant sur l'icône vocale avant de les envoyer manuellement.
Le visualiseur vocal est créé à l'aide d'AnalyserNode. Vous pouvez implémenter le visualiseur vocal en mode sans interface utilisateur à l'aide de la méthode
startVoiceRecording
. Pour en savoir plus sur AnalyserNode et les niveaux de fréquence, reportez-vous au kit SDK.