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

Clause de non-responsabilité : Cet article est fourni à titre informatif uniquement. Zendesk ne fournit pas l’assistance pour le code et ne le garantit pas. Si vous rencontrez des problèmes, publiez-en la description dans la section commentaires ou essayez de trouver une solution en ligne.

iOS

La logique dans iOS est la suivante :

  1. Suivez les instructions de ChatAPIConfiguration visitorInfo et department .
  2. Suivez les instructions de ChatConfiguration preChatFormConfiguration de données.
  3. 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.
  4. 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.
  5. Le SDK affiche le formulaire pour l'utilisateur. L'utilisateur remplit les champs ou ignore .optional à leur discrétion.
  6. 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é.
  7. 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é) :

  1. Créer un VisitorInfo .
  2. Saisissez les informations que vous connaissez déjà au sujet de l'utilisateur.
  3. Configurez le formulaire pré-chat pour demander les informations manquantes.
  4. Configurer l'observateur.
  5. 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.

Réalisé par Zendesk