Funzioni
Di seguito sono riportate le funzioni che è possibile configurare nell'SDK Oracle iOS.
Indicatori temporali assoluti e relativi
- Flag funzione:
enableTimestamp
- Flag funzione:
timestampMode
È possibile abilitare indicatori orari assoluti o relativi per i messaggi di chat. Gli indicatori orari assoluti visualizzano l'ora esatta per ogni messaggio. Gli indicatori orari relativi vengono visualizzati solo sul messaggio più recente ed esprimono il tempo in termini di secondi, giorni, ore, mesi o anni fa rispetto alla precisione message.The precedente offerta dagli indicatori orari assoluti. sono ideali per le attività di archiviazione, ma nel contesto limitato di una sessione di chat, questa precisione riduce l'esperienza utente perché gli utenti devono confrontare gli indicatori orari per scoprire il passaggio del tempo tra i messaggi. Gli indicatori orari relativi consentono agli utenti di tenere traccia facilmente della conversazione utilizzando termini quali Just Now e Pochi istanti fa che possono essere compresi immediatamente. Gli indicatori orari relativi migliorano l'esperienza dell'utente in un altro modo, semplificando allo stesso tempo le attività di sviluppo: poiché gli indicatori orari relativi contrassegnano i messaggi in termini di secondi, giorni, ore, mesi o anni fa, non è necessario convertirli per i fusi orari.
Configura indicatori orari relativi
Per aggiungere un indicatore orario relativo, è necessario abilitare enableTimestamp
(true
) e timestampMode
, che controlla lo stile dell'indicatore orario, deve essere timestampMode.relative
. Se si imposta timestampMode.relative
, viene visualizzato un indicatore orario assoluto prima del primo messaggio del giorno come intestazione. Questa intestazione viene visualizzata quando la conversazione non è stata cancellata e i messaggi meno recenti sono ancora disponibili nella cronologia.
- Per i primi 10 anni
- Tra 10 e 60 anni
- Ogni minuto tra 1m-60m
- Ogni ora tra 1hr-24hr
- Ogni giorno tra 1d-30d
- Ogni mese tra 1m-12m
- Ogni anno dopo il primo anno
Layout azioni
Utilizzare le impostazioni di configurazione BotsProperties.actionsLayout
per visualizzare i pulsanti di azione nei layout orizzontali o verticali. Il layout può essere impostato per azioni locali, azioni globali, azioni scheda e azioni modulo. Il valore predefinito è horizontal
per tutti i tipi di azione.
BotsProperties.actionsLayout = ActionsLayout(local: .horizontal,global: .vertical,card: .horizontal,form: .horizontal)
Avatar agente
Per le competenze integrate con il supporto degli agenti attivi, l'impostazione agentAvatar
consente di visualizzare un'icona avatar per i messaggi inviati dagli agenti. Questa configurazione viene eseguita con l'URL dell'icona visualizzato accanto ai messaggi dell'agente.
Aggiorna dinamicamente avatar e dettagli agente
È possibile abilitare gli avatar utente e agente per l'aggiornamento dinamico in runtime utilizzando setUserAvatar(avatarAsset : String)
, getAgentDetails()
e setUserAvatar(avatarAsset : String)
.
Impostazione dell'avatar utente
setPersonAvatar(avatarAsset : String)
abilita l'aggiornamento dinamico dell'avatar utente in runtime. Questo metodo imposta l'avatar utente per tutti i messaggi, inclusi i messaggi precedenti. Il file avatarAsset
può essere:
- Il nome dell'asset dalla cartella
Assets
del progetto. - Collegamento esterno all'origine dell'immagine come mostrato nell'esempio riportato di seguito.
BotsUIManager.shared().setPersonAvatar(avatarAsset: "https://picsum.photos/200/300")
BotsUIManager.shared().setPersonAvatar(avatarAsset: "userAvatarInAssetsFolder")
Impostare i dettagli dell'agente
È possibile personalizzare i dettagli dell'agente utilizzando l'API setAgentDetails(agentDetails: AgentDetails)
. Insieme al nome dell'agente, gli altri attributi che è possibile utilizzare questa API per personalizzare sono il colore del testo e l'avatar. Se non è stato configurato alcun avatar agente, l'avatar può essere configurato dinamicamente con le iniziali del nome agente. È inoltre possibile personalizzare il colore di queste iniziali e del colore di sfondo. L'interfaccia API getAgentDetails()
recupera i dettagli dell'agente corrente.
Sebbene queste API possano essere richiamate in qualsiasi momento, si consiglia di utilizzarle con gli eventi onReceiveMessage()
o beforeDisplay()
.
setAgentDetails(agentDetails: AgentDetails)
Tutti i parametri dell'oggetto
AgentDetails
sono facoltativi.
// 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
. Ad esempio:let agentDetails = AgentDetails()
agentDetails.name = "Bob"
agentDetails.avatarImage = "agentAvatar"
agentDetails.nameTextColor = .red
agentDetails.avatarBackgroundColor = .green
agentDetails.avatarTextColor = .brown
BotsUIManager.shared().setAgentDetails(agentDetails: agentDetails)
Filtro degli allegati
Flag funzione: shareMenuConfiguration
shareMenuConfiguration
per limitare o filtrare i tipi di elemento disponibili nel popup del menu di condivisione, impostare il limite delle dimensioni dei file in KB per i caricamenti (ad esempio 1024 nel seguente snippet) e personalizzare le icone e le etichette del menu. Il valore predefinito e il limite massimo sono 25 MB.
Prima di poter configurare
shareMenuConfiguration
, è necessario impostare enableAttachment
su 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")])
Per types
, è necessario utilizzare CFString per il tipo di file corrispondente e convertirlo in String
. Qualsiasi altra stringa non sarà valida. È possibile consentire agli utenti di caricare tutti i tipi di file impostando types
come String(kUTTypeItem)
.
func pubblico 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")])
Sottomissione automatica di un campo
Quando la proprietà autoSubmit
di un campo è impostata su true
, il client invia un valore FormSubmissionMessagePayload
con la mappa submittedField
contenente i valori di campo validi immessi finora. I campi non ancora impostati (indipendentemente dal fatto che siano obbligatori) o che violino una convalida lato client non sono inclusi nella mappa submittedField
. Se il campo inviato automaticamente contiene valori non validi, il messaggio di invio non viene inviato e viene visualizzato il messaggio di errore del client per quel particolare campo. Quando una sottomissione automatica riesce, partialSubmitField
nel messaggio di invio del modulo verrà impostato su id
nel campo autoSubmit
.
Metodi di connessione, disconnessione ed eliminazione
È possibile connettere o disconnettere la competenza oppure eliminare l'SDK utilizzando i metodi public func destroy()
, public func disconnect()
e public func connect()
.
funzione pubblica destroy()
Elimina l'SDK chiudendo qualsiasi connessione attiva, riconoscimento vocale, sintesi vocale, caricamenti di file e rimuovendo il controller della vista SDK. Una volta chiamato, nessuno dei metodi API pubblici può essere chiamato. Saranno nuovamente attivi solo dopo la chiamata del metodo initialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
per inizializzare l'SDK.
disconnessione func pubblico()
BotsManager.shared().disconnect()
funzione pubblica connect()
BotsManager.shared().connect()
collegamento func pubblico (botsConfiguration: BotsConfiguration)
BotsConfiguration
, la connessione socket Web esistente viene chiusa e viene stabilita una nuova connessione utilizzando le nuove proprietà del canale. Le altre proprietà impostate in BotsConfiguration
rimangono invariate.var botsConfiguration = BotsConfiguration(url: url, userId: userId, channelId: channelId)
BotsManager.shared().connect(botsConfiguration: botsConfiguration)
Risposte client predefinite
Flag funzione: enableDefaultClientResponse
Utilizzare enableDefaultClientResponse: true
per fornire risposte predefinite sul lato client accompagnate da un indicatore di digitazione quando la risposta dello skill è stata ritardata o quando non vi è alcuna risposta dello skill. Se l'utente invia il primo messaggio o la prima query, ma lo skill non risponde con il numero di secondi impostato da defaultGreetingTimeout
, lo skill può visualizzare un messaggio di saluto configurato utilizzando la stringa di traduzione odais_default_greeting_message
. Successivamente, il client verifica di nuovo la risposta dello skill. Il client visualizza la risposta dello skill se è stata ricevuta, ma in caso contrario il client visualizza un messaggio di attesa (configurato con la stringa di traduzione odais_default_wait_message
) a intervalli impostati dal flag defaultWaitMessageInterval
. Quando l'attesa della risposta dello skill supera la soglia impostata dal flag typingStatusTimeout
, il client visualizza una risposta spiacevole all'utente e interrompe l'indicatore di digitazione. È possibile configurare la risposta Sorry utilizzando la stringa di traduzione odais_default_sorry_message
.
Delega
BotsMessageServiceDelegate
e implementare i metodi riportati di seguito.
func pubblico beforeDisplay(messaggio: [Stringa: Any]?) -> [Stringa: Any]?
Questo metodo consente di modificare il payload dei messaggi di uno skill prima che venga visualizzato nella conversazione. Il payload del messaggio restituito dal metodo viene utilizzato per visualizzare il messaggio. Se viene restituito nil
, il messaggio non viene visualizzato.
func pubblico beforeSend(messaggio: [Stringa: Any]?) -> [Stringa: Any]?
Questo metodo consente di modificare il payload di un messaggio utente prima di inviarlo al server chat. Il payload del messaggio restituito dal metodo viene inviato allo skill. Se viene restituito nil
, il messaggio non viene inviato.
func pubblico beforeSendPostback(azione: [Stringa: Any]?) -> [Stringa: Any]?
public func beforeSendPostback(action: [String: Any]?) -> [String: Any]?
consente di modificare un payload dell'azione di postback prima di essere inviato al server chat. Il payload dell'azione restituito dal metodo viene inviato allo skill. Se viene restituito nil
, l'azione di postback selezionata dall'utente non viene inviata al server di chat.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
, deve essere assegnata alla proprietà BotsManager.shared().delegate
come mostrato nel seguente snippet di codice per l'inizializzazione dell'SDK:BotsManager.shared().delegate = self
Termina la sessione di chat
Flag funzione: enableEndConversation
enableEndConversation
, se impostato su true
, aggiunge un pulsante di chiusura alla vista intestazione che consente agli utenti di terminare in modo esplicito la sessione di chat corrente. Quando gli utenti fanno clic su questo pulsante Chiudi e confermano l'azione di chiusura, viene visualizzata una finestra di dialogo di richiesta di conferma. L'SDK invia un messaggio di evento allo skill che segna la fine della sessione di chat. L'SDK disconnette quindi lo skill dall'istanza, comprime il widget chat e cancella la cronologia delle conversazioni dell'utente corrente. L'SDK genera anche un evento chatend
nel protocollo BotsEventListener
che è possibile implementare.
Suggerimento
La conversazione può anche essere terminata chiamando il metodoBotsManager.shared().endChat()
, che è possibile utilizzare quando l'SDK viene inizializzato in modalità headless.
SDK headless
L'SDK può essere utilizzato senza la relativa interfaccia utente. L'SDK mantiene la connessione al server e fornisce API per inviare messaggi, ricevere messaggi e ottenere aggiornamenti per lo stato della rete e per altri servizi. È possibile utilizzare le interfacce API per interagire con l'SDK e aggiornare l'interfaccia utente.
È possibile inviare un messaggio utilizzando una qualsiasi delle API send()
disponibili nella classe BotsManager
. Ad esempio, public func send(message: UserMessage)
invia un messaggio di testo a skill o assistente digitale.
invio func pubblico (messaggio: UserMessage)
Questa funzione invia un messaggio allo skill. Il parametro message
è un'istanza di una classe conforme alla classe UserMessage
. In questo caso, è UserTextMessage
.BotsManager.shared().send(message: UserTextMessage(text: "I want to order a pizza", type: .text))
BotsEventListener
BotsEventListener
che implementa i seguenti metodi:
onStatusChange(ConnectionStatus connectionStatus)
: questo metodo viene chiamato quando lo stato della connessione WebSocket cambia. Il parametroconnectionStatus
è lo stato corrente della connessione. Per ulteriori dettagli sull'enumConnectionStatus
, fare riferimento ai documenti API inclusi nell'SDK.onReceiveMessage(message: BotsMessage)
: questo metodo viene chiamato quando viene ricevuto un nuovo messaggio dalla competenza. Il parametromessage
è il messaggio ricevuto dalla competenza. Per ulteriori dettagli sulla classeBotsMessage
, fare riferimento ai documenti API inclusi nell'SDK.onUploadAttachment(message: BotsAttachmentMessage)
: questo metodo viene chiamato al completamento del caricamento di un allegato. Il parametromessage
è l'oggettoBotsAttachmentMessage
per l'allegato caricato.onDestroy()
: questo metodo viene chiamato quando viene chiamato il metododestroy()
.onInitialize()
: questo metodo viene chiamato quando viene chiamato il metodoinitialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ())
. Richiede il seguente parametro:newLanguage
: l'oggettoSupportedLanguage
per la nuova lingua chat impostata.
beforeEndConversation()
: questo metodo viene chiamato quando viene avviata la sessione di fine conversazione.chatEnd()
: un metodo di callback attivato dopo il completamento della conversazione.
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'istanza conforme al protocollo BotsEventListener
deve essere assegnata alla proprietà BotsManager.shared().botsEventListener
, come illustrato nel seguente snippet di codice per l'inizializzazione dell'SDK:BotsManager.shared().botsEventListener = self
Webview in-Widget
Proprietà UI: LinkHandler
È possibile configurare il funzionamento dei collegamenti nei messaggi di chat per consentire agli utenti di accedere alle pagine Web dal widget di chat. Invece di dover passare dalla conversazione per visualizzare una pagina in una scheda o in una finestra separata del browser, un utente può rimanere nella chat perché il widget chat apre il collegamento all'interno di una vista Web.
Configurare la vista Web in widget
Proprietà UI: WebViewConfig
LinkHandler
su LinkHandlerType.webview
. WebViewConfig
può essere impostato su un'istanza di struttura 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
Come illustrato in questo frammento di codice, è possibile impostare i seguenti attributi per la vista Web.Attributo | Impostazioni |
---|---|
webViewSize |
Imposta la dimensione dello schermo della finestra della vista Web nel widget con l'attributo WebviewSize , che ha due valori: parial (WebviewSize.partial ) e full (WebviewSizeWindow.full ).
|
clearButtonLabel |
Imposta il testo utilizzato per il pulsante Cancella/Chiudi nell'angolo superiore destro della vista Web. Il testo predefinito viene preso dalla stringa impostata su odais_done nel file Localizable.strings .
|
clearButtonIcon |
Imposta un'icona per il pulsante di cancellazione, che viene visualizzata allineata a sinistra all'interno del pulsante. Per impostazione predefinita, non è stata impostata alcuna icona per il pulsante Cancella. È una stringa vuota. |
clearButtonLabelColor |
Imposta il colore del testo dell'etichetta del pulsante Cancella. Il colore predefinito è UIColor.white .
|
clearButtonColor |
Imposta il colore di sfondo per il pulsante Cancella. Il colore predefinito è UIColor.clear .
|
webviewHeaderColor |
Imposta il colore di sfondo per l'intestazione della vista Web. |
webviewTitleColor |
Imposta il colore del titolo nell'intestazione. Il titolo è l'URL del collegamento Web aperto. |
Formattazione indicatore orario messaggio
Il flag timestampFormat
formatta gli indicatori orari visualizzati nei messaggi. Può accettare una stringa costituita da token di formato come "hh:mm:ss"
e altri formati supportati da Swift DateFormatter.
Chat multilingue
Flag funzione: multiLangChat
La lingua nativa dell'SDK iOS consente al widget chat di rilevare la lingua di un utente o di consentire agli utenti di selezionare la lingua della conversazione. Gli utenti possono passare da una lingua all'altra, ma solo tra le conversazioni, non durante una conversazione perché la conversazione viene reimpostata ogni volta che un utente seleziona una nuova lingua.
Abilita il menu Lingua
multiLangChat
con un oggetto contenente l'array supportedLanguages
, composto da tag di lingua (lang
) ed etichette di visualizzazione facoltative (label
). Al di fuori di questo array, è possibile impostare la lingua predefinita con la variabile primaryLanguage
(MultiLangChat(primaryLanguage: String)
nel seguente 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"
)
Per formattare correttamente i codici di lingua e area nei file .lproj localizzabili (progetto di localizzazione), utilizzare un trattino (
-
) come separatore, non un carattere di sottolineatura (_
). Ad esempio, utilizzare fr-CA
, non fr_CA
. Ciò corrisponde alla modalità di creazione dei file .lproj
nell'applicazione. Quando l'SDK cerca un file .lproj
, cerca innanzitutto di individuarne uno con il formato languageCode-Region.lproj
esatto. Se non riesce a trovare un file di questo tipo, l'SDK cerca un file languageCode.lproj
. Se non viene trovato, l'SDK cerca un file base.lproj
. Quando non è possibile individuare nessuno di questi valori, l'SDK utilizza per impostazione predefinita l'inglese (en
).
Il widget chat visualizza le lingue supportate passate in un menu a discesa situato nell'intestazione. Oltre alle lingue disponibili, il menu include anche un'opzione Detect Language. Quando un utente seleziona una lingua da questo menu, la conversazione corrente viene reimpostata e viene avviata una nuova conversazione con la lingua selezionata. La lingua selezionata dall'utente persiste nelle varie sessioni dello stesso browser, pertanto la lingua precedente dell'utente viene selezionata automaticamente quando l'utente rivede la competenza nella pagina contenente il widget chat.
È possibile aggiungere un listener di eventi per l'evento onChatLanguageChange
, che viene attivato quando è stata selezionata una lingua di chat dal menu a discesa o è stata modificata.
- È necessario definire almeno due lingue per consentire la visualizzazione del menu a discesa.
- Se si omette l'attributo
primaryLanguage
, il widget rileva automaticamente la lingua nel profilo utente e seleziona l'opzione Rileva lingua nel menu. - Il tasto
label
è facoltativo per le lingue supportate in modo nativo:fr
viene visualizzato come francese nel menu,es
viene visualizzato come spagnolo e così via. - Anche se
label
è facoltativo, se è stata aggiunta una lingua che non è una delle lingue supportate in modo nativo, è necessario aggiungere un'etichetta per identificare la tag. Ad esempio, se non si definiscelabel: 'हिंदी'
, perlang: "hi"
, nel menu a discesa viene visualizzato hi, contribuendo a creare un'esperienza utente non ottimale.
Disabilita menu lingua
A partire dalla versione 21.12, è inoltre possibile configurare e aggiornare la lingua della chat senza dover configurare il menu a discesa di selezione della lingua passando MultiLangChat(primaryLanguage: String)
.
Rilevamento della lingua
Oltre alle lingue passate, il widget chat visualizza un'opzione Detect Language nel menu a discesa. La selezione di questa opzione indica alla competenza di rilevare automaticamente la lingua della conversazione dal messaggio dell'utente e, quando possibile, di rispondere nella stessa lingua.
È possibile aggiornare dinamicamente la lingua selezionata richiamando l'API BotsManager.shared().setPrimaryLanguage(primaryLanguage: String)
. Se il valore lang
passato corrisponde a una delle lingue supportate, viene selezionata tale lingua. Quando non è possibile trovare alcuna corrispondenza, viene attivata l'opzione Detect Language. È inoltre possibile attivare l'opzione Lingua rilevata richiamando l'API BotsManager.shared().setPrimaryLanguage(primaryLanguage: "und")
, dove "und"
indica un valore non determinato o passando primaryLanguage:nil
.
È possibile aggiornare la lingua della chat in modo dinamico utilizzando l'API setPrimaryLanguage(primaryLanguage: String)
anche quando il menu a discesa non è stato configurato.
Guida di riferimento rapido per la chat multilingue
Questa operazione... | ... Operazioni da eseguire |
---|---|
Visualizza il menu a discesa per la selezione della lingua agli utenti finali. | Passare MultiLangChat(supportedLanguages: [SupportedLanguage]) .
|
Impostare la lingua della chat senza visualizzare il menu a discesa di selezione della lingua per gli utenti finali. | Passare MultiLangChat(primaryLanguage: String) .
|
Impostare una lingua predefinita. | Passare MultiLangChat(supportedLanguages: [SupportedLanguage], primaryLanguage: String) .
|
Abilita rilevamento della lingua. | Passare primaryLanguage:nil o primaryLanguage:"und" .
|
Aggiorna dinamicamente la lingua della chat. | Chiama l'API setPrimaryLanguage(primaryLanguage: String) .
|
Sostituzione di un form di input precedente
Quando l'utente finale invia il modulo, poiché autosubmit
di un campo è impostato su true
, la competenza può inviare un nuovo EditFormMessagePayload
. Questo messaggio deve sostituire il precedente messaggio del modulo di input. Impostando la proprietà di estensione del canale replaceMessage
su true
, si abilita l'SDK a sostituire il messaggio del form di input precedente con il messaggio del form di input corrente.
Opzioni menu Condividi
- file multimediali visivi (immagini e video)
- file audio
- file generali come documenti, PDF e fogli di calcolo
- posizione
sharePopupConfiguration
consente di limitare le voci visualizzate nel menu di condivisione. Passando una tupla di array a ShareMenuConfiguration
-- shareMenuConfiguration = ([ShareMenuItem], [ShareMenuCustomItem])
-- è possibile limitare o filtrare il tipo di elementi disponibili nel menu, personalizzare le icone e le etichette del menu e limitare la dimensione del file di caricamento. La tupla dispone di un array di opzioni del menu di condivisione di tipo ShareMenuItem
e di un array di opzioni del menu di condivisione di tipo ShareMenuCustomItem
. Passare come array vuoto per tutti i tipi di file.
Il riconoscimento vocale
- Flag funzione:
enableSpeechRecognition
- Configurazione delle funzionalità:
enableAutoSendSpeechResponse
L'impostazione del flag della funzione enableSpeechRecognition
su true
consente di visualizzare il pulsante del microfono al posto del pulsante di invio ogni volta che il campo di input dell'utente è vuoto. Il discorso viene convertito in testo e inviato all'abilità o all'assistente digitale. Se il discorso è parzialmente riconosciuto, il risultato parziale viene visualizzato in un popup aperto facendo clic sul pulsante del microfono.
L'impostazione di questa proprietà su true
supporta anche le funzionalità abilitate dalla proprietà enableAutoSendSpeechResponse
, che, se impostata anche su true
, consente di inviare automaticamente la risposta vocale dell'utente al server di chat durante la visualizzazione della risposta come messaggio inviato nella finestra di chat. È possibile consentire agli utenti di modificare o eliminare i messaggi dettati prima di inviarli manualmente impostando enableSpeechRecognitionAutoSend
su false
.
func pubblico isRecording() -> Bool
Verifica se la registrazione vocale è stata avviata o meno. Restituisce true
se la registrazione è stata avviata. In caso contrario restituisce false
.
onSpeechResponseReceived(data: String, final: Bool)
del protocollo BotsEventListener
può essere utilizzata per gestire tutte le risposte del server di sintesi vocale.BotsManager.shared().startRecording()
if (BotsManager.shared().isRecording()) {
BotsManager.shared().stopRecording() // Stop voice recording
}
Sintesi vocale
- Flag funzione:
enableSpeechSynthesis
- Configurazione delle funzionalità:
speechSynthesisVoicePreferences
- Per abilitare questa funzione, impostare il flag della funzione
enableSpeechSynthesis
sutrue
. - È possibile impostare la lingua preferita che legge i messaggi dello skill ad alta voce con la proprietà
speechSynthesisVoicePreferences
. Questa proprietà abilita un fallback quando il dispositivo non supporta la lingua o la voce preferita. Se il dispositivo non supporta la voce preferita, viene utilizzata la voce predefinita per la lingua preferita. Quando non è supportata alcuna voce o lingua preferita, vengono utilizzate la voce e la lingua predefinite.
Iniezione servizio vocale
Flag funzione: ttsService
Il flag delle funzioni ttsService
consente di inserire nell'SDK qualsiasi servizio TTS (text-to-speech), proprio o fornito da un fornitore di terze parti. Per inserire un servizio TTS, è innanzitutto necessario impostare il flag della funzione enableSpeechSynthesis
su true
, quindi passare un'istanza dell'interfaccia TTSService
al flag ttsService
.
Il protocollo TTSService
TTSService
. Implementa i seguenti metodi:
speak(text: String)
: questo metodo aggiunge il testo da pronunciare alla coda delle espressioni. Il parametrotext
è il testo da pronunciare.isSpeaking()
: questo metodo controlla se la risposta audio viene pronunciata o meno. Restituiscefalse
se non viene pronunciata alcuna risposta audio.stopSpeech()
- Questo metodo interrompe qualsiasi sintesi vocale in corso.
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.
}
}
Indicatore digitazione per conversazioni utente-agente
Flag funzione: enableSendTypingStatus
Quando questo flag è abilitato, l'SDK invia un evento di digitazione RESPONDING
insieme al testo attualmente digitato dall'utente a Oracle B2C Service o Oracle Fusion Service. Mostra un indicatore di digitazione nella console dell'agente. Al termine della digitazione, l'SDK invia un evento LISTENING
al servizio. In questo modo l'indicatore di digitazione viene nascosto nella console dell'agente.
Analogamente, quando l'agente digita, l'SDK riceve un evento RESPONDING
dal servizio. Quando si riceve questo evento, l'SDK mostra un indicatore di digitazione all'utente. Quando l'agente è inattivo, l'SDK riceve l'evento LISTENING
dal servizio. Quando si riceve questo evento, l'SDK nasconde l'indicatore di digitazione visualizzato all'utente.
sendUserTypingStatus
abilita lo stesso funzionamento per la modalità headless. public func sendUserTypingStatus(status: TypingStatus, text: String? = nil)
- Per visualizzare l'indicatore di digitazione sulla console dell'agente:
BotsManager.shared().sendUserTypingStatus(status: .RESPONDING, text: textToSend)
- Per nascondere l'indicatore di digitazione sulla console dell'agente:
BotsManager.shared().sendUserTypingStatus(status: .LISTENING)
- Per controllare l'indicatore di digitazione lato utente, utilizzare l'evento
onReceiveMessage()
. Ad esempio: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
sono disponibili altre due impostazioni che forniscono un controllo aggiuntivo:
typingStatusInterval
: per impostazione predefinita, l'SDK invia l'evento di digitazioneRESPONDING
ogni tre secondi a Oracle B2C Service. Utilizzare questo flag per limitare l'evento. Il valore minimo che può essere impostato è di tre secondi.enableAgentSneakPreview
: Oracle B2C Service supporta la visualizzazione del testo utente durante l'immissione. Se questo flag è impostato sutrue
(l'impostazione predefinita èfalse
), l'SDK invia il testo effettivo. Per proteggere la privacy degli utenti, l'SDK invia…
anziché il testo a Oracle B2C Service quando il flag è impostato sufalse
.Nota
Questa funzione deve essere abilitata sia nel kit SDK che nella configurazione della chat di Oracle B2C Service.
Visualizzatore vocale
Quando il supporto vocale è abilitato (botsConfiguration.enableSpeechRecognition = true
), nel piè di pagina del widget chat viene visualizzato un visualizzatore vocale, un grafico del visualizzatore dinamico che indica il livello di frequenza dell'input vocale. Il visualizzatore risponde alla modulazione della voce dell'utente indicando se l'utente sta parlando troppo dolcemente o troppo forte. Questo visualizzatore viene creato utilizzando il file AVAudioEngine di Swift esposto nel metodo onAudioReceived
nel protocollo SpeechEventListener
per essere utilizzato in modalità headless.
La modalità vocale è indicata quando viene visualizzata l'icona della tastiera.
Quando si utilizza botsConfiguration.enableSpeechAutoSendSpeechResponse = true
, il testo riconosciuto viene inviato automaticamente alla competenza dopo che l'utente ha terminato di dettare il messaggio. La modalità torna quindi all'input di testo. Quando si utilizza botsConfiguration.enableSpeechAutoSendSpeechResponse = false
, la modalità torna anche all'input di testo, ma in questo caso gli utenti possono modificare il testo riconosciuto prima di inviare il messaggio allo skill.