Sintomi del problema
iOS e Android si comportano in modo diverso quando si tratta di oggetti preliminari alla chat e VisitorInfo e ciò può creare confusione nell’unificare i comportamenti delle applicazioni.
L’oggetto VisitorInfo permette di impostare le informazioni sul visitatore prima di iniziare la chat. Al contrario, l’oggetto PreChatForm raccoglie tali informazioni all’avvio della chat.
Inizialmente, l’idea era di usare l’uno o l’altro nel workflow, ma non entrambi contemporaneamente, dato che ora è stato aggiornato su iOS.
Il workflow con l’autenticazione JWT modifica anche il comportamento di Chat. Per ulteriori informazioni, fai riferimento alla documentazione (Android|iOS) o leggi questo articolo: Abilitazione degli utenti autenticati con Chat SDK.
Passaggi per la risoluzione del problema
iOS
La logica in iOS è la seguente:
- Accetta ChatAPIConfiguration
visitorInfo
edepartment
proprietà. - Accetta ChatConfiguration
preChatFormConfiguration
requisiti relativi ai dati. - Se le proprietà sottostanti di
VisitorInfo
sono stringhe vuote o nulle, mentre i requisiti relativi ai dati corrispondenti non lo sono.hidden
, quindi mostra il campo. - Se le proprietà sottostanti di
department
sono stringhe vuote o nulle, mentre i requisiti relativi ai dati corrispondenti non lo sono.hidden
, quindi mostra il campo. - L’SDK mostra il modulo all’utente. L’utente inserisce i dettagli o li salta
.optional
campi a propria discrezione. - L’SDK raccoglie le informazioni inserite nel modulo.
Se un campo è stato saltato, torna ai dettagli di configurazione esistenti. Se è vuoto, non viene inviato alcun dettaglio. - L’SDK assegna il reparto e le chiamate
chat.profileProvider.setVisitorInfo(visitorInfo)
con i dettagli VisitorInfo del modulo (se non compilati, l’unione dei dati inseriti con la configurazione API).
Esempio:
func status(for info: String?) -> FormFieldStatus {
info?.isEmpty == true ? .optional: .hidden
}
let chatAPIConfig = ChatAPIConfiguration()
chatAPIConfig.visitorInfo = visitorInfo
chatAPIConfig.department = departmentName
chat.configuration = chatAPIConfig
chat.profileProvider.setVisitorInfo(visitorInfo)
let chatUIConfig = ChatConfiguration()
chatUIConfig.preChatFormConfiguration = .init(name: status(for: visitorInfo.name),
email: status(for: visitorInfo.email),
phoneNumber: status(for: visitorInfo.phoneNumber),
department: status(for: form.departmentId))
// pass chatUIConfig into buildUI(engines:, configs:)
Android
Per le versioni precedenti a SDK Chat 3.2.0:
In Android, la logica è diversa. Il VisitorInfo viene completamente cancellato se PreChatForm è abilitato, indipendentemente dal fatto che il campo sia Obbligatorio, Facoltativo o Nascosto.
Un modo per aggirare questa limitazione è aggiornare VisitorInfo una volta avviata la chat (tranne il reparto che non è modificabile una volta avviata la chat):
- Crea a
VisitorInfo
oggetto. - Compilalo con informazioni già note sull’utente.
- Configura il modulo preliminare alla chat per richiedere le informazioni mancanti.
- Imposta l’Observer.
- Inizia l’attività Chat.
Una volta completata la preChat e la chat passa allo stato INIZIATA, le informazioni sul visitatore vengono aggiornate.
Esempio:
boolean visitorSet = false; // Generic condition to ensure that you only set those info once
// ...
public void setupObserver(){
final ObservationScope observationScope = new ObservationScope();
Chat.INSTANCE.providers().chatProvider().observeChatState(observationScope, new Observer<ChatState>() {
@Override
public void update(ChatState chatState) {
ChatSessionStatus chatStatus = chatState.getChatSessionStatus();
// Status achieved after the PreChatForm is completed
if (chatStatus == ChatSessionStatus.STARTED) {
// Update the information MID chat here. All info but Department can be updated
if (!visitorSet) {
// Add here the code to set the visitor info - visitorInfo would be a VisitorInfo type variable containing all the information to set
profileProvider.setVisitorInfo(visitorInfo, null);
visitorSet = true;
}
} else {
// There are few other statuses that you can observe but they are unused in this example
Log.d("DEBUG", "[observerSetup] - ChatSessionUpdate -> (unused) status : " + chatStatus.toString());
}
}
});
}
Aggiorna gli script di codice forniti per adattarli al tuo workflow.
A partire dalla versione 3.2.0:
L’SDK più recente permette un uso più flessibile di PreChatForm con VisitorInfo. Per maggiori informazioni, leggi questo articolo: Impostazione delle informazioni per la sessione di chat.
Questa operazione può funzionare in modo nativo seguendo l'esempio nella documentazione.
Avvertenza sulla traduzione: questo articolo è stato tradotto usando un software di traduzione automatizzata per fornire una comprensione di base del contenuto. È stato fatto tutto il possibile per fornire una traduzione accurata, tuttavia Zendesk non garantisce l'accuratezza della traduzione.
Per qualsiasi dubbio sull'accuratezza delle informazioni contenute nell'articolo tradotto, fai riferimento alla versione inglese dell'articolo come versione ufficiale.