Fonctions

Voici les fonctionnalités que vous pouvez configurer dans le kit SDK Oracle iOS.

Horodatages absolus et relatifs

  • Indicateur de fonctionnalité : enableTimestamp
  • Indicateur de fonctionnalité : timestampMode

Vous pouvez activer les horodatages absolus ou relatifs pour les messages de discussion. Les horodatages absolus affichent l'heure exacte de chaque message. Les 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, vous devez activer enableTimestamp (true), et timestampMode, qui contrôle le style de l'horodatage, doit prendre la valeur timestampMode.relative. Si vous définissez timestampMode.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 actions

Utilisez les paramètres de configuration BotsProperties.actionsLayout pour afficher les boutons d'action dans des présentations horizontales ou verticales. La présentation peut être définie pour les actions locales, les actions globales, les actions de carte et les actions de formulaire. La valeur par défaut est horizontal pour tous les types d'action.

BotsProperties.actionsLayout = ActionsLayout(local: .horizontal,global: .vertical,card: .horizontal,form: .horizontal)

Avatars d'agent

Pour les briques auxquelles est intégrée la prise en charge des agents physiques, le paramètre agentAvatar permet d'afficher une icône d'avatar pour les messages envoyés par les agents. Vous le configurez avec l'URL de l'icône qui apparaît en regard des messages d'agent.

Mettre à jour dynamiquement les avatars et les détails de l'agent

Vous pouvez activer la mise à jour dynamique des avatars d'utilisateur et d'agent lors de l'exécution à l'aide de setUserAvatar(avatarAsset : String), getAgentDetails() et setUserAvatar(avatarAsset : String).

Définir l'avatar de l'utilisateur

setPersonAvatar(avatarAsset : String) permet la mise à jour dynamique de l'avatar utilisateur lors de l'exécution. Cette méthode définit l'avatar utilisateur pour tous les messages, y compris les messages précédents. avatarAsset peut être :
  • Nom de la ressource du dossier Assets du projet.
  • Un lien externe vers la source d'image, comme illustré dans l'exemple suivant.
BotsUIManager.shared().setPersonAvatar(avatarAsset: "https://picsum.photos/200/300")
BotsUIManager.shared().setPersonAvatar(avatarAsset: "userAvatarInAssetsFolder") 

Définir les détails de l'agent

Vous pouvez personnaliser les détails de l'agent à l'aide de l'API setAgentDetails(agentDetails: AgentDetails). Outre le nom de l'agent, les autres attributs que vous pouvez utiliser cette API pour personnaliser sont la couleur du texte et l'avatar. Si aucun avatar d'agent n'a été configuré, l'avatar peut être configuré dynamiquement avec les initiales du nom d'agent. Vous pouvez également personnaliser la couleur de ces initiales et la couleur d'arrière-plan. L'API getAgentDetails() extrait les détails de l'agent en cours.

Bien que ces API puissent être appelées à tout moment, nous vous recommandons de les utiliser avec les événements onReceiveMessage() ou beforeDisplay().

setAgentDetails(agentDetails: AgentDetails)

Pour remplacer les détails de l'agent reçus du serveur, utilisez cette API comme suit :
Remarque

Tous les paramètres de l'objet AgentDetails sont facultatifs.
// to override avatar , name and name text colorlet agentDetails = AgentDetails(name: "Bob", avatarImage: "https://picsum.photos/200/300", nameTextColor: .red)
// to override avatar , namelet agentDetails = AgentDetails(name: "Bob", avatarImage: "https://picsum.photos/200/300")
// to override avatar, name, name text color,avatar initials color , avatar background let agentDetails = AgentDetails(name: "Bob", nameTextColor: .red,avatarTextColor: .blue,avatarBackgroundColor: .green)
BotsUIManager.shared().setAgentDetails(agentDetails: agentDetails)
En outre, chaque propriété de l'objet AgentDetails peut être modifiée. Par exemple :
let agentDetails = AgentDetails()
agentDetails.name = "Bob"
agentDetails.avatarImage = "agentAvatar"
agentDetails.nameTextColor = .red
agentDetails.avatarBackgroundColor = .green
agentDetails.avatarTextColor = .brown
BotsUIManager.shared().setAgentDetails(agentDetails: agentDetails)

getAgentDetails()

Renvoie un objet contenant les détails de l'agent.
let agentDetails = BotsUIManager.shared().getAgentDetails()

Filtrage des pièces jointes

Indicateur de fonctionnalité : shareMenuConfiguration

Utilisez shareMenuConfiguration 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 en ko pour les téléchargements (par exemple, 1024 dans le fragment de code suivant) et personnaliser les icônes et les libellés du menu. La valeur par défaut et la limite maximale sont de 25 Mo.
Remarque

Pour pouvoir configurer shareMenuConfiguration, vous devez définir enableAttachment sur true.
botsConfiguration.shareMenuConfiguration = ([ShareMenuItem.files, ShareMenuItem.camera, ShareMenuItem.location], [ShareMenuCustomItem(types: [String(kUTTypePDF)], label: "PDF Files", maxSize: 1024), ShareMenuCustomItem(types: [String(kUTTypeText)], label: "Text Files")])
Pour types, vous devez utiliser CFString pour le type de fichier correspondant et le convertir en String. Toute autre chaîne ne sera pas valide. Vous pouvez autoriser les utilisateurs à télécharger tous les types de fichier en définissant types sur String(kUTTypeItem).

public func shareMenuItems(shareMenuItems : ([ShareMenuItem], [ShareMenuCustomItem]))

Vous pouvez mettre à jour dynamiquement la fenêtre instantanée des options de menu de partage en appelant l'API BotsManager.shared().shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem])).
BotsManager.shared().shareMenuItems([ShareMenuItem.files, ShareMenuItem.camera, ShareMenuItem.location], [ShareMenuCustomItem(types: [String(kUTTypePDF)], label: "PDF Files", maxSize: 1024), ShareMenuCustomItem(types: [String(kUTTypeText)], label: "Text Files")])

public func shareMenuItems() -> ([ShareMenuItem], [ShareMenuCustomItem])

Vous pouvez obtenir la liste des options du menu de partage en appelant le
BotsManager.shared().shareMenuItems();
API.
BotsManager.shared().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.

Méthodes de connexion, déconnexion et destruction

La brique peut être connectée ou déconnectée, ou le kit SDK peut être détruit à l'aide des méthodes public func destroy(), public func disconnect() et public func connect().

public func destroy()

Détruit le SDK en fermant toute connexion active, reconnaissance vocale, synthèse vocale, téléchargements de fichiers et en supprimant le contrôleur de vue SDK. Une fois appelées, aucune méthode d'API publique ne peut être appelée. Ils ne seront à nouveau actifs qu'une fois que la méthode initialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ()) aura été appelée à nouveau pour initialiser le kit SDK.

public func disconnect()

Toutes les connexions réseau sont fermées après l'appel de la méthode de déconnexion.
BotsManager.shared().disconnect()

public func connect()

La connexion au socket Web est établie si la brique était déconnectée.
BotsManager.shared().connect()

public func connect(botsConfiguration : BotsConfiguration)

Lorsque cette méthode est appelée avec un nouveau BotsConfiguration, la connexion de socket Web existante est fermée et une nouvelle connexion est établie à l'aide des nouvelles propriétés de canal. Les autres propriétés définies dans BotsConfiguration restent telles quelles.
var botsConfiguration = BotsConfiguration(url: url, userId: userId, channelId: channelId)
BotsManager.shared().connect(botsConfiguration: botsConfiguration)

Réponses client par défaut

Indicateur de fonctionnalité : enableDefaultClientResponse

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 defaultGreetingTimeout, la brique peut afficher un message d'accueil configuré à l'aide de la chaîne de traduction odais_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 odais_default_wait_message) à des intervalles définis par l'indicateur defaultWaitMessageInterval. Lorsque l'attente de la réponse de la brique dépasse le seuil défini par l'indicateur typingStatusTimeout, 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 odais_default_sorry_message.

Délégation

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 respecter le protocole BotsMessageServiceDelegate et implémenter les méthodes suivantes :

public func beforeDisplay(message : [String : Any] ?) -> [String : Any] ?

Cette méthode permet de modifier la charge utile de message d'une brique avant l'affichage dans la conversation. La charge utile de message renvoyée par la méthode permet d'afficher le message. Si la méthode renvoie nil, le message n'est pas affiché.

public func beforeSend(message : [String : Any] ?) -> [String : Any] ?

Cette méthode permet de modifier la charge utile de message utilisateur avant leur envoi au serveur de discussion. La charge utile de message renvoyée par la méthode est envoyée à la brique. Si la méthode renvoie nil, le message n'est pas envoyé.

public func beforeSendPostback(action : [String : Any] ?) -> [String : Any] ?

La méthode public func beforeSendPostback(action: [String: Any]?) -> [String: Any]? permet de modifier la charge utile d'action de postback avant leur envoi au serveur de discussion. La charge utile d'action de postback renvoyée par la méthode sont envoyées à la brique. Si la méthode renvoie nil, l'action de postback sélectionnée par l'utilisateur n'est pas envoyée au serveur de discussion.
public class ViewController: UIViewController, BotsMessageServiceDelegate {
    func beforeSend(message: [String : Any]?) -> [String : Any]? {
        // Handle before send delegate here
    }
    
    func beforeDisplay(message: [String : Any]?) -> [String : Any]? {
        // Handle before display delegate here
    }
    
    func beforeSendPostback(action: [String : Any]?) -> [String : Any]? {
        // Handle before send postback action delegate here
    }
}
L'instance, qui se conforme au protocole BotsMessageServiceDelegate, doit être affectée à la propriété BotsManager.shared().delegate, comme indiqué dans le fragment de code suivant pour l'initialisation du kit SDK :
BotsManager.shared().delegate = self

Mettre fin à la session de discussion

Indicateur de fonctionnalité : enableEndConversation

enableEndConversation, lorsqu'il est défini sur 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 appelle également un événement chatend dans le protocole BotsEventListener que vous pouvez implémenter.

L'ouverture du widget de discussion démarre ensuite une nouvelle session de discussion.

Conseil :

Vous pouvez également mettre fin à la conversation en appelant la méthode BotsManager.shared().endChat(), que vous pouvez utiliser lorsque le kit SDK est initialisé en mode sans interface utilisateur.

SDK sans interface utilisateur

Vous pouvez utiliser le kit SDK sans son interface utilisateur. 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 BotsManager. Par exemple, public func send(message: UserMessage) envoie un message texte à la brique ou à l'assistant numérique.

public func send(message : UserMessage)

Cette fonction envoie un message à la brique. Son paramètre message est une instance d'une classe qui se conforme à la classe UserMessage. Dans ce cas, il s'agit de UserTextMessage.BotsManager.shared().send(message: UserTextMessage(text: "I want to order a pizza", type: .text))

BotsEventListener

Pour écouter les événements de modification du statut de connexion, de message reçu à partir de la brique et de statut de téléchargement de pièce jointe, une classe peut implémenter le protocole BotsEventListener, qui met en oeuvre les méthodes suivantes :
  • 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 de détails sur l'énumération ConnectionStatus, reportez-vous à la documentation d'API incluse dans le kit SDK.
  • onReceiveMessage(message: BotsMessage) : 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 de détails sur la classe BotsMessage, reportez-vous à la documentation d'API incluse dans le kit SDK.
  • onUploadAttachment(message: BotsAttachmentMessage) : cette méthode est appelée lorsqu'un téléchargement vers le serveur de pièce jointe est terminé. Son paramètre message est l'objet BotsAttachmentMessage pour la pièce jointe téléchargée.
  • onDestroy() : cette méthode est appelée lorsque la méthode destroy() est appelée.
  • onInitialize() : cette méthode est appelée lorsque la méthode initialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ()) est appelée. Elle utilise le paramètre suivant :
    • newLanguage : objet SupportedLanguage pour la langue de discussion que vous venez de définir.
  • beforeEndConversation() : cette méthode est appelée lorsque la session de fin de conversation est lancée.
  • chatEnd() : méthode de rappel déclenchée après la fin de la conversation.
extension ViewController: BotsEventListener {
    func onReceiveMessage(message: BotsMessage) {
        // Handle the messages received from skill or Digital Assistant
    }

    func onUploadAttachment(message: BotsAttachmentMessage) {
        // Handle the post attachment upload actions
    }

    func onStatusChange(connectionStatus: ConnectionStatus) {
        // Handle the connection status change
    }

    func onInitialize() {
        //Handle initialization
    }

    func onDestroy() {
        //Handle destroy
    }

    func onChatLanguageChange(newLanguage: SupportedLanguage) {
        //Handle the language change.
    }

    func beforeEndConversation(completionHandler: @escaping (EndConversationStatus) -> Void) {
        //Do the desired cleanup before session is closed.
        return completionHandler(.success) // if cleanup was successfull.
        return completionHandler(.success) // if there was en error cleaning up.
    }
    
     func chatEnd() {
        //Handle successfull session end from server before the SDK is destroyed.
     }
}
L'instance, qui se conforme au protocole BotsEventListener, doit être affectée à la propriété BotsManager.shared().botsEventListener, comme indiqué dans le fragment de code suivant pour l'initialisation du kit SDK :
BotsManager.shared().botsEventListener = self

Vue Web dans le widget

Propriété d'interface utilisateur : 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

Propriété d'interface utilisateur : WebViewConfig

Vous pouvez définir la configuration de la vue Web en définissant la propriété LinkHandler sur LinkHandlerType.webview. L'objet WebViewConfig peut être défini sur une instance de structure WebViewConfiguration.
BotsProperties.LinkHandler = LinkHandlerType.webview
//Set the properties which you want changed from the default values.
BotsProperties.WebViewConfig.webViewSize = WebViewSize.full
BotsProperties.WebViewConfig.clearButtonLabelColor = UIColor.black
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'attribut WebviewSize, qui prend deux valeurs : partial (WebviewSize.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 provient de la chaîne définie sur odais_done dans le fichier Localizable.strings.
clearButtonIcon Définit une icône pour le bouton d'effacement, alignée à gauche dans le bouton. Par défaut, aucune icône n'est définie pour le bouton d'effacement. Il s'agit d'une chaîne vide.
clearButtonLabelColor Définit la couleur du texte du libellé du bouton d'effacement. La couleur par défaut est UIColor.white.
clearButtonColor Définit la couleur d'arrière-plan du bouton d'effacement. La couleur par défaut est UIColor.clear.
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.

Formatage d'horodatage de message

L'indicateur timestampFormat formate les horodatages affichés dans les messages. Il peut accepter une chaîne composée de jetons de format tels que "hh:mm:ss" et d'autres formats pris en charge par le formateur Swift DateFormatter.

Discussion multilingue

Indicateur de fonctionnalité : multiLangChat

La langue native du kit SDK iOS permet au widget de discussion de détecter la langue de l'utilisateur ou de permettre aux utilisateurs de sélectionner la langue de la conversation. Les utilisateurs peuvent changer de langue, mais uniquement entre différentes conversations et pas au cours d'une conversation, car la conversation est réinitialisée chaque fois qu'un utilisateur sélectionne une nouvelle langue.

Activer le menu de langue

Vous pouvez activer un menu permettant 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 le tableau supportedLanguages, 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 variable primaryLanguage (MultiLangChat(primaryLanguage: String) dans le fragment de code suivant).
    botsConfiguration.multiLangChat = MultiLangChat(
            supportedLanguages:[
                SupportedLanguage.init(lang: "en", label: "English"),
                SupportedLanguage.init(lang: "fr"),
                SupportedLanguage.init(lang: "fr-CA", label: "French (Canada)")
            ],
            primaryLanguage: "fr-CA"
        )
Remarque

Pour formater correctement les codes de langue et de région dans des fichiers .lproj (projet de localisation) localisables, utilisez un tiret (-) comme séparateur et non un trait de soulignement (_). Par exemple, utilisez fr-CA et non fr_CA. Cela correspond à la façon dont les fichiers .lproj sont créés dans l'application. Lorsque le kit SDK recherche un fichier .lproj, il tente d'abord d'en localiser un au format languageCode-Region.lproj exact. S'il ne trouve pas un tel fichier, le kit SDK recherche un fichier languageCode.lproj. Si cela est également introuvable, le kit SDK recherche un fichier base.lproj. Lorsqu'aucun d'entre eux ne peut être localisé, le kit SDK utilise par défaut l'anglais (en).

Le widget de discussion affiche les langues prises en charge transmises dans un menu déroulant situé dans l'en-tête. Outre les langues disponibles, le menu inclut également une option Détecter la langue. Lorsqu'un utilisateur sélectionne une langue dans ce menu, la conversation en cours est réinitialisée et une nouvelle conversation est démarrée avec la langue sélectionnée. La langue sélectionnée par l'utilisateur est conservée d'une session à l'autre dans le même navigateur. La langue précédente de l'utilisateur est donc automatiquement sélectionnée lorsque l'utilisateur revient sur la brique via la page contenant le widget de discussion.

Vous pouvez ajouter un processus d'écoute d'événement pour l'événement onChatLanguageChange, qui est déclenché lorsqu'une langue de discussion a été sélectionnée dans le menu déroulant ou a été modifiée.

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 l'attribut primaryLanguage, le widget détecte automatiquement la langue dans le profil utilisateur et sélectionne l'option Détecter la langue dans le menu.
  • La clé label est facultative pour les langues prises en charge de façon native : fr affiche Français dans le menu, es affiche Espagnol, etc.
  • Bien que label soit facultatif, si vous avez ajouté une langue qui ne fait pas partie des langues prises en charge de façon native, vous devez ajouter un libellé pour identifier la balise. Par exemple, si vous ne définissez pas label: 'हिंदी', pour lang: "hi", le menu déroulant affiche hi, ce qui ne constitue pas une expérience utilisateur optimale.

Désactiver le menu de langue

A partir de la version 21.12, vous pouvez également configurer et mettre à jour la langue de discussion sans avoir à configurer le menu déroulant de sélection de la langue en transmettant MultiLangChat(primaryLanguage: String).

Détection de la langue

Outre les langues transmises, le widget de discussion affiche l'option Détecter la langue dans le menu déroulant. 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.

Vous pouvez mettre à jour dynamiquement la langue sélectionnée en appelant l'API BotsManager.shared().setPrimaryLanguage(primaryLanguage: String). 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 BotsManager.shared().setPrimaryLanguage(primaryLanguage: "und"), où "und" indique une valeur indéterminée ou en transmettant primaryLanguage:nil.

Vous pouvez mettre à jour le langage de discussion de façon dynamique à l'aide de l'API setPrimaryLanguage(primaryLanguage: String) 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 le menu déroulant de sélection de la langue pour les utilisateurs finaux. Transmettez MultiLangChat(supportedLanguages: [SupportedLanguage]).
Définissez la langue de la discussion sans afficher le menu déroulant de sélection de la langue pour les utilisateurs finaux. Transmettez MultiLangChat(primaryLanguage: String).
Définissez une langue par défaut. Transmettez MultiLangChat(supportedLanguages: [SupportedLanguage], primaryLanguage: String).
Activer la détection de la langue. Transmettez primaryLanguage:nil ou primaryLanguage:"und".
Mettez à jour dynamiquement le langage de discussion. Appelez l'API setPrimaryLanguage(primaryLanguage: String).

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.

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
Le paramètre sharePopupConfiguration permet de limiter les éléments affichés dans le menu de partage. En transmettant un tuple de tableaux à ShareMenuConfiguration -- shareMenuConfiguration = ([ShareMenuItem], [ShareMenuCustomItem]) -- 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. Le tuple comporte un tableau d'options de menu de partage de type ShareMenuItem et un tableau d'options de menu de partage de type ShareMenuCustomItem. Transmettez les deux en tant que tableau vide pour tous les types de fichier.

public func shareMenuItems(shareMenuItems : ([ShareMenuItem], [ShareMenuCustomItem]))

Vous pouvez activer la mise à jour dynamique du menu à l'aide de la méthode suivante :
shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem]))
méthode.

public func shareMenuItems() -> ([ShareMenuItem], [ShareMenuCustomItem])

Cette méthode renvoie la configuration existante des options de menu de partage.

Reconnaissance vocale

  • Indicateur de fonctionnalité : enableSpeechRecognition
  • Configuration des fonctionnalités : enableAutoSendSpeechResponse

La définition de l'indicateur de fonctionnalité enableSpeechRecognition sur true permet d'afficher le bouton de microphone à la place du bouton d'envoi lorsque le champ d'entrée utilisateur est vide. Le message vocal est converti en texte, et envoyé à la brique ou à l'assistant numérique. Si le message vocal est partiellement reconnu, le résultat partiel s'affiche dans une fenêtre instantanée ouverte en cliquant sur le bouton de microphone.

Lorsque cette propriété a pour valeur true, elle prend également en charge la fonctionnalité activée par la propriété enableAutoSendSpeechResponse 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.

La reconnaissance vocale est utilisée à l'aide des méthodes suivantes :

public func startRecording()

Démarre l'enregistrement du message vocal de l'utilisateur.

public func stopRecording()

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

public func isRecording() -> Bool

Vérifie si l'enregistrement audio a démarré. Renvoie true si l'enregistrement a démarré. Renvoie false dans le cas contraire.

La fonction onSpeechResponseReceived(data: String, final: Bool) du protocole BotsEventListener peut être utilisée pour gérer toutes les réponses du serveur vocal.
BotsManager.shared().startRecording()
if (BotsManager.shared().isRecording()) {
    BotsManager.shared().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 .
  • 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. 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 func speak(text : String)

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.
BotsManager.shared().speak(text: "What kind of crust do you want?")

public func stopSpeech()

Arrête la lecture de la réponse de la brique.
BotsManager.shared().stopSpeech()

Injection de service vocal

Indicateur de fonctionnalité : ttsService

L'indicateur de fonctionnalité ttsService 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 TTSService à l'indicateur ttsService.

Protocole TTSService

Vous créez une instance d'une classe qui est une implémentation de l'interface TTSService. Il implémente les méthodes suivantes :
  • speak(text: String) : cette méthode ajoute le texte qui doit être parlé à la file d'attente de variations. Son paramètre text est le texte à prononcer.
  • isSpeaking() : cette méthode vérifie si la réponse audio est parlée ou non. Il renvoie false si aucune réponse audio n'est prononcée.
  • stopSpeech() - Cette méthode arrête toute synthèse vocale en cours.
   class CustomTTSService: TTSService {

        func speak(text: String) {
            // Adds text to the utterance queue to be spoken
        }
        
        func stopSpeech() {
            // Stops any ongoing speech synthesis
        }
        
        func isSpeaking() -> Bool {
            // Checks whether the bot audio response is being spoken or not.
        }
    }

Indicateur de saisie pour les conversations utilisateur-agent

Indicateur de fonctionnalité : enableSendTypingStatus

Lorsque cet indicateur est activé, le kit SDK envoie un événement de saisie RESPONDING avec le texte en cours de saisie par l'utilisateur à Oracle B2C Service ou Oracle Fusion Service. 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 au 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 func sendUserTypingStatus(status: TypingStatus, text: String? = nil)
  • Pour afficher l'indicateur de saisie sur la console de l'agent :
    BotsManager.shared().sendUserTypingStatus(status: .RESPONDING, text: textToSend)
  • Pour masquer l'indicateur de saisie sur la console de l'agent :
    BotsManager.shared().sendUserTypingStatus(status: .LISTENING)
  • Pour contrôler l'indicateur de saisie côté utilisateur, utilisez l'événement onReceiveMessage(). Par exemple :
        public func onReceiveMessage(message: BotsMessage) {
            if message is AgentStatusMessage {
                if let status = message.payload["status"] as? String {
                    switch status {
                    case TypingStatus.LISTENING.rawValue:
                        hideTypingIndicator()
                    case TypingStatus.RESPONDING.rawValue:
                        showTypingIndicator()
                    }
                }
            }
        }
Deux autres paramètres dans BotsConfiguration fournissent un contrôle supplémentaire :
  • typingStatusInterval : par défaut, le kit SDK envoie l'événement de saisie RESPONDING toutes les trois secondes à Oracle B2C Service. Utilisez cet indicateur pour limiter cet é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 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 à 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.

Visualiseur vocal

Lorsque la prise en charge vocale est activée (botsConfiguration.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 d'AVAudioEngine de Swift, qui est présenté dans la méthode onAudioReceived du protocole SpeechEventListener pour une utilisation 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 botsConfiguration.enableSpeechAutoSendSpeechResponse = 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 botsConfiguration.enableSpeechAutoSendSpeechResponse = 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.