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.
- 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
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)
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 fichiers joints
Indicateur de fonction : shareMenuConfiguration
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.
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]))
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
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()
BotsManager.shared().disconnect()
func connect() public
BotsManager.shared().connect()
func connect public(botsConfiguration : BotsConfiguration)
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
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]?
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
}
}
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.
Conseil :
Vous pouvez également mettre fin à la conversation en appelant la méthodeBotsManager.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
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ètreconnectionStatus
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érationConnectionStatus
.onReceiveMessage(message: BotsMessage)
– Cette méthode est appelée lorsqu'un nouveau message est reçu de la compétence. Son paramètremessage
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 classeBotsMessage
.onUploadAttachment(message: BotsAttachmentMessage)
– Cette méthode est appelée lorsqu'un chargement de fichier joint est terminé. Son paramètremessage
est l'objetBotsAttachmentMessage
pour le fichier joint chargé.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 accepte le paramètre suivant :newLanguage
- ObjetSupportedLanguage
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
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
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"
)
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.
- 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 paslabel: 'हिंदी'
, pourlang: "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
- fichiers multimédias visuels (images et vidéos)
- fichiers audio
- fichiers généraux tels que documents, PDF et feuilles de calcul
- emplacement
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.
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
.
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.
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
- 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.
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
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ètretext
correspond au texte à parler.isSpeaking()
- Cette méthode vérifie si la réponse audio est prononcée ou non. Elle retournefalse
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.
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() } } } }
BotsConfiguration
fournissent un contrôle supplémentaire :
typingStatusInterval
- Par défaut, la trousse SDK envoie l'événement de saisieRESPONDING
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 estfalse
), 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 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.