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

Aviso Legal: Este artigo destina-se apenas a fins informativos. O Zendesk não oferece suporte nem garantia ao código. Publique problemas encontrados nos comentários ou pesquise por uma solução online.

iOS

A lógica no iOS é a seguinte:

  1. Faça a configuração do ChatAPI visitorInfo e department .
  2. Faça a configuração do Chat preChatFormConfiguration requisitos de dados.
  3. Se as propriedades subjacentes de VisitorInfo são cadeias de caracteres vazias ou vazias e seus requisitos de dados correspondentes não são .hiddene mostre o campo.
  4. Se as propriedades subjacentes de department são cadeias de caracteres vazias ou vazias e seus requisitos de dados correspondentes não são .hiddene mostre o campo.
  5. 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.
  6. 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.
  7. 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):

  1. Criar uma VisitorInfo .
  2. Preencha-o com informações já conhecidas sobre o usuário.
  3. Configure o formulário pré-chat para solicitar as informações ausentes.
  4. Configure o observador.
  5. 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.

Powered by Zendesk