Features
Im Folgenden finden Sie die Features, die Sie im Oracle-iOS-SDK konfigurieren können.
Absolute und relative Zeitstempel
- Feature-Flag:
enableTimestamp
- Feature-Flag:
timestampMode
Sie können absolute oder relative Zeitstempel für Chatnachrichten aktivieren. Absolute Zeitstempel zeigen die genaue Zeit für jede Nachricht an. Relative Zeitstempel werden nur in der letzten Nachricht angezeigt und geben die Zeit in Bezug auf die Sekunden, Tage, Stunden, Monate oder Jahre seit der vorherigen Nachricht an. Aufgrund der durch absolute Zeitstempel gebotenen Genauigkeit sind diese ideal für Archivierungsaufgaben. Im begrenzten Kontext einer Chatsession beeinträchtigt diese Genauigkeit aber die Benutzererfahrung, da Benutzer Zeitstempel vergleichen müssen, um die Zeitspanne zwischen Nachrichten zu ermitteln. Mit relativen Zeitstempeln können Benutzer die Unterhaltung einfach durch leicht verständliche Begriffe wie Jetzt gerade und Vor wenigen Minuten verfolgen. Relative Zeitstempel verbessern die Benutzererfahrung auch auf andere Weise und vereinfachen gleichzeitig die Entwicklungsaufgaben: Da relative Zeitstempel die Nachrichten in Sekunden, Tagen, Stunden, Monaten oder Jahren kennzeichnen, müssen Sie sie nicht für andere Zeitzonen konvertieren.
Relative Zeitstempel konfigurieren
Um einen relativen Zeitstempel hinzuzufügen, muss enableTimestamp
aktiviert sein (true
) und die Einstellung timestampMode
, die den Zeitstempelstil steuert, muss timestampMode.relative
lauten. Wenn Sie timestampMode.relative
festlegen, wird vor der ersten Nachricht des Tages ein absoluter Zeitstempel als Header angezeigt. Dieser Header wird angezeigt, wenn die Unterhaltung nicht gelöscht wurde und ältere Nachrichten noch in der Historie verfügbar sind.
- In den ersten 10 Sekunden
- Zwischen 10 und 60 Sekunden
- Jede Minute zwischen 1 und 60 Minuten
- Jede Stunde zwischen 1 und 24 Stunden
- Jeden Tag zwischen 1 und 30 Tagen
- Jeden Monat zwischen 1 und 12 Monaten
- Jedes Jahr nach dem ersten Jahr
Aktionslayout
Verwenden Sie die Konfigurationseinstellungen BotsProperties.actionsLayout
, um die Aktionsschaltflächen in horizontalen oder vertikalen Layouts anzuzeigen. Das Layout kann für lokale Aktionen, globale Aktionen, Kartenaktionen und Formularaktionen festgelegt werden. Der Standardwert für alle Aktionstypen ist horizontal
.
BotsProperties.actionsLayout = ActionsLayout(local: .horizontal,global: .vertical,card: .horizontal,form: .horizontal)
Agent-Avatare
Für Skills, in denen Live-Agent-Unterstützung integriert ist, ermöglicht die Einstellung agentAvatar
die Anzeige eines Avatarsymbols für die von den Agents gesendeten Nachrichten. Sie konfigurieren dies mit der URL des Symbols, das neben den Agent-Nachrichten angezeigt wird.
Avatare und Agent-Details dynamisch aktualisieren
Sie können die dynamische Aktualisierung der Benutzer- und Agent-Avatare zur Laufzeit mit den setUserAvatar(avatarAsset : String)
, getAgentDetails()
und setUserAvatar(avatarAsset : String)
aktivieren.
Benutzeravatar festlegen
setPersonAvatar(avatarAsset : String)
aktiviert die dynamische Aktualisierung des Benutzeravatars zur Laufzeit. Diese Methode legt den Benutzeravatar für alle Nachrichten fest, einschließlich vorheriger Nachrichten. Folgende avatarAsset
kann verwendet werden:
- Der Name des Assets aus dem Projektordner
Assets
. - Ein externer Link zur Bildquelle, wie im folgenden Beispiel dargestellt.
BotsUIManager.shared().setPersonAvatar(avatarAsset: "https://picsum.photos/200/300")
BotsUIManager.shared().setPersonAvatar(avatarAsset: "userAvatarInAssetsFolder")
Agent-Details festlegen
Sie können die Agent-Details mit der API setAgentDetails(agentDetails: AgentDetails)
anpassen. Neben dem Agent-Namen können Sie mit dieser API auch die Textfarbe und den Avatar anpassen. Wenn kein Agent-Avatar konfiguriert wurde, kann der Avatar dynamisch mit den Agent-Nameninitialen konfiguriert werden. Sie können auch die Farbe dieser Initialen und Hintergrundfarbe anpassen. Die API getAgentDetails()
ruft die aktuellen Agent-Details ab.
Obwohl diese APIs jederzeit aufgerufen werden können, wird empfohlen, sie mit den Ereignissen onReceiveMessage()
oder beforeDisplay()
zu verwenden.
setAgentDetails(agentDetails: AgentDetails)
Alle Parameter des Objekts
AgentDetails
sind optional.
// 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
-Objekts geändert werden. Beispiel:let agentDetails = AgentDetails()
agentDetails.name = "Bob"
agentDetails.avatarImage = "agentAvatar"
agentDetails.nameTextColor = .red
agentDetails.avatarBackgroundColor = .green
agentDetails.avatarTextColor = .brown
BotsUIManager.shared().setAgentDetails(agentDetails: agentDetails)
Anhangfilterung
Feature-Flag: shareMenuConfiguration
shareMenuConfiguration
, um die im Popup-Menü "Teilen" verfügbaren Objekttypen einzuschränken oder zu filtern, den Grenzwert für die Dateigröße in KB für Uploads festzulegen (z.B. 1024 im folgenden Snippet) und die Symbole und Labels des Menüs anzupassen. Der Standardwert und der maximale Grenzwert sind 25 MB.
Bevor Sie
shareMenuConfiguration
konfigurieren können, müssen Sie enableAttachment
auf true
setzen.
botsConfiguration.shareMenuConfiguration = ([ShareMenuItem.files, ShareMenuItem.camera, ShareMenuItem.location], [ShareMenuCustomItem(types: [String(kUTTypePDF)], label: "PDF Files", maxSize: 1024), ShareMenuCustomItem(types: [String(kUTTypeText)], label: "Text Files")])
Für types
müssen Sie den CFString als entsprechenden Dateityp verwenden und in String
konvertieren. Eine andere Zeichenfolge ist nicht gültig. Sie können Benutzern das Hochladen aller Dateitypen ermöglichen, indem Sie types
auf String(kUTTypeItem)
setzen.
öffentliche Funktion shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem]))
BotsManager.shared().shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem]))
aufrufen.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")])
Feld automatisch weiterleiten
Wenn für ein Feld die Eigenschaft autoSubmit
auf true
gesetzt ist, sendet der Client eine FormSubmissionMessagePayload
mit der Zuordnung submittedField
, die entweder die gültigen Feldwerte enthält, die bisher eingegeben wurden. Felder, die noch nicht festgelegt sind (unabhängig davon, ob sie erforderlich sind) oder Felder, die eine clientseitige Validierung verletzen, werden nicht in die submittedField
-Map aufgenommen. Wenn das automatisch weitergeleitete Feld selbst einen ungültigen Wert enthält, wird die Weiterleitungsnachricht nicht gesendet, und die Clientfehlermeldung wird für dieses Feld angezeigt. Wenn eine automatische Weiterleitung erfolgreich ist, wird die partialSubmitField
in der Formularweiterleitungsnachricht auf id
des Feldes autoSubmit
gesetzt.
Methoden zum Verbinden, Trennen und Zerstören
Der Skill kann mit den Methoden public func destroy()
, public func disconnect()
und public func connect()
verbunden oder getrennt werden, oder das SDK kann zerstört werden.
public func destroy()
Zerstört das SDK, indem aktive Verbindungen, Spracherkennung, Sprachsynthese, Dateiuploads geschlossen und der SDK-Ansichtscontroller entfernt wird. Nach dem Aufruf kann keine der öffentlichen API-Methoden aufgerufen werden. Sie sind erst wieder aktiv, nachdem die Methode initialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
erneut aufgerufen wurde, um das SDK zu initialisieren.
public func disconnect()
BotsManager.shared().disconnect()
public func connect()
BotsManager.shared().connect()
öffentliche Funkverbindung (botsConfiguration: BotsConfiguration)
BotsConfiguration
aufgerufen wird, wird die vorhandene Web-Socket-Verbindung geschlossen, und mit den neuen Kanaleigenschaften wird eine neue Verbindung hergestellt. Andere Eigenschaften, die in BotsConfiguration
festgelegt sind, bleiben unverändert.var botsConfiguration = BotsConfiguration(url: url, userId: userId, channelId: channelId)
BotsManager.shared().connect(botsConfiguration: botsConfiguration)
Standard-Clientantworten
Feature-Flag: enableDefaultClientResponse
Verwenden Sie enableDefaultClientResponse: true
, um standardmäßige clientseitige Antworten mit einem Typisierungsindikator anzugeben, wenn die Skillantwort verzögert wurde oder wenn keine Skillantwort vorhanden ist. Wenn der Benutzer die erste Nachricht/Abfrage sendet, der Skill jedoch nicht mit der von defaultGreetingTimeout
festgelegten Anzahl von Sekunden antwortet, kann der Skill eine Begrüßungsnachricht anzeigen, die mit dem Übersetzungsstring odais_default_greeting_message
konfiguriert ist. Als Nächstes sucht der Client erneut nach der Antwort des Skills. Der Client zeigt die Antwort des Skills an, wenn sie empfangen wurde. Andernfalls zeigt der Client in durch das Flag defaultWaitMessageInterval
festgelegten Intervallen eine Wartemeldung (konfiguriert mit dem odais_default_wait_message
-Übersetzungsstring) an. Wenn die Wartezeit auf die Skillantwort den durch das Flag typingStatusTimeout
festgelegten Schwellenwert überschreitet, zeigt der Client eine bedauernde Antwort an den Benutzer an und stoppt den Eingabeindikator. Sie können die Entschuldigungsantwort mit dem Übersetzungsstring odais_default_sorry_message
konfigurieren.
Delegation
BotsMessageServiceDelegate
-Protokoll entsprechen und die folgenden Methoden implementieren:
public Funk beforeDisplay(message: [String: Any]?) -> [String: Any]?
Mit dieser Methode kann die Nachrichten-Payload eines Skills geändert werden, bevor sie in der Unterhaltung angezeigt wird. Die von der Methode zurückgegebene Nachrichten-Payload wird zum Anzeigen der Nachricht verwendet. Wenn die Methode nil
zurückgibt, wird die Nachricht nicht angezeigt.
public Funk beforeSend(message: [String: Any]?) -> [String: Any]?
Mit dieser Methode kann die Payload einer Benutzernachricht geändert werden, bevor sie an den Chatserver gesendet wird. Die von der Methode zurückgegebene Nachrichten-Payload wird an den Skill gesendet. Wenn die Methode nil
zurückgibt, wird die Nachricht nicht gesendet.
public func beforeSendPostback(action: [Zeichenfolge: Any]?) -> [Zeichenfolge: Any]?
public func beforeSendPostback(action: [String: Any]?) -> [String: Any]?
kann die Payload einer Postback-Aktion geändert werden, bevor sie an den Chatserver gesendet wird. Die von der Methode zurückgegebene Aktions-Payload wird an den Skill gesendet. Wenn die Methode nil
zurückgibt, wird die vom Benutzer ausgewählte Postback-Aktion nicht an den Chatserver gesendet.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
-Protokoll entspricht, muss der Eigenschaft BotsManager.shared().delegate
zugewiesen werden, wie im folgenden Code-Snippet zur Initialisierung des SDK dargestellt:BotsManager.shared().delegate = self
Chat-Session beenden
Feature-Flag: enableEndConversation
Wenn enableEndConversation
auf true
gesetzt ist, wird der Headeransicht eine Schaltfläche "Schließen" hinzugefügt, mit der Benutzer die aktuelle Chatsession explizit beenden können. Ein Bestätigungsdialogfeld wird geöffnet, wenn Benutzer auf diese Schaltfläche "Schließen" klicken und wenn sie die Schließungsaktion bestätigen, sendet das SDK eine Ereignisnachricht an den Skill, der das Ende der Chatsession markiert. Das SDK trennt dann den Skill von der Instanz, minimiert das Chatwidget und löscht die Unterhaltungshistorie des aktuellen Benutzers. Das SDK löst auch ein chatend
-Ereignis im BotsEventListener
-Protokoll aus, das Sie implementieren können.
Tipp:
Die Unterhaltung kann auch durch Aufrufen der MethodeBotsManager.shared().endChat()
beendet werden. Diese Methode können Sie verwenden, wenn das SDK im headless-Modus initialisiert wird.
Headless-SDK
Das SDK kann ohne die zugehörige UI verwendet werden. Das SDK verwaltet die Verbindung zum Server und stellt APIs für das Senden von Nachrichten, das Empfangen von Nachrichten und das Abrufen von Aktualisierungen für den Netzwerkstatus und für andere Services bereit. Mit den APIs können Sie mit dem SDK interagieren und die UI aktualisieren.
Sie können eine Nachricht mit den in der Klasse BotsManager
verfügbaren send()
-APIs senden. Beispiel: public func send(message: UserMessage)
sendet eine Textnachricht an einen Skill oder digitalen Assistenten.
öffentliches Funkfernsehen (Nachricht: UserMessage)
Diese Funktion sendet eine Nachricht an den Skill. Der enthaltene Parameter message
ist eine Instanz einer Klasse, die der Klasse UserMessage
entspricht. In diesem Fall ist dies UserTextMessage
.BotsManager.shared().send(message: UserTextMessage(text: "I want to order a pizza", type: .text))
BotsEventListener
BotsEventListener
-Protokoll implementieren, das dann die folgenden Methoden implementiert:
onStatusChange(ConnectionStatus connectionStatus)
: Diese Methode wird aufgerufen, wenn sich der Status der WebSocket-Verbindung ändert. Der ParameterconnectionStatus
ist der aktuelle Status der Verbindung. Weitere Einzelheiten zum EnumConnectionStatus
finden Sie in der API-Dokumentation, die im SDK enthalten ist.onReceiveMessage(message: BotsMessage)
: Diese Methode wird aufgerufen, wenn eine neue Nachricht vom Skill empfangen wird. Der Parametermessage
ist die vom Skill empfangene Nachricht. Weitere Einzelheiten zur KlasseBotsMessage
finden Sie in der API-Dokumentation, die im SDK enthalten ist.onUploadAttachment(message: BotsAttachmentMessage)
: Diese Methode wird aufgerufen, wenn ein Anhangsupload abgeschlossen ist. Der Parametermessage
ist dasBotsAttachmentMessage
-Objekt für den hochgeladenen Anhang.onDestroy()
: Diese Methode wird aufgerufen, wenn die Methodedestroy()
aufgerufen wird.onInitialize()
: Diese Methode wird aufgerufen, wenn die Methodeinitialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
aufgerufen wird. Es wird der folgende Parameter verwendet:newLanguage
: Das ObjektSupportedLanguage
für die neu festgelegte Chatsprache.
beforeEndConversation()
: Diese Methode wird aufgerufen, wenn die Session zum Beenden der Unterhaltung initiiert wird.chatEnd()
: Eine Callback-Methode, die ausgelöst wird, nachdem die Unterhaltung erfolgreich beendet wurde.
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.
}
}
Die Instanz, die dem BotsEventListener
-Protokoll entspricht, muss der BotsManager.shared().botsEventListener
-Eigenschaft zugewiesen werden, wie im folgenden Code-Snippet zur Initialisierung des SDK dargestellt:BotsManager.shared().botsEventListener = self
Webansicht im Widget
UI-Eigenschaft: LinkHandler
Sie können das Linkverhalten in Chatnachrichten konfigurieren, damit Benutzer über das Chatwidget auf Webseiten zugreifen können. Anstatt die Unterhaltung zu verlassen, um eine Seite auf einer Registerkarte oder in einem separaten Browserfenster anzuzeigen, kann ein Benutzer im Chat verbleiben, da das Chatwidget den Link in einer Webansicht öffnet.
Webansicht im Widget konfigurieren
UI-Eigenschaft: WebViewConfig
LinkHandler
auf LinkHandlerType.webview
setzen. WebViewConfig
kann auf eine WebViewConfiguration
-Strukturinstanz gesetzt werden.
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
Wie in diesem Code-Snippet dargestellt, können Sie die folgenden Attribute für die Webansicht festlegen.Attribut | Einstellungen |
---|---|
webViewSize |
Legt die Bildschirmgröße des Webansichtsfensters im Widget mit dem Attribut WebviewSize fest, das zwei Werte aufweist: partial (WebviewSize.partial ) und full (WebviewSizeWindow.full ).
|
clearButtonLabel |
Legt den Text für die Schaltfläche "Löschen"/"Schließen" in der oberen rechten Ecke der Webansicht fest. Der Standardtext wird aus der Zeichenfolge übernommen, die in der Datei Localizable.strings auf odais_done gesetzt ist.
|
clearButtonIcon |
Legt ein Symbol für die Schaltfläche "Löschen" fest, das auf der Schaltfläche linksbündig angezeigt wird. Standardmäßig ist für die Schaltfläche "Löschen" kein Symbol festgelegt. Es ist eine leere Zeichenfolge. |
clearButtonLabelColor |
Legt die Farbe des Textes der Schaltfläche "Löschen" fest. Die Standardfarbe ist UIColor.white .
|
clearButtonColor |
Legt die Hintergrundfarbe für die Schaltfläche "Löschen" fest. Die Standardfarbe ist UIColor.clear .
|
webviewHeaderColor |
Legt die Hintergrundfarbe für den Webansichtsheader fest. |
webviewTitleColor |
Legt die Farbe des Titels im Header fest. Der Titel ist die URL des geöffneten Weblinks. |
Formatierung des Nachrichtenzeitstempels
Das Flag timestampFormat
formatiert Zeitstempel, die in den Nachrichten angezeigt werden. Es kann eine Zeichenfolge akzeptieren, die aus Formattoken wie "hh:mm:ss"
und anderen Formaten besteht, die von der Swift-Datumsformatierung DateFormatter unterstützt werden.
Mehrsprachiger Chat
Feature-Flag: multiLangChat
Mit der nativen Sprache des iOS-SDK kann das Chatwidget die Sprache eines Benutzers erkennen oder zulassen, dass Benutzer die Unterhaltungssprache auswählen. Benutzer können zwischen Sprachen wechseln, aber nur zwischen Unterhaltungen und nicht während einer Unterhaltung, da die Unterhaltung zurückgesetzt wird, wenn ein Benutzer eine neue Sprache wählt.
Sprachmenü aktivieren
multiLangChat
mit einem Objekt definieren, das das Array supportedLanguages
enthält, das aus Sprachtags (lang
) und optionalen Anzeigelabels (label
) besteht. Außerhalb dieses Arrays können Sie optional die Standardsprache mit der Variablen primaryLanguage
festlegen (MultiLangChat(primaryLanguage: String)
im folgenden Snippet). 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"
)
Um Sprach- und Regionscodes in lokalisierbaren .lproj-(Lokalisierungsprojekt-)Dateien ordnungsgemäß zu formatieren, verwenden Sie einen Bindestrich (
-
) als Trennzeichen und keinen Unterstrich (_
). Beispiel: Verwenden Sie fr-CA
, nicht fr_CA
. Dies entspricht der Art und Weise, wie die .lproj
-Dateien in der App erstellt werden. Wenn das SDK nach einer .lproj
-Datei sucht, versucht es zuerst, eine Datei mit dem exakten languageCode-Region.lproj
-Format zu suchen. Wenn eine solche Datei nicht gefunden wird, sucht das SDK nach einer languageCode.lproj
-Datei. Wenn dies ebenfalls nicht gefunden wird, sucht das SDK nach einer base.lproj
-Datei. Wenn keine dieser Angaben gefunden werden kann, verwendet das SDK standardmäßig Englisch (en
).
Das Chatwidget zeigt die übergebenen unterstützten Sprachen in einem Dropdown-Menü im Header an. Neben den verfügbaren Sprachen enthält das Menü auch die Option Sprache ermitteln. Wenn ein Benutzer eine Sprache in diesem Menü auswählt, wird die aktuelle Unterhaltung zurückgesetzt, und eine neue Unterhaltung mit der ausgewählten Sprache wird gestartet. Die vom Benutzer ausgewählte Sprache wird in allen Sessions desselben Browsers beibehalten. So wird die vorherige Sprache des Benutzers automatisch ausgewählt, wenn der Benutzer den Skill über die Seite mit dem Chatwidget erneut öffnet.
Sie können einen Ereignis-Listener für das Ereignis onChatLanguageChange
hinzufügen, der ausgelöst wird, wenn eine Chatsprache aus dem Dropdown-Menü ausgewählt oder geändert wurde.
- Sie müssen mindestens zwei Sprachen definieren, damit das Dropdown-Menü angezeigt werden kann.
- Wenn Sie das Attribut
primaryLanguage
nicht angeben, erkennt das Widget automatisch die Sprache im Benutzerprofil und wählt die Option Sprache erkennen im Menü aus. - Der Schlüssel
label
ist für die nativ unterstützten Sprachen optional:fr
wird im Menü als Französisch angezeigt,es
als Spanisch usw. - Wenn
label
optional ist und Sie eine Sprache hinzugefügt haben, die nicht nativ unterstützt wird, fügen Sie ein Label zur Identifizierung des Tags hinzu. Beispiel: Wenn Sie nichtlabel: 'हिंदी'
fürlang: "hi"
definieren, wird im Dropdown-Menü stattdessen hi angezeigt, was zu einer suboptimalen Benutzererfahrung führt.
Sprachmenü deaktivieren
Ab Version 21.12 können Sie die Chatsprache auch konfigurieren und aktualisieren, ohne das Dropdown-Menü für die Sprachauswahl durch Übergabe von MultiLangChat(primaryLanguage: String)
konfigurieren zu müssen.
Spracherkennung
Neben den übergebenen Sprachen zeigt das Chatwidget im Dropdown-Menü auch die Option Sprache erkennen an. Bei Auswahl dieser Option erkennt der Skill die Unterhaltungssprache automatisch anhand der Nachricht des Benutzers und antwortet nach Möglichkeit in derselben Sprache.
Sie können die ausgewählte Sprache dynamisch aktualisieren, indem Sie die API BotsManager.shared().setPrimaryLanguage(primaryLanguage: String)
aufrufen. Wenn der übergebene lang
-Befehl mit einer der unterstützten Sprachen übereinstimmt, wird diese Sprache ausgewählt. Wenn keine Übereinstimmung gefunden werden kann, wird Sprache erkennen aktiviert. Sie können auch die Option Erkannte Sprache aktivieren, indem Sie die BotsManager.shared().setPrimaryLanguage(primaryLanguage: "und")
-API aufrufen, wobei "und"
"unbestimmt" angibt, oder indem Sie primaryLanguage:nil
übergeben.
Sie können die Chatsprache auch dann dynamisch mit der API setPrimaryLanguage(primaryLanguage: String)
aktualisieren, wenn das Dropdown-Menü nicht konfiguriert wurde.
Kurzreferenz für mehrsprachigen Chat
Gehen Sie folgendermaßen vor... | ... Vorgehensweise |
---|---|
Zeigen Sie den Endbenutzern das Dropdown-Menü "Sprachauswahl" an. | Übergeben Sie MultiLangChat(supportedLanguages: [SupportedLanguage]) .
|
Legen Sie die Chatsprache fest, ohne den Endbenutzern das Dropdown-Menü für die Sprachauswahl anzuzeigen. | Übergeben Sie MultiLangChat(primaryLanguage: String) .
|
Standardsprache festlegen | Übergeben Sie MultiLangChat(supportedLanguages: [SupportedLanguage], primaryLanguage: String) .
|
Spracherkennung aktivieren. | Übergeben Sie primaryLanguage:nil oder primaryLanguage:"und" .
|
Chat-Sprache dynamisch aktualisieren. | Rufen Sie die API setPrimaryLanguage(primaryLanguage: String) auf.
|
Vorheriges Eingabeformular ersetzen
Wenn der Endbenutzer das Formular weiterleitet, weil für ein Feld autosubmit
auf true
gesetzt ist, kann der Skill eine neue EditFormMessagePayload
senden. Diese Meldung sollte die vorherige Eingabeformularnachricht ersetzen. Wenn Sie die Kanalerweiterungseigenschaft replaceMessage
auf true
setzen, aktivieren Sie das SDK, um die vorherige Eingabeformularnachricht durch die aktuelle Eingabeformularnachricht zu ersetzen.
Optionen für das Menü "Teilen"
- Visuelle Mediendateien (Bilder und Videos)
- Audio-Dateien
- Allgemeine Dateien wie Dokumente, PDFs und Kalkulationstabellen
- Speicherort
sharePopupConfiguration
können Sie die Optionen einschränken, die im Menü "Teilen" angezeigt werden. Durch Übergabe eines Tupels von Arrays an ShareMenuConfiguration
-- shareMenuConfiguration = ([ShareMenuItem], [ShareMenuCustomItem])
-- können Sie den Typ der im Menü verfügbaren Elemente einschränken oder filtern, die Symbole und Labels des Menüs anpassen und die Größe von Uploaddateien einschränken. Das Tupel enthält ein Array mit Optionen für das Menü "Teilen" des Typs ShareMenuItem
und ein Array von Optionen für das Menü "Teilen" des Typs ShareMenuCustomItem
. Übergeben Sie die Arrays leer für alle Dateitypen.
Spracherkennung
- Feature-Flag:
enableSpeechRecognition
- Funktionskonfiguration:
enableAutoSendSpeechResponse
Wenn Sie das Feature-Flag enableSpeechRecognition
auf true
setzen, kann die Schaltfläche "Mikrofon" anstelle der Sendeschaltfläche angezeigt werden, wenn das Benutzereingabefeld leer ist. Die Sprachdaten werden in Text umgewandelt und an den Skill oder digitalen Assistenten gesendet. Wenn die Sprachdaten teilweise erkannt werden, wird das Teilergebnis in einem Popup angezeigt, das durch Klicken auf die Mikrofonschaltfläche geöffnet wird.
Wenn Sie diese Eigenschaft auf true
setzen, wird auch die von der Eigenschaft enableAutoSendSpeechResponse
aktivierte Funktionalität unterstützt. Wenn diese Eigenschaft ebenfalls auf true
gesetzt wird, kann die Sprachantwort des Benutzers automatisch an den Chatserver gesendet werden, während die Antwort als gesendete Nachricht im Chatfenster angezeigt wird. Sie können es Benutzern ermöglichen, die diktierten Nachrichten zunächst zu bearbeiten (oder zu löschen), bevor sie sie manuell senden. Dazu setzen Sie enableSpeechRecognitionAutoSend
auf false
.
public func isRecording() -> Bool
Prüft, ob die Sprachaufzeichnung gestartet wurde. Gibt true
zurück, wenn die Aufzeichnung gestartet wurde. Andernfalls wird false
zurückgegeben.
onSpeechResponseReceived(data: String, final: Bool)
aus dem BotsEventListener
-Protokoll können alle Antworten vom Sprachserver verarbeitet werden.BotsManager.shared().startRecording()
if (BotsManager.shared().isRecording()) {
BotsManager.shared().stopRecording() // Stop voice recording
}
Sprachsynthese
- Feature-Flag:
enableSpeechSynthesis
- Funktionskonfiguration:
speechSynthesisVoicePreferences
- Sie aktivieren dieses Feature, indem Sie das Feature-Flag
enableSpeechSynthesis
auftrue
setzen. - Sie können mit der Eigenschaft
speechSynthesisVoicePreferences
die bevorzugte Sprache festlegen, in der die Nachrichten des Skills vorgelesen werden. Diese Eigenschaft ermöglicht einen Fallback, wenn das Gerät die bevorzugte Sprache oder Stimme nicht unterstützt. Wenn das Gerät die bevorzugte Stimme nicht unterstützt, wird stattdessen die Standardstimme für die bevorzugte Sprache verwendet. Wenn weder die bevorzugte Stimme noch die bevorzugte Sprache unterstützt wird, werden die Standardstimme und die Standardsprache verwendet.
Speech Service-Injection
Feature-Flag: ttsService
Mit dem Feature-Flag ttsService
können Sie jeden Text-to-Speech-(TTS-)Service - Ihren eigenen oder einen von einem Drittanbieter bereitgestellten - in das SDK einfügen. Um einen TTS-Service zu injizieren, müssen Sie zuerst das Feature-Flag enableSpeechSynthesis
auf true
setzen und dann eine Instanz der TTSService
-Schnittstelle an das Flag ttsService
übergeben.
Das Protokoll TTSService
TTSService
ist. Es werden die folgenden Methoden implementiert:
speak(text: String)
: Diese Methode fügt den Text hinzu, der in die Äußerungswarteschlange vorgelesen werden soll. Der Parametertext
ist der Text, der vorgelesen werden muss.isSpeaking()
: Diese Methode prüft, ob die Audioantwort vorgelesen wird. Gibtfalse
zurück, wenn keine Audioantwort gesprochen wird.stopSpeech()
: Diese Methode stoppt jede laufende Sprachsynthese.
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.
}
}
Eingabeindikator für Benutzer-Agent-Unterhaltungen
Feature-Flag: enableSendTypingStatus
Wenn dieses Flag aktiviert ist, sendet das SDK ein RESPONDING
-Eingabeereignis zusammen mit dem Text, der derzeit vom Benutzer eingegeben wird, an Oracle B2C Service oder Oracle Fusion Service. Zeigt einen Tippindikator auf der Agent-Konsole an. Wenn der Benutzer die Eingabe abgeschlossen hat, sendet das SDK ein LISTENING
-Ereignis an den Service. Dadurch wird die Eingabeanzeige in der Agent-Konsole ausgeblendet.
Wenn der Agent eingibt, empfängt das SDK ebenfalls ein RESPONDING
-Ereignis vom Service. Nach Erhalt dieses Ereignisses zeigt das SDK dem Benutzer einen Tippindikator an. Wenn der Agent im Leerlauf ist, empfängt das SDK das Ereignis LISTENING
vom Service. Nach Erhalt dieses Ereignisses blendet das SDK den Eingabeindikator aus, der dem Benutzer angezeigt wird.
sendUserTypingStatus
-API aktiviert dasselbe Verhalten für den Headless-Modus. public func sendUserTypingStatus(status: TypingStatus, text: String? = nil)
- So zeigen Sie die Eingabeanzeige auf der Agent-Konsole an:
BotsManager.shared().sendUserTypingStatus(status: .RESPONDING, text: textToSend)
- So blenden Sie die Eingabeanzeige auf der Agent-Konsole aus:
BotsManager.shared().sendUserTypingStatus(status: .LISTENING)
- Um den benutzerdefinierten Eingabeindikator zu steuern, verwenden Sie das Ereignis
onReceiveMessage()
. Beispiel: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
, die zusätzliche Kontrolle bieten:
typingStatusInterval
: Standardmäßig sendet das SDK das EingabeereignisRESPONDING
alle drei Sekunden an Oracle B2C Service. Verwenden Sie diesen Indikator, um dieses Ereignis zu drosseln. Der Mindestwert, der festgelegt werden kann, beträgt drei Sekunden.enableAgentSneakPreview
: Oracle B2C Service unterstützt die Anzeige des Benutzertextes bei der Eingabe. Wenn dieses Flag auftrue
gesetzt ist (Standard istfalse
), sendet das SDK den tatsächlichen Text. Um die Privatsphäre der Benutzer zu schützen, sendet das SDK...
anstelle des Textes an Oracle B2C Service, wenn das Flag auffalse
gesetzt ist.Hinweis
Dieses Feature muss sowohl im SDK als auch in der Oracle B2C Service-Chatkonfiguration aktiviert sein.
Sprachvisualisierung
Wenn Sprachunterstützung aktiviert ist (botsConfiguration.enableSpeechRecognition = true
), wird im Footer des Chatwidgets eine Sprachvisualisierung angezeigt. Dabei handelt es sich um ein dynamisches Visualisierungsdiagramm, das die Frequenzebene der Spracheingabe angibt. Die Visualisierung reagiert auf die Modulation der Benutzerstimme, indem sie angibt, ob der Benutzer zu leise oder zu laut spricht. Diese Visualisierung wird mit der AVAudioEngine von Swift erstellt, die in der onAudioReceived
-Methode im SpeechEventListener
-Protokoll zur Verwendung im Headless-Modus angegeben ist.
Der Sprachfunktionsmodus wird durch Anzeige des Tastatursymbols angegeben.
Wenn botsConfiguration.enableSpeechAutoSendSpeechResponse = true
angegeben ist, wird der erkannte Text automatisch an den Skill gesendet, nachdem der Benutzer die Nachricht diktiert hat. Anschließend wird der Modus auf die Texteingabe zurückgesetzt. Wenn botsConfiguration.enableSpeechAutoSendSpeechResponse = false
angegeben ist, wird der Modus ebenfalls auf die Texteingabe zurückgesetzt. In diesem Fall können Benutzer jedoch den erkannten Text ändern, bevor sie die Nachricht an den Skill senden.