문제 증상
iOS와 Android는채팅 전및VisitorInfo개체에 있어 다르게 작동하므로 애플리케이션 동작을 통합하는 데 혼동을 야기할 수 있습니다.
VisitorInfo개체를 사용하여 채팅을 시작하기 전에 방문자에 대한 정보를 설정할 수 있습니다. 반면에PreChatForm개체는 채팅이 시작되면 해당 정보를 수집합니다.
처음에는 워크플로에서 둘 중 하나를 사용하려고 했지만 지금은 iOS에서 업데이트되었습니다.
JWT 인증을 사용한 워크플로우도 Chat의 동작을 수정합니다. 자세한 내용은 문서(Android|iOS)를 참조하거나 다음 문서를 참조하세요. Chat SDK로 인증된 사용자 사용 설정하기
해결 단계
iOS
iOS의 논리는 다음과 같습니다.
-
ChatAPIconfiguration의
visitorInfo
및department
속성을 참조하세요. -
Chatconfiguration의
preChatFormConfiguration
참조하세요. - 기본 특성이
VisitorInfo
nil 또는 빈 문자열이며, 해당 데이터 요구 사항이.hidden
로 전환한 다음 필드를 표시합니다. - 기본 특성이
department
nil 또는 빈 문자열이며, 해당 데이터 요구 사항이.hidden
로 전환한 다음 필드를 표시합니다. - SDK가 사용자에게 양식을 표시합니다. 사용자가 세부 정보를 입력하거나 어느 세부 정보
.optional
자유재량에 따라 필드를 사용할 수 있습니다. - SDK가 양식에 입력된 정보를 수집합니다.
필드를 건너뛴 경우에는 거기에 있었던 구성 세부 정보로 돌아갑니다. 비어 있으면 세부 정보를 보내지 않습니다. - SDK를 통해 부서를 배정하고 전화를
chat.profileProvider.setVisitorInfo(visitorInfo)
양식의VisitorInfo세부 정보로 바꿉니다(입력된 데이터가 채워지지 않은 API 구성과 병합).
예:
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
SDK Chat 3.2.0 이전 버전의 경우:
Android에서는 논리가 다릅니다. PreChatForm이 사용 설정되어 있으면 필드가 필수, 선택 사항 또는 숨김 상태인지에 관계없이VisitorInfo가 완전히 지워집니다.
이 제한을 해결하는 한 가지 방법은 Chat이 시작된 후VisitorInfo를 업데이트하는 것입니다(단, 채팅이 시작된 후에 편집할 수 없는 부서는 예외).
- 만들기:
VisitorInfo
개체를 삭제합니다. - 사용자에 대해 이미 알려진 정보로 채우세요.
- 누락된 정보를 묻도록 채팅 전 양식을 구성하세요.
- 관찰자를 설정합니다.
- Chat 활동을 시작합니다.
채팅 전 단계가 완료되어 채팅이 시작 상태가 되면 방문자 정보가 업데이트됩니다.
예:
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());
}
}
});
}
워크플로우에 맞게 제공된 코드 스크립트를 업데이트합니다.
버전 3.2.0 이상:
최신 SDK를 통해 VisitorInfo와 함께 PreChatForm을 더욱 유연하게 사용할 수 있습니다. 자세한 내용은 채팅 세션의 설정 정보
이 기능은 문서의 예에 따라 기본적으로 작동할 수 있습니다.
번역 고지 사항: 본 문서는 콘텐츠에 대한 기본적인 이해를 제공하기 위해 자동 번역 소프트웨어를 사용하여 번역되었습니다. 정확한 번역을 제공하고자 합당한 노력을 기울였으나 Zendesk는 번역의 정확성을 보장하지 않습니다.
번역된 문서에 포함된 정보의 정확성과 관련하여 질문이 있으시면 문서의 공식 버전인 영문 버전을 참조하시기 바랍니다.