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

Pour ajouter un horodatage relatif :
  • Activez les horodatages – enableTimestamp: true
  • Activez les horodatages relatifs – timestampType: 'relative'
Lorsque vous configurez l'horodatage (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.
Cet horodatage est mis à jour à intervalles réguliers (secondes, minutes, etc.) jusqu'à la 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 le clavardage, l'horodatage relatif du message précédent est supprimé et un nouvel horodatage apparaît sur le nouveau message affichant le temps écoulé depuis le message précédent. À ce moment-là, l'horodatage relatif se met à jour jusqu'à ce que le message suivant arrive.

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

Utilisez cette fonction pour restreindre ou filtrer les types d'élément disponibles dans la fenêtre contextuelle du menu de partage, définir la limite de taille de fichier pour les chargements (par exemple, 1024 dans l'extrait de code suivant) et personnaliser les icônes et les étiquettes du menu.
Note

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

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)

Vous pouvez mettre à jour dynamiquement les éléments de menu de partage en appelant l'API 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);

public static void shareMenuItems()

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

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

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

La fonction de délégation vous permet de définir un délégué pour la réception de rappels avant certains événements de la conversation. Pour définir un délégué, une classe doit mettre en oeuvre 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é.

public Message beforeNotification(Message message)

Le délégué public Message beforeNotification(Message message) permet la modification d'un message de la compétence avant le déclenchement d'un avis. S'il retourne une valeur nulle, l'avis n'est pas déclenché.

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

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

Envoie un message texte à la compétence. Le paramètre text correspond au message texte.
Bots.sendMessage("I want to order a Pizza");
EventListener
Pour être à l'écoute du changement de statut de connexion, le message envoyé ou reçu de la compétence, et les événements de statut de chargement de fichiers joints, une classe doit mettre en oeuvre l'interface 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ètre connectionStatus 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ération ConnectionStatus.
  • void onMessageReceived(Message message) – Cette méthode est appelée lorsqu'un nouveau message est reçu de la compétence. Son paramètre message 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 classe Message.
  • 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 classe Message.
  • 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)
Définit le module d'écoute qui reçoit la réponse retournée par la compétence pour obtenir les mises à jour du statut de connexion et recevoir une mise à jour une fois le chargement du fichier joint terminé. Son paramètre 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

Vous pouvez configurer le comportement du lien de la vue Web en réglant la fonction 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

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, 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.
Voici ce que vous devez garder à l'esprit 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 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

En plus des langues transmises, le widget de clavardage affiche une option Detect Language dans la liste déroulante. La sélection de cette option indique à la compétence de détecter automatiquement la langue de conversation à partir du message de l'utilisateur et, si possible, de répondre dans cette même langue.
Note

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

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

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

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

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

public static void shareMenuItems(ArrayList<Object> shareMenuItems)

Vous pouvez mettre à jour dynamiquement les éléments du menu de partage en appelant l'API 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.

public static void stopRecording()

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

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

Une classe doit mettre en oeuvre l'interface 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.

Note

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.

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

void onOpen()

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

onActiveSpeechUpdate(octet[] speechData)

Cette méthode est appelée lorsque le message vocal de l'utilisateur a été mis à jour. Le visualiseur vocal peut ensuite être modifié. Son paramètre est speechData, le 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 de la parole

  • Indicateur de fonction : enableSpeechSynthesis
  • Configuration des fonctionnalités : speechSynthesisVoicePreferences
La synthèse de la parole a été intégrée avec la trousse SDK afin de permettre la lecture à haute voix des nouveaux messages reçus de la compétence :
  • 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'instances SpeechSynthesisSetting (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()

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

Démarre la lecture à haute voix de la réponse de la compétence. Le paramètre text indique le texte du message de la compétence qui est lu à haute voix.
Bots.startBotAudioResponse("What kind of crust do you want?");
Note

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

public static void stopBotAudioResponse()

Met fin à la lecture à haute voix de la réponse de la compétence.
Bots.stopBotAudioResponse()

public static boolean isSpeaking()

Vérifie si la réponse de la compétence est actuellement lue à haute voix ou non.

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

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

Vous créez une instance d'une classe qui est une mise en oeuvre de l'interface 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ètre phrase est le texte à parler.
  • isSpeaking() : Vérifie si la réponse audio est prononcée ou non. Elle retourne false 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ètre speechSynthesisVoicePreferences 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.
    Note

    Cette méthode était 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 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ètre speechLocale 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.
        }
    }
Note

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.

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

public void updatePersonAvatar

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

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

Retourne un objet contenant les détails de l'agent.
Bots.getAgentDetails(AgentDetails);
Pour plus de détails sur la classe AgentDetails, voir Javadocs.

public void setAgentDetails(AgentDetails)

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

public AgentDetails getAgentDetails()

Retourne un objet contenant les détails de l'agent.
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 widget de clavardage affiche un visualiseur vocal lorsque les utilisateurs cliquent sur l'icône vocale. Il indique si le niveau audio est suffisamment élevé pour permettre à la trousse SDK de capter la voix de l'utilisateur. Le message de l'utilisateur, converti en texte, s'affiche sous le visualiseur.
Note

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.