Fonctions
Voici les fonctionnalités que vous pouvez configurer dans le kit SDK Oracle Android.
Horodatages absolus et relatifs
Indicateur de fonctionnalité : timestampType: TimestampMode.RELATIVE
Vous pouvez activer les horodatages absolus ou relatifs pour les messages de discussion. Les horodatages absolus affichent l'heure exacte de chaque message. Les horodatages relatifs sont affichés 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. La précision fournie par les horodatages absolus les rend idéaux pour les tâches d'archivage, mais dans le contexte limité d'une session de discussion, ils détournent l'attention de l'utilisateur, car celui-ci doit comparer les horodatages 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.
Configuration de l'horodatage relatif
- Activez les horodatages :
enableTimestamp: true
. - Activez les horodatages relatifs :
timestampType: 'relative'
.
timestampType: 'relative'
), 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.
- 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
Présentation des boutons d'action
Indicateur de fonctionnalité : actionsLayout
actionsLayout
définit la direction de mise en page des actions locales, globales, de carte et de formulaire. Lorsque vous définissez ce paramètre sur LayoutOrientation.HORIZONTAL
, ces boutons sont disposés horizontalement et seront renvoyés à la ligne si le contenu déborde.
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<Server_URI>, false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.actionsLayout(actionsLayout)
.build();
Filtrage des pièces jointes
(Requis) <Saisissez une brève description ici.>
Indicateur de fonctionnalité : shareMenuItems
Pour pouvoir configurer
shareMenuItems
, vous devez définir enableAttachment
sur true
.
ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
ArrayList<Object> customItems = new ArrayList<>(Arrays.asList(shareMenuCustomItem1,shareMenuCustomItem2,shareMenuCustomItem3,ShareMenuItem.CAMERA));
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(sharedPreferences.getString(getString(R.string.pref_name_chat_server_host), Settings.CHAT_SERVER_URL), false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.shareMenuItems(customItems)
.enableAttachment(true)
.build();
ShareMenuCustomItem
ne dispose d'aucune valeur ou d'une valeur null
pour le libellé, comme shareMenuCustomItem3 = ShareMenuCustomItem('csv')
dans le snippet précédent, une chaîne type
avec le suffixe share_
devient le libellé. Pour shareMenuCustomItem3
, le libellé est share_csv
.
Vous pouvez autoriser les utilisateurs à télécharger tous les types de fichier en définissant la valeur
type
d'un objet ShareMenuCustomItem
sur *
.
espace statique public shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, où customItems
est une valeur ArrayList
de Objects
. Chaque objet peut être constitué de valeurs d'entité ShareMenuItem
ou un objet de type ShareMenuCustomItem
.ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
customItems.add(shareMenuCustomItem1);
customItems.add(ShareMenuItem.CAMERA);
customItems.add(ShareMenuItem.FILE);
customItems.add(shareMenuCustomItem2);
customItems.add(shareMenuCustomItem3);
Bots.shareMenuItems(customItems);
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.
Méthodes de connexion et de déconnexion
public void disconnect()
et public void connect()
. L'élément WebSocket est fermé après l'appel de la méthode directe :Bots.disconnect();
L'appel de la méthode suivante rétablit la connexion WebSocket si la brique a été déconnectée :Bots.connect();
public void connect(Botsconfiguration botsconfiguration)
est appelé avec un nouvel objet botsconfiguration
, la connexion WebSocket existante est fermée et une nouvelle connexion est établie à l'aide du nouvel objet botsconfiguration
.BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.build();
Bots.connect(botsConfiguration);
Réponses client par défaut
Indicateur de fonctionnalité : enableDefaultClientResponse: true
(valeur par défaut : false
)
Utilisez enableDefaultClientResponse: true
pour fournir des réponses côté client par défaut accompagnées d'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/requête, mais que la brique ne répond pas avec le nombre de secondes défini par l'indicateur odaas_default_greeting_timeout
, la brique peut afficher un message d'accueil configuré à l'aide de la chaîne de traduction odaas_default_greeting_message
. Ensuite, le client vérifie à nouveau la réponse de la brique. Le client affiche la réponse de la 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 odaas_default_wait_message
) à des intervalles définis par l'indicateur odaas_default_wait_message_interval
. 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 odaas_default_sorry_message
.
Délégation
Configuration des fonctionnalités : messageModifierDelegate
interface MessageModifierDelegate
et transmettre son instance à la propriété messageModifierDelegate
.private MessageDelegate implements MessageModifierDelegate {
@Override
public Message beforeSend(Message message) {
// Handle before send delegate here
}
@Override
public Message beforeDisplay(Message message) {
if (message != null && message.getPayload() != null && message.getPayload().getType() == MessagePayload.MessageType.CARD) {
((CardMessagePayload)message.getPayload()).setLayout(CardLayout.VERTICAL);
}
return message;
}
@Override
public Message beforeNotification(Message message) {
// Handle before notification delegate here
}
}
@Override
public void beforeEndConversation(CompletionHandler completionHandler) {
// Handle before end conversation end delegate here
// Trigger completionHandler.onSuccess() callback after successful execution of the task.
// Trigger completionHandler.onFailure() callback when the task is unsucessful.
}
}
public Message beforeDisplay(Message message)
Le délégué public Message beforeDisplay(Message message)
permet de modifier le message d'une brique avant de l'afficher dans la conversation. Le message modifié renvoyé par le délégué est affiché dans la conversation. Si la méthode renvoie la valeur null
, le message n'est pas affiché.
public Message beforeDisplay(Message message)
Le délégué public Message beforeDisplay(Message message)
permet de modifier un message utilisateur avant son envoi au serveur de discussion. Le message renvoyé par le délégué est envoyé à la brique. Si la valeur renvoyée est NULL, le message n'est pas envoyé.
Affichage de l'historique de conversation
Vous pouvez activer ou afficher l'historique de conversation local d'un utilisateur après la réinitialisation du kit SDK en définissant displayPreviousMessages
sur true
ou false
dans la configuration des bots. Lorsque la valeur est false
, les messages précédents ne sont pas affichés pour l'utilisateur après la réinitialisation du kit SDK.
Mettre fin à la session de discussion
FeatureFlag: enableEndConversation: true
enableEndConversation: true
ajoute un bouton de fermeture à la vue d'en-tête qui permet aux utilisateurs de mettre fin explicitement à la session de discussion en cours. Une boîte de dialogue d'invite de confirmation s'ouvre lorsque les utilisateurs cliquent sur ce bouton de fermeture et lorsqu'ils confirment l'action de fermeture, le kit SDK envoie un message d'événement à la brique qui marque la fin de la session de discussion. Le kit SDK déconnecte ensuite la brique de l'instance, réduit le widget de discussion et efface l'historique de conversation de l'utilisateur en cours. Le kit SDK déclenche un délégué sur beforeEndConversation(CompletionHandler completionHandler)
qui peut être utilisé pour effectuer une tâche avant d'envoyer une demande de fermeture de session au serveur. Il déclenche également un événement OnChatEnd()
auquel vous pouvez vous inscrire.
L'ouverture du widget de discussion démarre ensuite une nouvelle session de discussion.
public static void endChat()
Bots.endChat()
.Bots.endChat()
CompletionHandler
CompletionHandler
est un processus d'écoute d'événement implémenté sur le kit SDK, qui écoute l'exécution de la tâche en cours sur le délégué beforeEndConversation(CompletionHandler completionHandler)
dans l'application hôte. Reportez-vous au document Javadoc inclus avec le kit SDK disponible sur la page de téléchargement ODA et OMC.
SDK sans interface utilisateur
Vous pouvez utiliser le kit SDK sans son interface utilisateur. Pour l'utiliser dans ce mode, importez uniquement le package com.oracle.bots.client.sdk.android.core-24.12.aar
dans le projet, comme décrit dans Ajout du kit SDK client Oracle Android au projet.
Le kit SDK gère la connexion au serveur et fournit des API permettant d'envoyer des messages, d'en recevoir, d'obtenir des mises à jour du statut du réseau et d'autres services. Vous pouvez utiliser les API pour interagir avec le kit SDK et mettre à jour l'interface utilisateur.
Vous pouvez envoyer un message à l'aide de l'une des API send*()
disponibles dans la classe Bots
. Par exemple, public static void sendMessage(String text)
envoie un message texte à la brique ou à l'assistant numérique.
public static void sendMessage(String text)
text
est le message texte.Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
, qui implémente ensuite la fonctionnalité pour les méthodes suivantes :
void onStatusChange(ConnectionStatus connectionStatus)
: cette méthode est appelée lorsque le statut de la connexion de socket Web change. Son paramètreconnectionStatus
est le statut en cours de la connexion. Pour plus d'informations sur l'énumérationConnectionStatus
, reportez-vous à la documentation JavaDoc incluse dans le kit SDK (disponible à partir de la page de téléchargement ODA et OMC).void onMessageReceived(Message message)
: cette méthode est appelée lorsqu'un nouveau message est reçu à partir de la brique. Son paramètremessage
est le message reçu à partir de la brique. Pour plus d'informations sur la classeMessage
, reportez-vous à la documentation JavaDoc incluse dans le kit SDK (disponible à partir de la page de téléchargement ODA et OMC).void onMessageSent(Message message)
: cette méthode est appelée lorsqu'un message est envoyé à la brique. Son paramètre message est le message envoyé à la brique. Pour plus d'informations sur la classeMessage
, reportez-vous à la documentation JavaDoc incluse dans le kit SDK (disponible à partir de la page de téléchargement ODA et OMC).void onAttachmentComplete()
: cette méthode est appelée lorsqu'un téléchargement vers le serveur de pièce jointe est terminé.
public class BotsEventListener implements EventListener {
@Override
public void onStatusChange(ConnectionStatus connectionStatus) {
// Handle the connection status change
}
@Override
public void onMessageReceived(Message message) {
// Handle the messages received from skill/DA
}
@Override
public void onMessageSent(Message message) {
// Handle the message sent to skill or Digital Assistant
}
@Override
public void onAttachmentComplete() {
// Handle the post attachment upload actions
// Close the attachment upload progress popup if any etc.
}
}
L'instance de type EventListener
doit ensuite être transmise à setEventListener(EventListener eventListener)
.
public static void setEventListener(EventListener eventListener)
eventListener
est une instance de type EventListener
qui permet de recevoir les mises à jour.Bots.setEventListener(new BotsEventListener());
Vue Web dans le widget
Indicateur de fonctionnalité : linkHandler
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 de la vue Web dans le widget
Indicateur de fonctionnalité : webViewConfig
linkHandler
sur WebviewLinkHandlerType.WEBVIEW
. Vous pouvez définir la taille et l'affichage de la vue Web en elle-même à l'aide d'un objet de classe webViewConfig
:BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.linkHandler(WebviewLinkHandlerType.WEBVIEW)
.webViewConfig(new WebViewConfig()
.webViewSize(WebviewSizeWindow.FULL)
.webViewTitleColor(<COLOR_VALUE>)
.webviewHeaderColor(<COLOR_VALUE>)
.clearButtonLabel(<BUTTON_TEXT>)
.clearButtonLabelColor(<COLOR_VALUE>)
.clearButtonIcon(<IMAGE_ID>))
.build();
Comme illustré dans ce fragment de code, vous pouvez définir les attributs suivants pour la vue Web.Attribut | Paramètres |
---|---|
webViewSize |
Définit la taille d'écran de la fenêtre de la vue Web dans le widget avec l'énumération WebviewSizeWindow , qui prend deux valeurs : PARTIAL (WebviewSizeWindow.PARTIAL ) et FULL (WebviewSizeWindow.FULL ).
|
clearButtonLabel |
Définit le texte utilisé pour le bouton d'effacement/de fermeture dans l'angle supérieur droit de la vue Web. Le texte par défaut est DONE .
|
clearButtonIcon |
Définit une icône pour le bouton d'effacement, alignée à gauche dans le bouton. |
clearButtonLabelColor |
Définit la couleur du texte du libellé du bouton d'effacement. |
clearButtonColor |
Définit la couleur d'arrière-plan du bouton d'effacement. |
webviewHeaderColor |
Définit la couleur d'arrière-plan de l'en-tête de la vue Web. |
webviewTitleColor |
Définit la couleur du titre dans l'en-tête. Le titre est l'URL du lien Web qui a été ouvert. |
Discussion multilingue
Indicateur de fonctionnalité : multiLangChat
La prise en charge des langues natives du kit SDK Android permet au widget de discussion de détecter la langue de l'utilisateur et de laisser l'utilisateur sélectionner la langue de la conversation dans un menu déroulant de l'en-tête. 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 supportedLanguage
ArrayList, 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 propriété primary
comme illustré par la (primary("en")
dans le fragment de code suivant).ArrayList<SupportedLanguage> supportedLanguages = new ArrayList<>();
supportedLanguages.add(new SupportedLanguage("en"));
supportedLanguages.add(new SupportedLanguage("fr", "French"));
supportedLanguages.add(new SupportedLanguage("de", "German"));
MultiLangChat multiLangChat = new MultiLangChat().supportedLanguage(supportedLanguages).primary("en");
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(<SERVER_URI>, false, getApplicationContext()) // Configuration to initialize the SDK
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.multiLangChat(multiLangChat)
.build();
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.
- Vous devez définir au moins deux langues pour activer l'affichage du menu déroulant.
- Si vous omettez la clé
primary
, le widget détecte automatiquement la langue dans le profil utilisateur et sélectionne l'option Détecter la langue dans le menu.
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 primary
dans la configuration initiale sans supportedLanguage
ArrayList. 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 propriété
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 Bots.setPrimaryChatLanguage('und')
, où 'und'
indique une valeur indéterminée.
Vous pouvez mettre à jour le langage de discussion de façon dynamique à l'aide de l'API setPrimaryChatLanguage(lang)
même si le menu déroulant n'a pas été configuré.
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. | Définissez la propriété multiLangChat avec un objet contenant supportedLanguage ArrayList.
|
Définissez la langue de la discussion sans afficher le menu déroulant de sélection de la langue pour les utilisateurs finaux. | Définissez primary uniquement.
|
Définissez une langue par défaut. | Passez primary avec l'arrayliste supportedLanguage . La valeur primary doit être l'une des langues prises en charge dans le tableau.
|
Activer la détection de la langue. | Transmettez primary en tant que und .
|
Mettez à jour dynamiquement le langage de discussion. | Appelez l'API setPrimaryChatLanguage(lang) .
|
Options du menu de partage
- 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
En transmettant la liste ArrayList des objets à shareMenuItems shareMenuItems(Arraylist<Object>)
, vous pouvez restreindre ou filtrer le type des éléments disponibles dans le menu, personnaliser les icônes et les libellés du menu, et limiter la taille du fichier de téléchargement (par exemple, 1 024 dans le fragment de code suivant). Ces objets peuvent être des objets shareMenuCustomItem
ou des valeurs d'énumération ShareMenuItem
mises en correspondance avec les options du menu de partage : ShareMenuItem.CAMERA
pour l'option de menu Appareil photo (si elle est prise en charge par l'appareil), ShareMenuItem.VISUAL
pour le partage d'une image ou d'une vidéo, ShareMenuItem.AUDIO
pour le partage d'un élément audio et ShareMenuItem.FILE
pour le partage d'un fichier. La transmission d'une valeur vide ou NULL affiche toutes les options de menu pouvant être transmises en tant que valeurs d'énumération ShareMenuItem
.
ShareMenuCustomItem
ne comporte aucune valeur ou comporte une valeur NULL pour le libellé, comme shareMenuCustomItem3 = ShareMenuCustomItem('csv')
dans le fragment de code suivant, une chaîne de type avec le suffixe share_
devient le libellé. Pour shareMenuCustomItem3
, le libellé est share_csv
. Vous pouvez autoriser les utilisateurs à télécharger tous les types de fichier en définissant le type d'un objet ShareMenuCustomItem
sur *
.
Cette configuration s'applique uniquement lorsque
enableAttachment
est défini sur true
.
ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
ArrayList<Object> customItems = new ArrayList<>(Arrays.asList(shareMenuCustomItem1,shareMenuCustomItem2,shareMenuCustomItem3,ShareMenuItem.CAMERA));
BotsConfiguration botsConfiguration = new BotsConfiguration.BotsConfigurationBuilder(sharedPreferences.getString(getString(R.string.pref_name_chat_server_host), Settings.CHAT_SERVER_URL), false, getApplicationContext())
.channelId(<CHANNEL_ID>)
.userId(<USER_ID>)
.shareMenuItems(customItems)
.enableAttachment(true)
.build();
public static void shareMenuItems()
Bots.shareMenuItems();
.Bots.shareMenuItems()
espace statique public shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, où customItems
est une liste ArrayList d'objets. Chaque objet peut être constitué de valeurs d'énumération ShareMenuItem
ou un objet de type ShareMenuCustomItem
.ArrayList<Object> customItems = new ArrayList<>();
ShareMenuCustomItem shareMenuCustomItem1 = new ShareMenuCustomItem("pdf bin", "Label1", 1024, R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem2 = new ShareMenuCustomItem("doc", "Label2", R.drawable.odaas_menuitem_share_file);
ShareMenuCustomItem shareMenuCustomItem3 = new ShareMenuCustomItem("csv");
customItems.add(shareMenuCustomItem1);
customItems.add(ShareMenuItem.CAMERA);
customItems.add(ShareMenuItem.FILE);
customItems.add(shareMenuCustomItem2);
customItems.add(shareMenuCustomItem3);
Bots.shareMenuItems(customItems);
Reconnaissance vocale
Indicateur de fonctionnalité : enableSpeechRecognition
La définition de l'indicateur de fonctionnalité enableSpeechRecognition
sur true
permet d'afficher le bouton de microphone avec le bouton d'envoi lorsque le champ d'entrée utilisateur est vide.
Lorsque cette propriété a pour valeur true
, elle prend également en charge la fonctionnalité activée par la propriété enableSpeechRecognitionAutoSend
qui, lorsqu'elle est également définie sur true
, permet d'envoyer automatiquement la réponse vocale de l'utilisateur au serveur de discussion tout en affichant la réponse sous forme de message envoyé dans la fenêtre de discussion. Vous pouvez permettre aux utilisateurs de modifier (ou de supprimer) les messages qu'ils ont dictés avant de les envoyer manuellement en définissant enableSpeechRecognitionAutoSend
sur false
.
vide statique public startRecording(IBotsSpeechListener listener)
Démarre l'enregistrement du message vocal de l'utilisateur. Le paramètre listener
est une instance de IBotsSpeechListener
qui reçoit la réponse renvoyée par le serveur.
public static boolean isRecording()
Vérifie si l'enregistrement audio a démarré. Renvoie true
si l'enregistrement a démarré. Renvoie false
dans le cas contraire.
IBotsSpeechListener
IBotsSpeechListener
, qui implémente ensuite la fonctionnalité pour les méthodes suivantes :
void onError(String error)
Cette méthode est appelée lorsque des erreurs surviennent lors de l'établissement de la connexion au serveur, ou lorsqu'aucune entrée n'est fournie ou que trop d'entrées sont fournies. Son paramètre error
est le message d'erreur.
void onSuccess(Chaîne de variation)
Cette méthode est appelée lorsqu'un résultat final est reçu à partir du serveur. Son paramètre utterance
est la variation finale reçue à partir du serveur.
Cette méthode est en phase d'abandon dans la version 20.8.1.
void onSuccess(BotsSpeechResult botsSpeechResult)
Cette méthode est appelée lorsqu'un résultat final est reçu à partir du serveur. Son paramètre, botsSpeechResult
, est la réponse finale reçue à partir du serveur.
void onPartialResult(chaîne de variation)
Cette méthode est appelée lorsqu'un résultat partiel est reçu à partir du serveur. Son paramètre utterance
est la parole partielle reçue à partir du serveur.
void onClose(int code, String message)
Cette méthode est appelée lorsque la connexion au serveur est fermée.
code
: code de statutmessage
: motif de fermeture de la connexion
onActiveSpeechUpdate(byte[] speechData)
public class BotsSpeechListener implements IBotsSpeechListener {
@Override
public void onError(String error) {
// Handle errors
}
@Override
public void onSuccess(String utterance) {
// This method was deprecated in release 20.8.1.
// Handle final result
}
@Override
public void onSuccess(BotsSpeechResult botsSpeechResult) {
// Handle final result
}
@Override
public void onPartialResult(String utterance) {
// Handle partial result
}
@Override
public void onClose(int code, String message) {
// Handle the close event of connection to server
}
@Override
public void onOpen() {
// Handle the open event of connection to server
}
@Override
public void onActiveSpeechUpdate(byte[] speechData) {
// Handle the speech update event
}
}
Bots.startRecording(new BotsSpeechListener()); // Start voice recording
if (Bots.isRecording()) {
Bots.stopRecording(); // Stop voice recording
}
Synthèse vocale
- Indicateur de fonctionnalité :
enableSpeechSynthesis
- Configuration des fonctionnalités :
speechSynthesisVoicePreferences
- Les utilisateurs peuvent mettre en sourdine la réponse audio de la brique ou annuler sa mise en sourdine à l'aide d'un bouton situé dans l'en-tête de la vue de discussion. Pour activer cette fonctionnalité, définissez l'indicateur de fonctionnalité
enableSpeechSynthesis
surtrue
. - Vous pouvez définir votre préférence de langue pour lire les messages de la brique à voix haute avec la propriété
speechSynthesisVoicePreferences
. Ce paramètre qui définit la langue et la voix correspond à la liste des instancesSpeechSynthesisSetting
(décrite dans la documentation JavaDoc du kit SDK que vous pouvez télécharger en local à partir de la page de téléchargement ODA et OMC). Cette propriété permet d'effectuer un basculement lorsque le dispositif ne prend pas en charge la langue ou la voix préférée. Si l'appareil ne prend pas en charge la voix préférée, la voix par défaut pour la langue préférée est utilisée à la place. Si ni la langue ni la voix préférées ne sont prises en charge, la langue et la voix par défaut sont utilisées.
public static void initSpeechSynthesisService()
onCreate()
d'une activité pour initialiser le service de synthèse vocale. L'initialisation du service de synthèse vocale est effectuée lors de l'initialisation de la bibliothèque du kit SDK uniquement si l'indicateur de fonctionnalité enableSpeechSynthesis
est défini sur true
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bots.initSpeechSynthesisService();
}
}
public static void startBotAudioResponse(String text)
text
est le texte du message de la brique qui est lu.Bots.startBotAudioResponse("What kind of crust do you want?");
Cette méthode est obsolète dans la version 21.08.
public static void stopBotAudioResponse()
Bots.stopBotAudioResponse()
public static boolean isSpeaking()
Vérifie si la réponse de la brique est actuellement lue ou non.
true
si la réponse de la brique est actuellement en cours de lecture. Renvoie false
dans le cas contraire.if (Bots.isSpeaking()) {
Bots.stopBotAudioResponse();
}
public static void shutdownBotAudioResponse()
Libère les ressources utilisées par le kit SDK.
onDestroy()
de ConversationActivity
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
Bots.shutdownBotAudioResponse();
}
}
Injection de service vocal
Indicateur de fonctionnalité : ttsService
L'indicateur de fonctionnalité speechSynthesisService
vous permet d'injecter n'importe quel service de synthèse vocale (TTS) - le vôtre ou fourni par un fournisseur tiers - dans le kit SDK. Pour injecter un service TTS, vous devez d'abord définir l'indicateur de fonctionnalité enableSpeechSynthesis
sur true
, puis transmettre une instance de l'interface SpeechSynthesisService
à l'indicateur speechSynthesisService
.
L'interface SpeechSynthesisService
SpeechSynthesisService
. Il implémente les méthodes suivantes :
initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration)
: initialise un nouveau service TTS.Paramètre Description application
Application. Ne peut pas avoir la valeur NULL. botsConfiguration
Objet BotsConfiguration
utilisé pour contrôler les fonctionnalités de la bibliothèque. Ne peut pas avoir la valeur NULL.speak(String phrase)
: ajoute une expression à parler à la file d'attente de variations. Son paramètrephrase
est le texte à prononcer.isSpeaking()
: vérifie si la réponse audio est parlée ou non. Il renvoiefalse
s'il n'y a pas de réponse audio en cours.Remarque
Cette méthode est obsolète dans la version 21.08.stopTextToSpeech()
: arrête toute synthèse vocale en cours.Remarque
Cette méthode est obsolète dans la version 21.08.shutdownTextToSpeech()
: libère les ressources utilisées par le moteur TextToSpeech.getSpeechSynthesisVoicePreferences()
: renvoie le tableau des préférences vocales utilisé pour choisir la meilleure correspondance pour la voix disponible utilisée pour la synthèse vocale.setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: définit le tableau des préférences vocales utilisé pour choisir la meilleure correspondance vocale disponible pour la synthèse vocale. Le paramètrespeechSynthesisVoicePreferences
est le tableau de préférences vocales pour la synthèse vocale.onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: définit la voix de synthèse vocale sur la meilleure correspondance vocale disponible.RemarqueNous vous recommandons d'appeler cette méthode dans la méthode
Cette méthode est obsolète dans la version 21.08.setSpeechSynthesisVoicePreferences
après avoir défini les préférences vocalesArrayList
. Le paramètrespeechSynthesisVoicePreferences
est le tableau de préférences vocales pour la synthèse vocale.onSpeechRecognitionLocaleChange(Locale speechLocale
: cette méthode est appelée lorsque le langage de reconnaissance vocale a changé. En remplaçant cette méthode, vous pouvez définir le langage de synthèse vocale sur le même langage que le langage de reconnaissance vocale. Le paramètrespeechLocale
est l'environnement local défini pour la reconnaissance vocale.
private class TextToSpeechServiceInjection implements SpeechSynthesisService {
@Override
public void initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration) {
// Initialisation of Text to Speech Service.
}
@Override
public void speak(String phrase) {
// Adds a phrase to the utterance queue to be spoken
}
@Override
public boolean isSpeaking() {
// Checks whether the bot audio response is being spoken or not.
return false;
}
@Override
public void stopTextToSpeech() {
// Stops any ongoing speech synthesis
}
@Override
public void shutdownTextToSpeech() {
// Releases the resources used by the TextToSpeech engine.
}
@Override
public ArrayList<SpeechSynthesisSetting> getSpeechSynthesisVoicePreferences() {
// The voice preferences array which is used to choose the best match available voice for speech synthesis.
return null;
}
@Override
public void setSpeechSynthesisVoicePreferences(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences) {
// Sets the voice preferences array which can be used to choose the best match available voice for speech synthesis.
}
@Override
public SpeechSynthesisSetting onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences) {
// Sets the speech synthesis voice to the best voice match available.
return null;
}
@Override
public void onSpeechRecognitionLocaleChange(Locale speechLocale) {
// If the speech recognition language is changed, the speech synthesis language can also be changed to the same language.
}
}
SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
et SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting>)
sont en phase d'abandon dans cette version et ont été remplacés par SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting>)
et SpeechSynthesisService#getTTSVoice()
. Auparavant, SpeechSynthesisService#setSpeechSynthesisVoicePreferencesonSpeechSynthesisVoicePreferencesChange
définissait le tableau des préférences vocales de synthèse vocale et SpeechSynthesisService#onSpeechSynthesisVoicePreferencesChange
définissait la meilleure voix disponible pour la synthèse vocale et renvoyait la voix sélectionnée. Maintenant, la même fonctionnalité est atteinte grâce aux nouvelles méthodes : SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices)
, qui définit à la fois le tableau de préférence vocale de synthèse vocale et la meilleure voix disponible pour la synthèse vocale et SpeechSynthesisService#getTTSVoice()
, qui renvoie la voix sélectionnée pour la synthèse vocale.
Indicateur de saisie pour les conversations utilisateur-agent
Indicateur de fonctionnalité : enableSendTypingStatus
Lorsque cette option est activée, le kit SDK envoie un événement de saisie RESPONDING
avec le texte actuellement saisi par l'utilisateur à . Un indicateur de saisie s'affiche sur la console de l'agent. Lorsque l'utilisateur a terminé la saisie, le kit SDK envoie un événement LISTENING
à Oracle B2C Service ou Oracle Fusion Service. Cela masque l'indicateur de saisie sur la console de l'agent.
De même, lorsque l'agent saisit, le kit SDK reçoit un événement RESPONDING
du service. A la réception de cet événement, le kit SDK affiche un indicateur de saisie à l'utilisateur. Lorsque l'agent est inactif, le kit SDK reçoit l'événement LISTENING
du service. A la réception de cet événement, le kit SDK masque l'indicateur de saisie affiché pour l'utilisateur.
sendUserTypingStatus
active le même comportement pour le mode sans interface utilisateur.public void sendUserTypingStatus(TypingStatus status, String text)
- Pour afficher l'indicateur de saisie sur la console de l'agent :
Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
- Pour masquer l'indicateur de saisie sur la console de l'agent :
Bots.sendUserTypingStatus("LISTENING", "");
- Pour contrôler l'indicateur de saisie côté utilisateur, utilisez l'événement
onReceiveMessage(Message message)
. Par exemple :public void onReceiveMessage(Message message) { if (message != null) { MessagePayload messagePayload = message.getPayload(); if (messagePayload instanceof StatusMessagePayload) { StatusMessagePayload statusMessagePayload = (StatusMessagePayload) messagePayload; String status = statusMessagePayload.getStatus(); if (status.equalsIgnoreCase(String.valueOf(TypingStatus.RESPONDING))) { // show typing indicator } else if (status.equalsIgnoreCase(String.valueOf(TypingStatus.LISTENING)) // hide typing indicator } } }
typingStatusInterval
: par défaut, le kit SDK envoie l'événement de saisieRESPONDING
toutes les trois secondes au service. Utilisez cet indicateur pour limiter cet événement. La valeur minimale pouvant être définie est de trois secondes.enableAgentSneakPreview
: Oracle B2C Service prend en charge l'affichage du texte utilisateur lors de sa saisie. Si cet indicateur est défini surtrue
(la valeur par défaut estfalse
), le kit SDK envoie le texte réel. Pour protéger la confidentialité des utilisateurs, le kit SDK envoie...
au lieu du texte réel à Oracle B2C Service lorsque l'indicateur est défini surfalse
.Remarque
Cette fonctionnalité doit être activée dans le kit SDK et dans la configuration de discussion Oracle B2C Service.
Mettre à jour l'avatar de l'utilisateur
Vous pouvez activer la mise à jour dynamique de l'avatar utilisateur lors de l'exécution.
Afficher les détails de l'agent
Utilisez ces API pour modifier le nom de l'agent, la couleur du texte, l'avatar, les initiales du nom de l'agent, la couleur du texte et l'arrière-plan de l'avatar.
public AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Pour plus de détails sur la classe AgentDetails
, reportez-vous aux Javadoc.
public void setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
public AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Pour plus de détails sur la classe AgentDetails
, reportez-vous aux Javadoc.
Visualiseur vocal
Lorsque la prise en charge vocale est activée (enableSpeechRecognition(true)
), le pied de page du widget de discussion affiche un visualiseur vocal, c'est-à-dire un graphique de visualiseur dynamique qui indique le niveau de fréquence de l'entrée vocale. Le visualiseur réagit à la modulation de la voix de l'utilisateur en indiquant si ce dernier parle trop doucement ou trop fort. Ce visualiseur est créé à l'aide du flux d'octets enregistrés pendant que l'utilisateur parle, qui est également exposé dans la méthode IBotsSpeechListener#onActiveSpeechUpdate(byte[])
pour un usage en mode sans interface utilisateur.
Le mode vocal est actif lorsque l'icône de clavier est affichée.
Avec enableSpeechRecognitionAutoSend(true)
, le texte reconnu est automatiquement envoyé à la brique une fois que l'utilisateur a terminé de dicter le message. Le mode revient ensuite à la saisie de texte. Avec enableSpeechRecognitionAutoSend(false)
, le mode revient également à la saisie de texte, mais dans ce cas, les utilisateurs peuvent modifier le texte reconnu avant d'envoyer le message à la brique.