Sintomas do problema
iOS e Android se comportam de maneira diferente quando se trata de objetos pré-chat e VisitorInfo e isso pode tornar a unificação de comportamentos em seus aplicativos confusa.
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 depois que o chat é iniciado.
Inicialmente, a ideia era usar um ou outro em seu fluxo de trabalho, mas não os dois ao mesmo tempo, que agora foram atualizados para o iOS.
O fluxo de trabalho com autenticação por JWT também modifica o comportamento do Chat. Para obter mais informações, consulte a documentação (Android|iOS) ou consulte este artigo: Ativação de usuários autenticados com o SDK do Chat.
Etapas de resolução
iOS
A lógica no iOS é a seguinte:
- Veja as orientações da ChatAPIConfiguration
visitorInfo
edepartment
properties. - Veja as dicas de ChatConfiguration
preChatFormConfiguration
de dados. - Se as propriedades subjacentes de
VisitorInfo
são cadeias de caracteres nulas ou vazias e seus requisitos de dados correspondentes não são.hidden
e exibirá o campo. - Se as propriedades subjacentes de
department
são cadeias de caracteres nulas ou vazias e seus requisitos de dados correspondentes não são.hidden
e exibirá o campo. - O SDK mostra o formulário para o usuário. O usuário preenche os detalhes ou ignora
.optional
campos a critério deles. - O SDK coleta as informações inseridas no formulário.
Se algum campo foi ignorado, ele retorna para os detalhes de configuração que estavam lá. Se estiver vazio, nenhum detalhe será enviado. - O SDK atribui o departamento e chama
chat.profileProvider.setVisitorInfo(visitorInfo)
pelos detalhes de VisitorInfo do formulário (fundindo os dados inseridos com a configuração da API onde não foram preenchidos).
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 versões anteriores ao SDK Chat 3.2.0:
No Android, a lógica é diferente. VisitorInfo é totalmente apagado se PreChatForm estiver ativado, independentemente de o campo ser obrigatório, opcional ou oculto.
Uma maneira de contornar essa limitação é atualizar VisitorInfo após o início do chat (exceto o departamento, que não é mais editável após o início do chat):
- Criar um
VisitorInfo
objeto. - 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 de chat.
Quando o pré-chat for concluído e o chat mudar 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 para adequá-los ao 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: Informações de configuração da 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.