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

Pour ajouter un horodatage relatif, effectuez les opérations suivantes :
  • Activez les horodatages : enableTimestamp: true.
  • Activez les horodatages relatifs : timestampType: 'relative'.
Lorsque vous configurez l'horodatage (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.
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
Lorsqu'un nouveau message est chargé dans la discussion, l'horodatage relatif du message précédent est enlevé et un nouvel horodatage apparaît sur le nouveau message indiquant le temps écoulé depuis le message précédent. A ce stade, l'horodatage relatif est mis à jour jusqu'à l'arrivée des messages suivants.

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

Utilisez cette fonctionnalité pour restreindre, ou filtrer, les types d'élément disponibles dans la fenêtre instantanée de menu de partage, définir la limite de taille de fichier pour les chargements (par exemple, 1024 dans le fragment de code suivant) et personnaliser les icônes et les libellés du menu.
Remarque

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();
Si un objet 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.
Remarque

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)

Vous pouvez mettre à jour dynamiquement la fenêtre instantanée des options de menu de partage en appelant l'API 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);

public static void shareMenuItems()

Vous pouvez obtenir la liste des options du menu de partage en appelant l'API Bots.shareMenuItems();.
Bots.shareMenuItems()

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

La brique peut être connectée et déconnectée à l'aide des méthodes 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();
Lorsque 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

La fonctionnalité de délégation permet de définir un délégué pour recevoir les callbacks avant certains événements dans la conversation. Pour définir un délégué, une classe doit implémenter 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é.

public Message beforeNotification(Message message)

Le délégué public Message beforeNotification(Message message) permet de modifier le message d'une brique avant le déclenchement d'une notification. S'il renvoie la valeur NULL, la notification n'est pas déclenchée.

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

La conversation peut également être arrêtée dynamiquement en appelant l'API 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)

Envoie un message texte à la brique. Son paramètre text est le message texte.
Bots.sendMessage("I want to order a Pizza");
EventListener
Pour écouter le changement de statut de la connexion, le message envoyé à la brique et le message reçu à partir de la brique, ainsi que les événements de statut de téléchargement de pièce jointe, une classe doit implémenter l'interface 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ètre connectionStatus est le statut en cours de la connexion. Pour plus d'informations sur l'énumération ConnectionStatus, 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ètre message est le message reçu à partir de la brique. Pour plus d'informations sur la classe Message, 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 classe Message, 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)
Définit le processus d'écoute de sorte qu'il puisse recevoir la réponse renvoyée par la brique pour obtenir des mises à jour sur le changement de statut de la connexion et pour recevoir une mise à jour lorsque le chargement de la pièce jointe est terminé. Son paramètre 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

Vous pouvez configurer le comportement des liens de vue Web en définissant la fonction 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

Vous pouvez activer un menu qui permet aux utilisateurs de sélectionner une langue préférée dans un menu déroulant en définissant la propriété 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.
Voici quelques points à prendre en compte lors de la configuration de la prise en charge multilingue :
  • 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

Outre les langues transmises, le widget de discussion affiche l'option Détecter la langue dans la liste déroulante. La sélection de cette option indique à la brique de détecter automatiquement la langue de la conversation à partir du message de l'utilisateur et, si possible, de répondre dans la même langue.
Remarque

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

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

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.

Si un objet 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 *.
Remarque

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

Vous pouvez obtenir la liste des options du menu de partage en appelant l'API Bots.shareMenuItems();.
Bots.shareMenuItems()

espace statique public shareMenuItems(ArrayList<Object> shareMenuItems)

Vous pouvez mettre à jour dynamiquement la fenêtre instantanée des options de menu de partage en appelant l'API 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 void stopRecording()

Arrête l'enregistrement du message vocal de l'utilisateur.

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

Une classe doit implémenter l'interface 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.

Remarque

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.

Paramètres :
  • code : code de statut
  • message : motif de fermeture de la connexion

void onOpen()

Méthode appelée lors de l'ouverture de la connexion au serveur.

onActiveSpeechUpdate(byte[] speechData)

Cette méthode est appelée en cas de mise à jour dans le message vocal de l'utilisateur, qui peut ensuite permettre de mettre à jour le visualiseur vocal. Son paramètre est speechData, tableau d'octets de la voix enregistrée de l'utilisateur.
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
Le kit SDK a été intégré avec une synthèse vocale permettant de lire à voix haute les nouveaux messages de la brique :
  • 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 sur true.
  • 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 instances SpeechSynthesisSetting (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()

Initialise le service de synthèse vocale. Cette méthode doit être appelée dans la méthode 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)

Commence à lire la réponse de la brique à voix haute. Son paramètre text est le texte du message de la brique qui est lu.
Bots.startBotAudioResponse("What kind of crust do you want?");
Remarque

Cette méthode est obsolète dans la version 21.08.

public static void stopBotAudioResponse()

Arrête la lecture de la réponse de la brique.
Bots.stopBotAudioResponse()

public static boolean isSpeaking()

Vérifie si la réponse de la brique est actuellement lue ou non.

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

Cette méthode est appelée dans la méthode 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

Vous créez une instance d'une classe qui est une implémentation de l'interface 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ètre phrase est le texte à prononcer.
  • isSpeaking() : vérifie si la réponse audio est parlée ou non. Il renvoie false 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ètre speechSynthesisVoicePreferences 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.
    Remarque

    Cette méthode est obsolète dans la version 21.08.
    Nous vous recommandons d'appeler cette méthode dans la méthode setSpeechSynthesisVoicePreferences après avoir défini les préférences vocales ArrayList. Le paramètre speechSynthesisVoicePreferences 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ètre speechLocale 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.
        }
    }
Remarque

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.

L'API 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
             }
           }
         }
Deux autres paramètres fournissent un contrôle supplémentaire :
  • typingStatusInterval : par défaut, le kit SDK envoie l'événement de saisie RESPONDING 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 sur true (la valeur par défaut est false), 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 sur false.
    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.

public void updatePersonAvatar

Définit l'avatar de l'utilisateur pour tous les messages, y compris les messages précédents.
ConversationActivity.setUserPerson(Object);

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

Renvoie un objet contenant les détails de l'agent.
Bots.getAgentDetails(AgentDetails);
Pour plus de détails sur la classe AgentDetails, reportez-vous aux Javadoc.

public void setAgentDetails(AgentDetails)

Remplace les détails de l'agent reçus du serveur.
Bots.setAgentDetails(AgentDetails);

public AgentDetails getAgentDetails()

Renvoie un objet contenant les détails de l'agent.
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 widget de discussion affiche un visualiseur vocal lorsque les utilisateurs cliquent sur l'icône de voix. Il s'agit d'un indicateur spécifiant si le niveau audio est suffisamment élevé pour permettre au kit SDK de capturer la voix de l'utilisateur. Le message de l'utilisateur, tel qu'il est reconnu en tant que texte, s'affiche sous le visualiseur.
Remarque

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.