Symptome des Problems
iOS und Android verhalten sich in Bezug auf Pre-Chat- und VisitorInfo -Objekte unterschiedlich. Dies kann die Vereinheitlichung von Anwendungsverhalten verwirren.
Mit dem VisitorInfo- Objekt können Sie vor Beginn des Chats die Informationen zum Besucher festlegen. Im Gegensatz dazu erfasst das PreChatForm- Objekt diese Informationen zu Beginn des Chats.
Ursprünglich war geplant, die eine oder andere Option in Ihrem Workflow zu verwenden, aber nicht beides gleichzeitig. Das wurde jetzt für iOS aktualisiert.
Der Workflow mit JWT-Authentifizierung ändert auch das Chat-Verhalten. Weitere Informationen finden Sie in der Dokumentation (Android|iOS) oder in diesem Beitrag: Aktivieren authentifizierter Benutzer mit dem Chat SDK.
Lösungsschritte
iOS
In iOS sieht die Logik wie folgt aus:
- Take the ChatAPIConfiguration's
visitorInfo
unddepartment
Eigenschaften. - Daten von ChatConfigurationübernehmen
preChatFormConfiguration
Datenanforderungen. - Wenn die zugrundeliegenden Eigenschaften von
VisitorInfo
Null oder leere Zeichenfolgen sind und die entsprechenden Datenanforderungen nicht sind.hidden
, und blenden Sie dann das Feld ein. - Wenn die zugrundeliegenden Eigenschaften von
department
Null oder leere Zeichenfolgen sind und die entsprechenden Datenanforderungen nicht sind.hidden
, und blenden Sie dann das Feld ein. - Im SDK erscheint das Formular für den Benutzer. Der Benutzer gibt die Details ein oder überspringt sie
.optional
nach eigenem Ermessen. - Das SDK erfasst die in das Formular eingegebenen Informationen.
Wenn ein Feld übersprungen wurde, wird es auf die dort vorhandenen Konfigurationsdetails zurückgegriffen. Wenn das Feld leer ist, werden keine Details gesendet. - Das SDK weist die Abteilung und Anrufe zu
chat.profileProvider.setVisitorInfo(visitorInfo)
mit den VisitorInfo- Details des Formulars (die eingegebenen Daten werden mit der API-Konfiguration zusammengeführt, wenn nicht ausgefüllt).
Beispiel:
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
Für Versionen vor SDK Chat 3.2.0:
Bei Android ist die Logik anders. Die VisitorInfo wird vollständig gelöscht, wenn PreChatForm aktiviert ist, unabhängig davon, ob das Feld „Erforderlich“, „Optional“ oder „Ausgeblendet“ ist.
Eine Möglichkeit, diese Einschränkung zu umgehen, besteht darin, die VisitorInfo zu aktualisieren, sobald der Chat gestartet wird (mit Ausnahme der Abteilung, die nach Beginn des Chats nicht mehr bearbeitet werden kann):
- Erstellen einer
VisitorInfo
Objekt. - Geben Sie bereits bekannte Informationen über den Benutzer ein.
- Konfigurieren Sie das Pre-Chat-Formular so, dass Sie nach den fehlenden Informationen gefragt werden.
- Richten Sie den Beobachter ein.
- Chat-Aktivität starten.
Sobald der PreChat abgeschlossen ist und der Chat in den Status STARTED wechselt, werden die Besucherinformationen aktualisiert.
Beispiel:
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());
}
}
});
}
Aktualisieren Sie die bereitgestellten Codeskripts, damit sie zu Ihrem Workflow passen.
Ab Version 3.2.0:
Das neueste SDK ermöglicht eine flexiblere Nutzung von PreChatForm mit VisitorInfo. Weitere Informationen finden Sie in diesem Beitrag: Festlegen von Informationen für die Chatsitzung.
Dies kann nativ funktionieren, wenn Sie dem Beispiel in der Dokumentation folgen.
Hinweis zur Übersetzung: Dieser Beitrag wurde mit automatischer Übersetzungssoftware übersetzt, um dem Leser ein grundlegendes Verständnis des Inhalts zu vermitteln. Trotz angemessener Bemühungen, eine akkurate Übersetzung bereitzustellen, kann Zendesk keine Garantie für die Genauigkeit übernehmen.
Sollten in Bezug auf die Genauigkeit der Informationen im übersetzten Beitrag Fragen auftreten, beziehen Sie sich bitte auf die englische Version des Beitrags, die als offizielle Version gilt.