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.

Questo indicatore orario viene aggiornato a intervalli regolari (secondi, minuti e così via) fino alla ricezione di un nuovo messaggio.
  • 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
Quando un nuovo messaggio viene caricato nella chat, l'indicatore orario relativo del messaggio precedente viene rimosso e sul nuovo messaggio viene visualizzato un nuovo indicatore orario che visualizza l'ora relativa al messaggio precedente. A quel punto, l'indicatore orario relativo viene aggiornato fino all'arrivo dei messaggi successivi.

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)

Per eseguire l'override dei dettagli dell'agente ricevuti dal server, utilizzare questa API come indicato di seguito.
Nota

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)
È inoltre possibile modificare ogni proprietà dell'oggetto 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)

getAgentDetails()

Restituisce un oggetto contenente i dettagli dell'agente.
let agentDetails = BotsUIManager.shared().getAgentDetails()

Filtro degli allegati

Flag funzione: shareMenuConfiguration

Utilizzare 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.
Nota

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

È possibile aggiornare dinamicamente il popup delle voci del menu di condivisione chiamando l'API BotsManager.shared().shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem])).
BotsManager.shared().shareMenuItems([ShareMenuItem.files, ShareMenuItem.camera, ShareMenuItem.location], [ShareMenuCustomItem(types: [String(kUTTypePDF)], label: "PDF Files", maxSize: 1024), ShareMenuCustomItem(types: [String(kUTTypeText)], label: "Text Files")])

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

È possibile ottenere l'elenco delle voci del menu di condivisione chiamando il
BotsManager.shared().shareMenuItems();
API.
BotsManager.shared().shareMenuItems()

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

Tutte le connessioni di rete vengono chiuse dopo aver richiamato il metodo di disconnessione.
BotsManager.shared().disconnect()

funzione pubblica connect()

La connessione al socket Web viene stabilita se lo stato dello skill è disconnesso.
BotsManager.shared().connect()

collegamento func pubblico (botsConfiguration: BotsConfiguration)

Quando questo metodo viene chiamato con un nuovo 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

La funzione di delega consente di impostare un delegato per la ricezione di callback prima di determinati eventi nella conversazione. Per impostare un delegato, una classe deve essere conforme al protocollo 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
    }
}
L'istanza, conforme al protocollo 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.

L'apertura del widget chat determina l'avvio di una nuova sessione di chat.

Suggerimento

La conversazione può anche essere terminata chiamando il metodo BotsManager.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

Per ascoltare la modifica dello stato della connessione, un messaggio ricevuto dagli eventi di stato di caricamento degli skill e degli allegati, una classe può implementare il protocollo BotsEventListener che implementa i seguenti metodi:
  • onStatusChange(ConnectionStatus connectionStatus): questo metodo viene chiamato quando lo stato della connessione WebSocket cambia. Il parametro connectionStatus è lo stato corrente della connessione. Per ulteriori dettagli sull'enum ConnectionStatus, fare riferimento ai documenti API inclusi nell'SDK.
  • onReceiveMessage(message: BotsMessage): questo metodo viene chiamato quando viene ricevuto un nuovo messaggio dalla competenza. Il parametro message è il messaggio ricevuto dalla competenza. Per ulteriori dettagli sulla classe BotsMessage, fare riferimento ai documenti API inclusi nell'SDK.
  • onUploadAttachment(message: BotsAttachmentMessage): questo metodo viene chiamato al completamento del caricamento di un allegato. Il parametro message è l'oggetto BotsAttachmentMessage per l'allegato caricato.
  • onDestroy(): questo metodo viene chiamato quando viene chiamato il metodo destroy().
  • onInitialize(): questo metodo viene chiamato quando viene chiamato il metodo initialize(botsConfiguration: BotsConfiguration, completionHandler: @escaping (ConnectionStatus, Error?) -> ()). Richiede il seguente parametro:
    • newLanguage: l'oggetto SupportedLanguage 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

È possibile impostare la configurazione della vista Web impostando la proprietà 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

È possibile abilitare un menu che consente agli utenti di selezionare una lingua preferita da un menu a discesa definendo la proprietà 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"
        )
Nota

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.

Di seguito sono riportate alcune cose da tenere a mente quando si configura il supporto multilingua:
  • È 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 definisce label: 'हिंदी', per lang: "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

Per impostazione predefinita, il menu di condivisione visualizza le opzioni per i seguenti tipi di file:
  • file multimediali visivi (immagini e video)
  • file audio
  • file generali come documenti, PDF e fogli di calcolo
  • posizione
L'impostazione 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.

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

È possibile abilitare l'aggiornamento dinamico del menu utilizzando
shareMenuItems(shareMenuItems: ([ShareMenuItem], [ShareMenuCustomItem]))
metodo.

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

Questo metodo restituisce la configurazione esistente delle voci di menu di condivisione.

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.

Il riconoscimento vocale viene utilizzato attraverso i seguenti metodi:

func pubblico startRecording()

Avvia la registrazione del messaggio vocale dell'utente.

func pubblico stopRecording()

Interrompe la registrazione del messaggio dell'utente.

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.

La funzione 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
L'SDK è stato integrato con la sintesi vocale per leggere il messaggio dell'abilità ad alta voce quando viene ricevuto un nuovo messaggio dall'abilità.
  • Per abilitare questa funzione, impostare il flag della funzione enableSpeechSynthesis su true.
  • È 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.

func speaking pubblico (testo: String)

Inizia a leggere la risposta dell'abilità ad alta voce. Il parametro text è il testo del messaggio dello skill letto ad alta voce.
BotsManager.shared().speak(text: "What kind of crust do you want?")

func pubblico stopSpeech()

Interrompe la lettura ad alta voce della risposta dell'abilità.
BotsManager.shared().stopSpeech()

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

Si crea un'istanza di una classe che è un'implementazione dell'interfaccia TTSService. Implementa i seguenti metodi:
  • speak(text: String): questo metodo aggiunge il testo da pronunciare alla coda delle espressioni. Il parametro text è il testo da pronunciare.
  • isSpeaking(): questo metodo controlla se la risposta audio viene pronunciata o meno. Restituisce false 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.

L'API 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()
                    }
                }
            }
        }
In BotsConfiguration sono disponibili altre due impostazioni che forniscono un controllo aggiuntivo:
  • typingStatusInterval: per impostazione predefinita, l'SDK invia l'evento di digitazione RESPONDING 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 su true (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 su false.
    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.

Il widget chat visualizza un visualizzatore vocale quando gli utenti fanno clic sull'icona vocale. È un indicatore che indica se il livello audio è sufficientemente alto da consentire all'SDK di acquisire la voce dell'utente. Il messaggio dell'utente, riconosciuto come testo, viene visualizzato sotto il visualizzatore.
Nota

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.