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.
- 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
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)
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)
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)
Filtrage des pièces jointes
Indicateur de fonctionnalité : shareMenuConfiguration
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.
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]))
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")])
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()
BotsManager.shared().disconnect()
public func connect()
BotsManager.shared().connect()
public func connect(botsConfiguration : BotsConfiguration)
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
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] ?
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
}
}
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.
Conseil :
Vous pouvez également mettre fin à la conversation en appelant la méthodeBotsManager.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
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ètreconnectionStatus
est le statut en cours de la connexion. Pour plus de détails sur l'énumérationConnectionStatus
, 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ètremessage
est le message reçu à partir de la brique. Pour plus de détails sur la classeBotsMessage
, 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ètremessage
est l'objetBotsAttachmentMessage
pour la pièce jointe téléchargée.onDestroy()
: cette méthode est appelée lorsque la méthodedestroy()
est appelée.onInitialize()
: cette méthode est appelée lorsque la méthodeinitialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
est appelée. Elle utilise le paramètre suivant :newLanguage
: objetSupportedLanguage
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
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
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"
)
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.
- 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 paslabel: 'हिंदी'
, pourlang: "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
- 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
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.
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
.
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.
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
- Pour activer cette fonctionnalité, définissez l'indicateur de fonctionnalité
enableSpeechSynthesis
surtrue
. - 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.
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
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ètretext
est le texte à prononcer.isSpeaking()
: cette méthode vérifie si la réponse audio est parlée ou non. Il renvoiefalse
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.
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() } } } }
BotsConfiguration
fournissent un contrôle supplémentaire :
typingStatusInterval
: par défaut, le kit SDK envoie l'événement de saisieRESPONDING
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 surtrue
(la valeur par défaut estfalse
), 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 surfalse
.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 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.