Fonctions
Voici les fonctions que vous pouvez configurer dans la trousse SDK Oracle pour Android.
Horodatages absolus et relatifs
Indicateur de fonction : timestampType: TimestampMode.RELATIVE
Vous pouvez activer des horodatages absolus ou relatifs pour les messages de clavardage. Les horodatages absolus affichent l'heure exacte de chaque message. Les horodatages relatifs s'affichent uniquement sur le dernier message et expriment le temps en secondes, jours, heures, mois ou années par rapport au message précédent. La précision fournie par les horodatages absolus les rend idéals pour les tâches d'archivage, mais dans le contexte limité d'une session de clavardage, cette précision nuit à l'expérience utilisateur car les utilisateurs doivent comparer les horodatages pour calculer le temps écoulé entre les messages. Les horodatages relatifs permettent aux utilisateurs de suivre facilement la conversation grâce à des termes comme Just Now (À l'instant) et A few moments ago (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 tout en simplifiant vos tâches de développement : parce que les horodatages relatifs marquent les messages en secondes, jours, heures, mois ou années, vous n'avez pas besoin de les convertir pour les fuseaux horaires.
Configurer les horaires relatifs
- Activez les horodatages –
enableTimestamp: true
- Activez les horodatages relatifs –
timestampType: 'relative'
timestampType: 'relative'
), un horodatage absolu s'affiche avant le premier message du jour en tant qu'en-tête. Cet en-tête s'affiche 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
Disposition des boutons d'action
Indicateur de fonction : actionsLayout
actionsLayout
définit la direction de disposition pour les actions locales, globales, de carte et de formulaire. Lorsque vous réglez ce paramètre à LayoutOrientation.HORIZONTAL
, ces boutons sont disposés horizontalement et s'encapsuleront 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 fichiers joints
(Obligatoire) <Entrez une description abrégée ici.>
Indicateur de fonction : shareMenuItems
Avant de configurer
shareMenuItems
, vous devez régler enableAttachment
à 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
n'a aucune valeur ou une null
pour l'étiquette, tout comme shareMenuCustomItem3 = ShareMenuCustomItem('csv')
dans l'extrait précédent, une chaîne type
ajoutée en suffixe à share_
devient l'étiquette. Pour shareMenuCustomItem3
, l'étiquette est share_csv
.
Vous pouvez permettre aux utilisateurs de charger tous les types de fichier en définissant
type
d'un objet ShareMenuCustomItem
comme *
.
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, où customItems
est une ArrayList
de Objects
. Chaque objet peut être du type de valeurs d'énumération ShareMenuItem
ou un objet 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
réglée à true
, le client envoie un FormSubmissionMessagePayload
avec le mappage submittedField
contenant les valeurs de champ valides qui ont été entrées jusqu'à présent. Tous les champs qui ne sont pas encore définis (qu'ils soient obligatoires ou non) ou les champs qui violent une validation côté client ne sont pas inclus dans le mappage submittedField
. Si le champ auto-soumis contient lui-même une valeur qui n'est pas valide, le message de soumission n'est pas envoyé et le message d'erreur du client s'affiche pour ce champ particulier. Lorsqu'une soumission automatique réussit, partialSubmitField
dans le message de soumission de formulaire est réglé à id
du champ autoSubmit
.
Remplacement d'un formulaire d'entrée précédent
Lorsque l'utilisateur final soumet le formulaire, soit parce que autosubmit
est réglé à true
pour un champ, la compétence peut envoyer un nouveau EditFormMessagePayload
. Ce message doit remplacer le message du formulaire d'entrée précédent. En réglant la propriété d'extension de canal replaceMessage
à true
, vous activez la trousse SDK pour remplacer le message de formulaire d'entrée précédent par le message de formulaire d'entrée courant.
Méthodes de connexion et de déconnexion
public void disconnect()
et public void connect()
. 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 compétence 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 de client par défaut
Indicateur de fonction : enableDefaultClientResponse: true
(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 la compétence a été retardée ou lorsqu'il n'y a aucune réponse de la compétence. Si l'utilisateur envoie le premier message/interrogation, mais que la compétence ne répond pas avec le nombre de secondes défini par l'indicateur odaas_default_greeting_timeout
, la compétence peut afficher un message de salutation configuré à l'aide de la chaîne de traduction odaas_default_greeting_message
. Ensuite, le client vérifie à nouveau la réponse de la compétence. Le client affiche la réponse de la compétence si elle a été reçue, mais dans le cas contraire, 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 compétence 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 de fonction : 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)
Le délégué public Message beforeDisplay(Message message)
permet la modification d'un message de la compétence avant son affichage dans la conversation. Le message modifié retourné par le délégué s'affiche dans la conversation. Si la méthode retourne null
, le message ne s'affiche pas.
public Message beforeDisplay( Message)
Le délégué public Message beforeDisplay(Message message)
permet la modification d'un message d'utilisateur avant son envoi au serveur de clavardage. Le message retourné par le délégué est envoyé à la compétence. Si la valeur retournée est nulle, le message n'est pas envoyé.
Afficher l'historique de conversation
Vous pouvez activer ou non l'affichage de l'historique de conversation locale d'un utilisateur après que la trousse SDK a été réinitialisée en réglant displayPreviousMessages
à true
ou false
dans la configuration des robots. Lorsque la propriété est réglée à false
, les messages précédents ne sont pas affichés pour l'utilisateur, après la réinitialisation de la trousse SDK.
Terminer la session de clavardage
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 clavardage courante. 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, la trousse SDK envoie un message d'événement à la compétence qui marque la fin de la session de clavardage. La trousse SDK déconnecte ensuite la compétence de l'instance, réduit le widget de clavardage et efface l'historique de conversation de l'utilisateur courant. La trousse 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()
pour lequel vous pouvez vous inscrire.
L'ouverture du widget de clavardage démarre ensuite une nouvelle session de clavardage.
public static void endChat()
Bots.endChat()
.Bots.endChat()
CompletionHandler
CompletionHandler
est un module d'écoute d'événements mis en oeuvre dans la trousse SDK, qui écoute l'achèvement de la tâche en cours d'exécution sur le délégué beforeEndConversation(CompletionHandler completionHandler)
dans l'application hôte. Reportez-vous à Javadoc inclus avec la trousse SDK disponible à partir de la page de téléchargement ODA et OMC.
SDK sans interface
La trousse SDK peut être utilisée sans son interface utilisateur. Pour l'utiliser dans ce mode, importez seulement l'ensemble com.oracle.bots.client.sdk.android.core-24.12.aar
dans le projet, comme décrit dans Ajouter la trousse SDK client pour Oracle Android au projet.
La trousse SDK gère la connexion au serveur et fournit des API pour l'envoi et la réception de messages, et pour l'obtention de mises à jour du statut du réseau et d'autres services. Vous pouvez utiliser les API pour interagir avec la trousse 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 à une compétence ou un assistant numérique.
public static null sendMessage(String text)
text
correspond au message texte.Bots.sendMessage("I want to order a Pizza");
EventListener
EventListener
qui établit ensuite la fonctionnalité pour :
void onStatusChange(ConnectionStatus connectionStatus)
– Cette méthode est appelée lorsque le statut de connexion de WebSocket change. Son paramètreconnectionStatus
indique le statut courant de la connexion. Reportez-vous à la documentation Javadoc incluse dans la trousse SDK (disponible dans la page de téléchargement ODA et OMC) pour plus de détails sur l'énumérationConnectionStatus
.void onMessageReceived(Message message)
– Cette méthode est appelée lorsqu'un nouveau message est reçu de la compétence. Son paramètremessage
correspond au message reçu de la compétence. Reportez-vous à la documentation Javadoc incluse dans la trousse SDK (disponible dans la page de téléchargement ODA et OMC) pour plus de détails sur la classeMessage
.void onMessageSent(Message message)
- Cette méthode est appelée lorsqu'un message est envoyé à la compétence. Son paramètre de message est le message envoyé à la compétence. Reportez-vous à la documentation Javadoc incluse dans la trousse SDK (disponible dans la page de téléchargement ODA et OMC) pour plus de détails sur la classeMessage
.void onAttachmentComplete()
– Cette méthode est appelée lorsqu'un chargement de fichier joint 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 alors être transmise à setEventListener(EventListener eventListener)
.
public static vide setEventListener(EventListener eventListener)
eventListener
est une instance de type EventListener
permettant de recevoir des mises à jour.Bots.setEventListener(new BotsEventListener());
Vue Web dans le widget
Indicateur de fonction : linkHandler
Vous pouvez configurer le comportement du lien dans les messages de clavardage pour permettre aux utilisateurs d'accéder aux pages Web depuis le widget de clavardage. Au lieu d'avoir à sortir de la conversation pour afficher une page dans un onglet ou une fenêtre de navigateur distincte, un utilisateur peut y rester parce que le widget de clavardage ouvre le lien dans une vue Web.
Configurer la vue Web dans le widget
Indicateur de fonction : webViewConfig
linkHandler
sur WebviewLinkHandlerType.WEBVIEW
. Vous pouvez définir la taille et l'affichage de la vue Web à 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 cet extrait de code, vous pouvez définir les attributs suivants pour la vue Web.Attribut | Paramètres |
---|---|
webViewSize |
Définit la taille de l'écran de la fenêtre de la vue Web dans le widget avec l'énumération WebviewSizeWindow , qui a deux valeurs : PARTIAL (WebviewSizeWindow.PARTIAL ) et FULL (WebviewSizeWindow.FULL ).
|
clearButtonLabel |
Définit le texte utilisé pour le bouton d'effacement ou de fermeture dans le coin 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, qui apparaît aligné à gauche à l'intérieur du bouton. |
clearButtonLabelColor |
Définit la couleur du texte de l'étiquette 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. |
Chat multilingue
Indicateur de fonction : multiLangChat
La prise en charge linguistique native de la trousse SDK Android permet au widget de clavardage de détecter la langue d'un utilisateur et de lui permettre de sélectionner la langue de conversation dans un menu déroulant de l'en-tête. Les utilisateurs peuvent passer d'une langue à l'autre, mais seulement d'une conversation à l'autre, et non pendant une conversation, car celle-ci est réinitialisée chaque fois qu'un utilisateur sélectionne une nouvelle langue.
Activer le menu Langue
multiLangChat
avec un objet contenant supportedLanguage
ArrayList, qui est composé de marqueurs de langue (lang
) et d'étiquettes d'affichage facultatives (label
). En dehors de ce tableau, vous pouvez éventuellement définir la langue par défaut avec la propriété primary
comme illustré par (primary("en")
dans l'extrait 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 clavardage affiche les langues prises en charge dans un menu déroulant situé dans l'en-tête. En plus des langues disponibles, le menu comprend également une option Détecter la langue. Lorsqu'un utilisateur sélectionne une langue dans ce menu, la conversation courante est réinitialisée et une nouvelle conversation est lancée avec la langue sélectionnée. La langue sélectionnée par l'utilisateur est conservée dans toutes les sessions du même navigateur. La langue précédente de l'utilisateur est donc automatiquement sélectionnée lorsque celui-ci revisite la compétence par la page contenant le widget de clavardage.
- 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 de l'utilisateur et sélectionne l'optionDetect Language ( Détecter la langue) dans le menu.
Désactiver menu langue
À partir de la version 21.12, vous pouvez également configurer et mettre à jour le langage de clavardage sans avoir à configurer le menu déroulant de sélection de langue en transmettant primary
dans la configuration initiale sans supportedLanguage
ArrayList. La valeur transmise dans la variable primary
est définie comme langue de clavardage 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 de l'utilisateur et active l'option Detect Language dans le menu.
Vous pouvez mettre à jour dynamiquement la langue sélectionnée en appelant l'API setPrimaryChatLanguage(lang)
. Si le fichier lang
transmis correspond à l'une des langues prises en charge, cette langue est sélectionnée. Lorsqu'aucune correspondance ne peut être trouvée, l'option Détecter la langue est activée. Vous pouvez également activer l'option Detected Language en appelant l'API Bots.setPrimaryChatLanguage('und')
, où 'und'
indique unddefined.
Vous pouvez mettre à jour le langage de clavardage de manière dynamique à l'aide de l'API setPrimaryChatLanguage(lang)
même si le menu déroulant n'a pas été configuré.
Référence rapide du clavardage multilingue
Pour ce faire... | ... Faire ceci |
---|---|
Afficher la liste déroulante de sélection de la langue aux utilisateurs finaux. | Définissez la propriété multiLangChat avec un objet contenant supportedLanguage ArrayList.
|
Définissez la langue du clavardage 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 supportedLanguage Arraylist. La valeur primary doit être l'une des langues prises en charge incluses dans le tableau.
|
Activer la détection de la langue. | Transmettez primary en tant que und .
|
Mettez à jour dynamiquement la langue du clavardage. | 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 documents, PDF et feuilles de calcul
- emplacement
En transmettant des objets ArrayList à shareMenuItems shareMenuItems(Arraylist<Object>)
, vous pouvez restreindre ou filtrer le type d'éléments disponibles dans le menu, personnaliser les icônes et étiquettes du menu et limiter la taille du fichier de chargement (par exemple, 1024 dans l'extrait suivant). Ces objets peuvent être soit un objet shareMenuCustomItem
, soit des valeurs d'énumération ShareMenuItem
mappées aux éléments de menu de partage : ShareMenuItem.CAMERA
pour l'élément de menu camera (si pris en charge par l'appareil), ShareMenuItem.VISUAL
pour le partage d'une image ou d'un élément 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 d'une valeur nulle affiche tous les éléments de menu qui peuvent être transmis sous la forme de valeurs d'énumération ShareMenuItem
.
ShareMenuCustomItem
n'a aucune valeur ou une valeur nulle pour l'étiquette, tout comme shareMenuCustomItem3 = ShareMenuCustomItem('csv')
dans l'extrait suivant, alors une chaîne de type ajoutée en suffixe à share_
devient l'étiquette. Pour shareMenuCustomItem3
, l'étiquette est share_csv
. Vous pouvez permettre aux utilisateurs de charger tous les types de fichier en définissant le type d'un objet ShareMenuCustomItem
comme *
.
Cette configuration ne s'applique que si
enableAttachment
est réglé à 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()
public static void shareMenuItems(ArrayList<Object> shareMenuItems)
Bots.shareMenuItems(customItems);
, où CustomItems
est une liste d'objets ArrayList. Chaque objet peut être du type de valeurs d'énumération ShareMenuItem
ou un objet 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);
La reconnaissance de la parole
Indicateur de fonction : enableSpeechRecognition
Si vous réglez l'indicateur de la fonction enableSpeechRecognition
à true
, le bouton du microphone s'affiche avec le bouton d'envoi lorsque le champ d'entrée d'utilisateur est vide.
Le réglage de cette propriété à true
prend également en charge la fonctionnalité activée par la propriété enableSpeechRecognitionAutoSend
qui, lorsque sa valeur est également true
, permet l'envoi automatique de la réponse vocale de l'utilisateur au serveur de clavardage et l'affichage de la réponse en tant que message envoyé dans la fenêtre de clavardage. Vous pouvez permettre aux utilisateurs de modifier (ou de supprimer) leurs messages dictés avant de les envoyer manuellement en réglant enableSpeechRecognitionAutoSend
à false
.
public static void startRecording(IBotsSpeechListener listener)
Lance l'enregistrement du message vocal de l'utilisateur. Le paramètre listener
est une instance de IBotsSpeechListener
permettant de recevoir la réponse retournée par le serveur.
isRecording() booléenne statique publique
Vérifie si l'enregistrement vocal a démarré ou non. Retourne true
si l'enregistrement a commencé. Sinon, la valeur false
est retournée.
IBotsSpeechListener
IBotsSpeechListener
, qui à son tour met en oeuvre la fonctionnalité des méthodes suivantes :
void onError(String error)
Cette méthode est appelée lorsque des erreurs se produisent lors de l'établissement de la connexion au serveur ou lorsqu'il n'y a aucune entrée fournie, ou qu'il y en a trop. Son paramètre error
correspond au message d'erreur.
void onSuccess(Chaîne d'énoncé)
Cette méthode est appelée lorsqu'un résultat final est reçu du serveur. Son paramètre utterance
correspond à l'énoncé final reçu du serveur.
Cette méthode est obsolète dans la version 20.8.1.
void onSuccess(BotsSpeechResult botsSpeechResult)
Cette méthode est appelée lorsqu'un résultat final est reçu du serveur. Son paramètre, botsSpeechResult
, est la réponse finale reçu du serveur.
void onPartialResult(Chaîne d'énoncé)
Cette méthode est appelée lorsqu'un résultat partiel est reçu du serveur. Son paramètre utterance
correspond à l'énoncé partiel reçu 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 la fermeture de la connexion
onActiveSpeechUpdate(octet[] 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 de la parole
- Indicateur de fonction :
enableSpeechSynthesis
- Configuration des fonctionnalités :
speechSynthesisVoicePreferences
- Les utilisateurs peuvent activer/désactiver la mise en sourdine de la réponse audio de la compétence à l'aide d'un bouton situé dans l'en-tête de la vue de clavardage. Pour activer cette fonction, réglez l'indicateur de fonction
enableSpeechSynthesis
àtrue
. - Vous pouvez définir la langue de préférence pour la lecture des messages de la compétence au moyen de la propriété
speechSynthesisVoicePreferences
. Ce paramètre, qui définit la langue et la voix, est composé d'une liste d'instancesSpeechSynthesisSetting
(décrites dans la documentation Javadoc de la trousse SDK téléchargée à partir de la page de téléchargement ODA et OMC). Cette propriété active un remplacement lorsque l'appareil ne prend pas en charge la langue ou la voix de préférence. Si l'appareil ne prend pas en charge la voix de préférence, la voix par défaut pour la langue de préférence est utilisée à la place. Si ni la voix ni la langue de préférence n'est prise en charge, la voix et la langue par défaut sont utilisées.
public static void initSpeechSynthesisService()
onCreate()
d'une activité pour initialiser le service de synthèse de la parole. L'initialisation du service de synthèse de la parole a lieu lors de l'initialisation de la bibliothèque de la trousse SDK uniquement si l'indicateur de fonction enableSpeechSynthesis
est réglé à true
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bots.initSpeechSynthesisService();
}
}
public static null startBotAudioResponse(String text)
text
indique le texte du message de la compétence qui est lu à haute voix.Bots.startBotAudioResponse("What kind of crust do you want?");
Cette méthode était 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 compétence est actuellement lue à haute voix ou non.
true
si la réponse de la compétence est actuellement lue à haute voix. Sinon, la valeur false
est retournée.if (Bots.isSpeaking()) {
Bots.stopBotAudioResponse();
}
public static void shutdownBotAudioResponse()
Libère les ressources utilisées par la trousse SDK.
onDestroy()
de ConversationActivity
.public class ConversationActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
Bots.shutdownBotAudioResponse();
}
}
Injection de service vocal
Indicateur de fonction : ttsService
L'indicateur de fonction speechSynthesisService
vous permet d'injecter tout service de synthèse vocale (TTS) - le vôtre ou fourni par un fournisseur tiers - dans la trousse SDK. Pour injecter un service TTS, vous devez d'abord régler l'indicateur de fonction enableSpeechSynthesis
à true
, puis transmettre une instance de l'interface SpeechSynthesisService
à l'indicateur speechSynthesisService
.
L'interface SpeechSynthesisService
SpeechSynthesisService
. Il implémente ces méthodes :
initTextToSpeechService(@NonNull Application application, @NonNull BotsConfiguration botsConfiguration)
: Initialise un nouveau service TTS.Paramètre Description application
L'application. Cette valeur ne peut pas être vide. botsConfiguration
Objet BotsConfiguration
utilisé pour contrôler les fonctions de la bibliothèque. Cette valeur ne peut pas être vide.speak(String phrase)
: Ajoute une phrase à parler à la file d'attente d'énoncés. Le paramètrephrase
est le texte à parler.isSpeaking()
: Vérifie si la réponse audio est prononcée ou non. Elle retournefalse
s'il n'y a pas de réponse audio en cours.Note
Cette méthode était obsolète dans la version 21.08.stopTextToSpeech()
: Arrête toute synthèse vocale en cours.Note
Cette méthode était obsolète dans la version 21.08.shutdownTextToSpeech()
: Libère les ressources utilisées par le moteur TextToSpeech.getSpeechSynthesisVoicePreferences()
: Retourne 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 des préférences vocales pour la synthèse vocale.onSpeechSynthesisVoicePreferencesChange(ArrayList<SpeechSynthesisSetting> speechSynthesisVoicePreferences)
: Règle la voix de synthèse vocale à la meilleure correspondance vocale disponible.NoteNous vous recommandons d'appeler cette méthode dans la méthode
Cette méthode était obsolète dans la version 21.08.setSpeechSynthesisVoicePreferences
après avoir défini les préférences vocalesArrayList
. Le paramètrespeechSynthesisVoicePreferences
est le tableau des 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 le paramètre régional 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 obsolètes 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 retournait la voix sélectionnée. Maintenant, la même fonctionnalité est atteinte par les nouvelles méthodes : SpeechSynthesisService#setTTSVoice(ArrayList<SpeechSynthesisSetting> TTSVoices)
, qui définit à la fois le tableau des préférences vocales de synthèse vocale et la meilleure voix disponible pour la synthèse vocale et SpeechSynthesisService#getTTSVoice()
, qui retourne la voix sélectionnée pour la synthèse vocale.
Indicateur de saisie pour les conversations utilisateur-agent
Indicateur de fonction : enableSendTypingStatus
Lorsque cette option est activée, la trousse SDK envoie un événement de saisie RESPONDING
avec le texte en cours de saisie par l'utilisateur à . Cela affiche un indicateur de frappe sur la console de l'agent. Lorsque l'utilisateur a terminé de taper, la trousse SDK envoie un événement LISTENING
à Oracle B2C Service ou à Oracle Fusion Service. Cela masque l'indicateur de frappe sur la console de l'agent.
De même, lorsque l'agent entre, la trousse SDK reçoit un événement RESPONDING
du service. À la réception de cet événement, la trousse SDK affiche un indicateur de frappe pour l'utilisateur. Lorsque l'agent est inactif, la trousse SDK reçoit l'événement LISTENING
du service. À la réception de cet événement, la trousse SDK masque l'indicateur de frappe affiché à l'utilisateur.
sendUserTypingStatus
active le même comportement pour le mode sans tête.public void sendUserTypingStatus(TypingStatus status, String text)
- Pour afficher l'indicateur de frappe sur la console de l'agent :
Bots.sendUserTypingStatus("RESPONDING", "<Message_Being_Typed>");
- Pour masquer l'indicateur de frappe 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, la trousse SDK envoie l'événement de saisieRESPONDING
toutes les trois secondes au service. Utilisez cet indicateur pour limiter l'événement. La valeur minimale qui peut être définie est de trois secondes.enableAgentSneakPreview
- Oracle B2C Service prend en charge l'affichage du texte de l'utilisateur lors de son entrée. Si cet indicateur est réglé àtrue
(la valeur par défaut estfalse
), la trousse SDK envoie le texte réel. Pour protéger la confidentialité des utilisateurs, la trousse SDK envoie…
au lieu du texte réel à Oracle B2C Service lorsque l'indicateur est réglé àfalse
.Note
Cette fonction doit être activée à la fois dans la trousse SDK et dans la configuration de clavardage d'Oracle B2C Service.
Mettre à jour l'avatar de l'utilisateur
Vous pouvez activer la mise à jour dynamique de l'avatar de l'utilisateur au moment de l'exécution.
Exposer 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
, voir Javadocs.
public void setAgentDetails(AgentDetails)
Bots.setAgentDetails(AgentDetails);
public AgentDetails getAgentDetails()
Bots.getAgentDetails(AgentDetails);
Pour plus de détails sur la classe AgentDetails
, voir Javadocs.
Visualiseur vocal
Lorsque la prise en charge vocale est activée (enableSpeechRecognition(true)
), le pied de page du widget de clavardage affiche un visualiseur vocal, un graphe de visualisation dynamique qui indique le niveau de fréquence de l'entrée vocale. Le visualiseur répond à la modulation de la voix de l'utilisateur en indiquant si l'utilisateur parle trop doucement ou trop fort. Ce visualiseur est créé à l'aide du flux d'octets enregistrés pendant que l'utilisateur parle. Ce flux est également exposé dans la méthode IBotsSpeechListener#onActiveSpeechUpdate(byte[])
pour une utilisation en mode sans interface.
Le mode vocal est indiqué par l'apparition de l'icône de clavier.
Lorsque enableSpeechRecognitionAutoSend(true)
, le texte reconnu est automatiquement envoyé à la compétence une fois que l'utilisateur a terminé de dicter le message. Le mode repasse ensuite à l'entrée de texte. Lorsque enableSpeechRecognitionAutoSend(false)
, le mode repasse également à l'entrée de texte, mais dans ce cas, les utilisateurs peuvent modifier le texte reconnu avant d'envoyer le message à la compétence.