Symptômes du problème
iOS et Android se comportent différemment en ce qui concerne les objets Pre-chat et VisitorInfo , ce qui peut compliquer l'unification des comportements de vos applications.
L'objet VisitorInfo vous permet de configurer les informations du visiteur avant de commencer le chat. L'objet PreChatForm recueille ces informations une fois que le chat commence.
Au départ, l'idée était d'utiliser l'une ou l'autre dans votre workflow, mais pas les deux à la fois. C'est désormais chose faite pour iOS.
Le workflow avec authentification JWT modifie également le comportement de Chat. Pour en savoir plus, consultez la documentation (Android|iOS) ou consultez cet article : Activer les utilisateurs authentifiés avec le SDK Chat.
Étapes de résolution
iOS
La logique dans iOS est la suivante :
- Suivez les instructions de ChatAPIConfiguration
visitorInfo
etdepartment
. - Suivez les instructions de ChatConfiguration
preChatFormConfiguration
de données. - Si les propriétés sous-jacentes de
VisitorInfo
sont des chaînes vides ou nulles, et les données correspondantes ne sont pas.hidden
, puis affichez le champ. - Si les propriétés sous-jacentes de
department
sont des chaînes vides ou nulles, et les données correspondantes ne sont pas.hidden
, puis affichez le champ. - Le SDK affiche le formulaire pour l'utilisateur. L'utilisateur remplit les champs ou ignore
.optional
à leur discrétion. - Le SDK recueille les informations saisies dans le formulaire.
Si un champ a été ignoré, le programme renvoie les détails de configuration qui s'y trouvaient. Si ce champ est vide, aucun détail n'est envoyé. - Le SDK affecte le service et appelle
chat.profileProvider.setVisitorInfo(visitorInfo)
avec les détails VisitorInfo du formulaire (en fusionnant les données saisies avec la configuration de l'API si elle n'était pas renseignée).
Exemple :
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
Pour les versions antérieures au SDK Chat 3.2.0 :
Sous Android, la logique est différente. VisitorInfo est entièrement effacé si PreChatForm est activé, que le champ soit obligatoire, facultatif ou masqué.
Une façon de contourner cette limite consiste à mettre à jour VisitorInfo une fois le chat commencé (sauf le service qui ne peut pas être modifié une fois le chat commencé) :
- Créer un
VisitorInfo
. - Saisissez les informations que vous connaissez déjà au sujet de l'utilisateur.
- Configurez le formulaire pré-chat pour demander les informations manquantes.
- Configurer l'observateur.
- Démarrez l'activité Chat.
Une fois le PreChat terminé et le chat passe au statut COMMENCÉ, les informations du visiteur sont mises à jour.
Exemple :
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());
}
}
});
}
Mettez à jour les scripts de code fournis pour les adapter à votre workflow.
À partir de la version 3.2.0 :
Le dernier SDK permet une utilisation plus souple de PreChatForm avec VisitorInfo. Lisez cet article pour en savoir plus : Informations de configuration pour la session de chat.
Cela peut fonctionner en suivant l'exemple de la documentation.
Traduction - exonération : cet article a été traduit par un logiciel de traduction automatisée pour permettre une compréhension élémentaire de son contenu. Des efforts raisonnables ont été faits pour fournir une traduction correcte, mais Zendesk ne garantit pas l’exactitude de la traduction.
Si vous avez des questions quant à l’exactitude des informations contenues dans l’article traduit, consultez la version anglaise de l’article, qui représente la version officielle.