Fonctions

Voici les fonctions que vous pouvez configurer dans la trousse SDK Oracle iOS.

Horodatages absolus et relatifs

  • Indicateur de fonction : enableTimestamp
  • Indicateur de fonction : timestampMode

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, enableTimestamp doit être activé (true) et timestampMode, qui contrôle le style d'horodatage, doit être timestampMode.relative. Lorsque timestampMode.relative est défini, un horodatage absolu s'affiche en en-tête avant le premier message du jour . 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 actions

Utilisez les paramètres de configuration BotsProperties.actionsLayout pour afficher les boutons d'action dans des dispositions horizontales ou verticales. La disposition 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 compétences intégrant la prise en charge d'agent humain, le paramètre agentAvatar permet l'affichage d'une icône d'avatar pour les messages envoyés par les agents. Vous configurez ceci avec l'URL de l'icône qui s'affiche à côté 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 au moment 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) active la mise à jour dynamique de l'avatar de l'utilisateur lors de l'exécution. Cette méthode définit l'avatar de l'utilisateur pour tous les messages, y compris les messages précédents. avatarAsset peut être :
  • Nom de la ressource dans le dossier Assets du projet.
  • 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). Avec 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 courant.

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

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

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

Filtrage des fichiers joints

Indicateur de fonction : shareMenuConfiguration

Utilisez shareMenuConfiguration 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 en Ko pour les chargements (par exemple, 1024 dans l'extrait de code suivant) et personnaliser les icônes et les étiquettes du menu. La valeur par défaut et la limite maximale sont de 25 Mo.
Note

Avant de configurer shareMenuConfiguration, vous devez régler enableAttachment à 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 permettre aux utilisateurs de charger tous les types de fichier en définissant types comme String(kUTTypeItem).

fonction publique shareMenuItems(shareMenuItems : ([ShareMenuItem], [ShareMenuCustomItem]))

Vous pouvez mettre à jour dynamiquement les éléments 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")])

fonction publique shareMenuItems() -> ([ShareMenuItem], [ShareMenuCustomItem])

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

Méthodes de connexion, de déconnexion et de destruction

La compétence peut être connectée ou déconnectée, ou la trousse SDK peut être détruite, à l'aide des méthodes public func destroy(), public func disconnect() et public func connect().

func destroy() public

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

fonction publique déconnect()

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

func connect() public

La connexion au connecteur logiciel Web est établie si la compétence était à l'état déconnecté.
BotsManager.shared().connect()

func connect public(botsConfiguration : BotsConfiguration)

Lorsque cette méthode est appelée avec une nouvelle valeur BotsConfiguration, la connexion de connecteur logiciel 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 de client par défaut

Indicateur de fonction : 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 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 defaultGreetingTimeout, la compétence peut afficher un message de salutation configuré à l'aide de la chaîne de traduction odais_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 odais_default_wait_message) à des intervalles définis par l'indicateur defaultWaitMessageInterval. Lorsque l'attente de la réponse de la compétence 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 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 être conforme au protocole BotsMessageServiceDelegate et mettre en oeuvre les méthodes suivantes :

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

Cette méthode permet la modification des données utiles d'un message de la compétence avant l'affichage de celui-ci dans la conversation. Les données utiles de message retournées par la méthode sont utilisées pour afficher le message. Si elle retourne nil, le message n'est pas affiché.

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

Cette méthode permet la modification des données utiles d'un message utilisateur avant l'envoi de celui-ci au serveur de clavardage. Les données utiles de message retournées par la méthode sont envoyées à la compétence. Si elle retourne 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 la modification des données utiles d'une action de republication avant l'envoi de celle-ci au serveur de clavardage. Les données utiles d'action retournées par la méthode sont envoyées à la compétence. Si elle retourne nil, l'action de republication sélectionnée par l'utilisateur n'est pas envoyée au serveur de clavardage.
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 est conforme au protocole BotsMessageServiceDelegate, devrait être affectée à la propriété BotsManager.shared().delegate, comme indiqué dans l'extrait de code suivant servant à initialiser la trousse SDK :
BotsManager.shared().delegate = self

Terminer la session de clavardage

Indicateur de fonction : enableEndConversation

enableEndConversation, lorsqu'il est réglé à true, ajoute un bouton de fermeture à la vue d'en-tête qui permet aux utilisateurs de mettre explicitement fin à 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 également un événement chatend dans le protocole BotsEventListener que vous pouvez mettre en oeuvre.

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

Conseil :

Vous pouvez également mettre fin à la conversation en appelant la méthode BotsManager.shared().endChat(), que vous pouvez utiliser lorsque la trousse SDK est initialisée en mode sans tête.

SDK sans interface

La trousse SDK peut être utilisée sans son interface utilisateur. 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 APIsend() disponibles dans la classe BotsManager. Par exemple, public func send(message: UserMessage) envoie un message texte à une compétence ou à un assistant numérique.

public func send(message : UserMessage)

Cette fonction envoie un message à la compétence. Son paramètre message est une instance d'une classe 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 être à l'écoute du changement de statut de connexion (message reçu des événements de statut de chargement de compétence et de fichiers joints), une classe peut mettre en oeuvre le protocole BotsEventListener qui implémente ensuite les méthodes suivantes :
  • onStatusChange(ConnectionStatus connectionStatus) : Cette méthode est appelée quand le statut de la connexion WebSocket change. Son paramètre connectionStatus indique le statut courant de la connexion. Reportez-vous à la documentation sur les API incluse dans la trousse SDK pour plus de détails sur l'énumération ConnectionStatus.
  • onReceiveMessage(message: BotsMessage) – 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 sur les API incluse dans la trousse SDK pour plus de détails sur la classe BotsMessage.
  • onUploadAttachment(message: BotsAttachmentMessage) – Cette méthode est appelée lorsqu'un chargement de fichier joint est terminé. Son paramètre message est l'objet BotsAttachmentMessage pour le fichier joint chargé.
  • 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 accepte le paramètre suivant :
    • newLanguage - Objet SupportedLanguage pour le nouveau langage de clavardage défini.
  • 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 est conforme au protocole BotsEventListener, devrait être affectée à la propriété BotsManager.shared().botsEventListener, comme illustré dans l'extrait de code suivant servant à initialiser la trousse SDK :
BotsManager.shared().botsEventListener = self

Vue Web dans le widget

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

Propriété d'interface utilisateur : WebViewConfig

Vous pouvez définir la configuration de la vue Web en réglant la propriété LinkHandler sur LinkHandlerType.webview. WebViewConfig peut être réglé 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 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'attribut WebviewSize, qui a deux valeurs : partial (WebviewSize.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 tiré de la chaîne réglée à odais_done dans le fichier Localizable.strings.
clearButtonIcon Définit une icône pour le bouton d'effacement, qui apparaît aligné à gauche à l'intérieur du bouton. Par défaut, aucune icône n'est définie pour le bouton Effacer. Il s'agit d'une chaîne vide.
clearButtonLabelColor Définit la couleur du texte de l'étiquette 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 de l'heure du message

L'indicateur timestampFormat formate les horodatages qui s'affichent dans les messages. Il peut accepter une chaîne composée de jetons de format comme "hh:mm:ss" et d'autres formats pris en charge parDateFormatter Swift.

Chat multilingue

Indicateur de fonction : multiLangChat

La langue native de la trousse SDK iOS permet au widget de clavardage de détecter la langue d'un utilisateur ou de permettre aux utilisateurs de sélectionner la langue de conversation. 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 le tableau supportedLanguages, qui est composé de balises 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 variable primaryLanguage (MultiLangChat(primaryLanguage: String) dans l'extrait 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"
        )
Note

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 s'aligne sur la façon dont les fichiers .lproj sont créés dans l'application. Lorsque la trousse SDK recherche un fichier .lproj, elle tente d'abord d'en localiser un avec le format languageCode-Region.lproj exact. S'il ne trouve pas un tel fichier, la trousse SDK recherche un fichier languageCode.lproj. Si cela est également introuvable, la trousse SDK recherche un fichier base.lproj. Lorsqu'aucun d'entre eux ne peut être localisé, la trousse SDK utilise par défaut l'anglais (en).

Le widget de clavardage affiche les langues prises en charge dans un menu déroulant situé dans l'en-tête. En plus des langues disponibles, le menu comprend également une option Détecter la langue. Lorsqu'un utilisateur sélectionne une langue dans ce menu, la conversation courante est réinitialisée et une nouvelle conversation est lancée avec la langue sélectionnée. La langue sélectionnée par l'utilisateur est conservée dans toutes les sessions du même navigateur. La langue précédente de l'utilisateur est donc automatiquement sélectionnée lorsque celui-ci revisite la compétence par la page contenant le widget de clavardage.

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

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 oettez l'attribut primaryLanguage, 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.
  • La clé label est facultative pour les langues prises en charge de manière native : fr devient French (Français) dans le menu; es, Spanish (Espagnol), etc.
  • Bien que label soit facultatif, si vous avez ajouté une langue qui n'est pas prise en charge de manière native, vous devez ajouter une étiquette pour identifier la balise. Par exemple, si vous ne définissez pas label: 'हिंदी', pour lang: "hi", le menu déroulant affiche hi à la place, ce qui contribue à une expérience utilisateur non optimale.

Désactiver menu langue

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

Détection de la langue

En plus des langues transmises, le widget de clavardage affiche une option Detect Language dans le menu déroulant. 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.

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

Vous pouvez mettre à jour le langage de clavardage de manière 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 du clavardage multilingue

Pour ce faire... ... Faire ceci
Afficher le menu déroulant de sélection de la langue aux utilisateurs finaux. Passez MultiLangChat(supportedLanguages: [SupportedLanguage]).
Définissez la langue du clavardage sans afficher le menu déroulant de sélection de la langue pour les utilisateurs finaux. Passez MultiLangChat(primaryLanguage: String).
Définissez une langue par défaut. Passez MultiLangChat(supportedLanguages: [SupportedLanguage], primaryLanguage: String).
Activer la détection de la langue. Transmettez primaryLanguage:nil ou primaryLanguage:"und".
Mettez à jour dynamiquement la langue du clavardage. Appelez l'API setPrimaryLanguage(primaryLanguage: String).

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.

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

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

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

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

Cette méthode retourne la configuration existante des éléments de menu partagé.

La reconnaissance de la parole

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

Régler l'indicateur de la fonction enableSpeechRecognition à true permet d'afficher le bouton du microphone à la place du bouton d'envoi lorsque le champ d'entrée d'utilisateur est vide. Le message vocal est converti en texte et envoyé à la compétence ou à l'assistant numérique. Si le message vocal est reconnu partiellement, le résultat partiel est affiché dans une fenêtre contextuelle qui s'ouvre d'un clic sur le bouton du microphone.

Le réglage de cette propriété à true prend également en charge la fonctionnalité activée par la propriété enableAutoSendSpeechResponse 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.

La reconnaissance de la parole est utilisée au moyen des méthodes suivantes :

fonction publique startRecording()

Lance 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 vocal a démarré ou non. Retourne true si l'enregistrement a commencé. Sinon, la valeur false est retournée.

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

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

public func stopSpeech()

Met fin à la lecture à haute voix de la réponse de la compétence.
BotsManager.shared().stopSpeech()

Injection de service vocal

Indicateur de fonction : ttsService

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

Le protocole TTSService

Vous créez une instance d'une classe qui est une mise en oeuvre de l'interface TTSService. Il implémente les méthodes suivantes :
  • speak(text: String) - Cette méthode ajoute le texte à parler à la file d'attente d'énoncés. Le paramètre text correspond au texte à parler.
  • isSpeaking() - Cette méthode vérifie si la réponse audio est prononcée ou non. Elle retourne 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 fonction : enableSendTypingStatus

Lorsque cet indicateur est activé, la trousse SDK envoie un événement de saisie RESPONDING ainsi que le texte en cours de saisie par l'utilisateur à Oracle B2C Service ou Oracle Fusion Service. 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 au 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 func sendUserTypingStatus(status: TypingStatus, text: String? = nil)
  • Pour afficher l'indicateur de frappe sur la console de l'agent :
    BotsManager.shared().sendUserTypingStatus(status: .RESPONDING, text: textToSend)
  • Pour masquer l'indicateur de frappe 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, la trousse SDK envoie l'événement de saisie RESPONDING toutes les trois secondes à Oracle B2C 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 à 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.

Visualiseur vocal

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