Symptome des Problems
iOS und Android verhalten sich unterschiedlich, wenn es um Pre-Chat- und VisitorInfo -Objekte geht. Dies kann zu Verwirrung führen.
Mit dem Objekt VisitorInfo können Sie die Informationen über den Besucher festlegen, bevor Sie den Chat starten. Im Gegensatz dazu erfasst das PreChatForm -Objekt diese Informationen, sobald der Chat beginnt.
Ursprünglich war die Idee, das eine oder andere in Ihrem Workflow zu verwenden, aber nicht beide gleichzeitig.
Der Workflow mit JWT -Authentifizierung ändert auch das Verhalten von Chat. Weitere Informationen finden Sie in der Dokumentation (Android|iOS) oder in diesem Beitrag: Aktivieren authentifizierter Benutzer mit dem Chat -SDK.
Lösungsschritte
iOS
Die Logik in iOS sieht wie folgt aus:
- Nehmen Sie die ChatAPIConfiguration
visitorInfo
unddepartment
Eigenschaften. - Nehmen Sie die Chatkonfiguration
preChatFormConfiguration
Datenanforderungen. - Wenn die zugrundeliegenden Eigenschaften von
VisitorInfo
sind null oder leere Zeichenfolgen, die entsprechenden Datenanforderungen aber nicht.hidden
und zeigen Sie dann das Feld an. - Wenn die zugrundeliegenden Eigenschaften von
department
sind null oder leere Zeichenfolgen, die entsprechenden Datenanforderungen aber nicht.hidden
und zeigen Sie dann das Feld an. - Das SDK zeigt dem Benutzer das Formular an. Der Benutzer fügt die Details ein oder überspringt eine beliebige
.optional
Felder nach eigenem Ermessen. - Das SDK erfasst die im Formular eingegebenen Informationen.
Wenn ein Feld übersprungen wurde, wird auf die vorhandenen Konfigurationsdetails zurückgegriffen. Wenn das Feld leer ist, werden keine Details gesendet. - Das SDK weist die Abteilung und die Anrufe zu
chat.profileProvider.setVisitorInfo(visitorInfo)
mit den VisitorInfo -Details des Formulars (Zusammenführung der eingegebenen Daten mit der API -Konfiguration, wenn diese nicht ausgefüllt sind).
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 nach Beginn des Chats zu aktualisieren (mit Ausnahme der Abteilung, die nach dem Chat nicht mehr bearbeitet werden kann):
- Erstellen Sie eine
VisitorInfo
Objekt. - Geben Sie bereits bekannte Informationen zum Benutzer ein.
- Konfigurieren Sie das Pre-Chat-Formular so, dass nach den fehlenden Informationen gefragt wird.
- Richten Sie den Beobachter ein.
- Starten Sie die Chat -Aktivität.
Sobald der PreChat abgeschlossen ist und der Chat den Status „STARTED“ annimmt, 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 Codescripts entsprechend Ihrem Workflow.
Ab Version 3.2.0:
Das neueste SDK ermöglicht eine flexiblere Nutzung des PreChatForm mit VisitorInfo. Weitere Informationen finden Sie in diesem Beitrag: Festlegen von Informationen für die Chatsitzung.
Dies kann nativ funktionieren, indem 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.
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.