Sintomas do problema
O iOS e Android se comportam de maneira diferente quando se trata de objetos pré-chat e visitanteInfo e isso pode tornar os comportamentos de unificação do seu aplicativo confusos.
O objeto VisitorInfo permite que você defina as informações sobre o visitante antes de iniciar o chat. Em contraste, o objeto PreChatForm coleta essas informações assim que o chat começa.
Inicialmente, a ideia era usar um ou outro em seu fluxo de trabalho, mas não os dois de uma vez, o que agora foi atualizado no iOS.
O fluxo de trabalho com a autenticação JWT também modifica o comportamento do Chat. Para obter mais informações, consulte a documentação (Android|iOS) ou consulte este artigo: Habilitação de usuários autenticados com o SDK do Chat.
Etapas de resolução
iOS
A lógica no iOS é a seguinte:
- Faça a configuração do ChatAPI
visitorInfo
edepartment
. - Faça a configuração do Chat
preChatFormConfiguration
requisitos de dados. - Se as propriedades subjacentes de
VisitorInfo
são cadeias de caracteres vazias ou vazias e seus requisitos de dados correspondentes não são.hidden
e mostre o campo. - Se as propriedades subjacentes de
department
são cadeias de caracteres vazias ou vazias e seus requisitos de dados correspondentes não são.hidden
e mostre o campo. - O SDK exibe o formulário para o usuário. O usuário preenche os detalhes ou ignora qualquer
.optional
campos a seu critério. - O SDK coleta as informações inseridas no formulário.
Se qualquer campo foi ignorado, ele volta para os detalhes de configuração que estavam presentes. Se estiver vazio, nenhum detalhe será enviado. - O SDK atribui o departamento e as chamadas
chat.profileProvider.setVisitorInfo(visitorInfo)
com os detalhes do VisitorInfo do formulário (fundindo os dados inseridos com a configuração da API onde não foi preenchido).
Exemplo:
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
Para as versões anteriores ao SDK do Chat 3.2.0:
No Android, a lógica é diferente. O VisitorInfo é totalmente apagado se o PreChatForm estiver ativado, independentemente de o campo ser Obrigatório, Opcional ou Oculto.
Uma maneira de resolver essa limitação é atualizar o VisitorInfo depois do início do chat (exceto o departamento, que não é editável após o início do chat):
- Criar uma
VisitorInfo
. - Preencha-o com informações já conhecidas sobre o usuário.
- Configure o formulário pré-chat para solicitar as informações ausentes.
- Configure o observador.
- Inicie a atividade do Chat.
Quando o pré-chat for concluído e o chat muda para o status INICIADO, as informações do visitante são atualizadas.
Exemplo:
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());
}
}
});
}
Atualize os scripts de código fornecidos de acordo com seu fluxo de trabalho.
A partir da versão 3.2.0:
O SDK mais recente permite um uso mais flexível do PreChatForm com o VisitorInfo. Veja este artigo para obter mais informações: Definição das informações para a sessão de chat.
Isso pode funcionar nativamente, seguindo o exemplo na documentação.
Aviso sobre a tradução: este artigo foi traduzido por um software de tradução automática para oferecer a você uma compreensão básica do conteúdo. Medidas razoáveis foram tomadas para fornecer uma tradução precisa, no entanto, a Zendesk não garante a precisão da tradução.
Em caso de dúvidas relacionadas à precisão das informações contidas no artigo traduzido, consulte a versão oficial do artigo em inglês.
0 comentários