컨텍스트 변수를 및 가상 에이전트 채팅에 라이브 에이전트 전달

  • 릴리스 버전: Zurich
  • 업데이트 날짜 2025년 07월 31일
  • 소요 시간: 5분
  • 채팅 세션을 시작할 때 매개변수를 전달하여 채팅 컨텍스트 변수를 전달할 수 있습니다 contextData .

    함수를 사용하여 이 값을 전달할 수 있습니다 NowChatService - startChat(contextData: [String: Any]? = nil, _ completion: @escaping (결과<무효, NowChatServiceError>) -> 무효) .

    채팅 컨텍스트 변수에 대한 자세한 내용은 다음 문서를 참조하십시오 Live agent chat context variables.

    또한 채팅 세션을 시작할 때 선택적 NowChatConfiguration 매개변수를 전달하여 NowChat의 일부 동작을 수정할 수도 있습니다.

    • closePrompt: 채팅 창을 나가기 전에 나타나는 프롬프트 텍스트입니다. 다음 매개변수를 통해 이 프롬프트 텍스트를 정의합니다.
      • header: 프롬프트의 헤더에 표시되는 Nullable 문자열 값입니다.
      • message: 프롬프트의 본문에 표시되는 문자열 값입니다.
      • acceptButtonTitle: 프롬프트의 기본 버튼에 표시되는 문자열 값입니다. 이 버튼을 누르면 채팅 창이 닫힙니다.
      • declineButtonTitle: 프롬프트의 보조 버튼에 표시되는 문자열 값입니다. 이 버튼은 채팅 창을 닫지 않고 프롬프트를 해제합니다.
    • disabledFeatures: 비활성화할 NowChat 기능 목록입니다. 비활성화할 수 있는 기능 목록은 NowChatConfiguration.Feature 열거형 클래스를 참조하십시오.
    • conversationOptions: NowChat에 적용할 대화 옵션 목록입니다. 적용할 수 있는 옵션 목록은 NowChatConvestation.ConversationOption 열거형 클래스를 참조하십시오.
    • uiConfiguration: NowChat에서 UI 구성요소를 구성하는 데 사용되는 UIConfiguration 값입니다.
    다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
    // Close Button Type
    func closeButtonText(title: String?) -> NowChatConfiguration.CloseButtonType? {
      guard let title else { return nil }
      return .text(title)
    }  
      
    func closeButtonImage(name imageName: String?) -> NowChatConfiguration.CloseButtonType? {
      guard let imageName,
      let buttonImage = UIImage(named: imageName) else { return nil }
      return .image(buttonImage)	
    }
    
    
    // Create the chat UI
    func makeChatScreen() -> UIViewController? {
      guard let chatService = chatService else { return nil }
      let closePrompt = NowChatConfiguration.ClosePrompt(header: "Close Window",
        message: "Are you sure you want to close the chat window?",
        acceptButtonTitle: "Yes",
        declineButtonTitle: "No")     
    
      let attachmentUploadButton = NowChatConfiguration.AttachmentUploadButton(isVisible: false) // default isVisible = true         
    
      let chatConfiguration = NowChatConfiguration(closePrompt: closePrompt,
        disabledFeatures: [.startNewConversation],
        conversationOptions: [.forceNewConversation, .endConversationOnExit],
        uiConfiguration: NowChatConfiguration.UIConfiguration(closeButton: closeButtonImage(name: "arrow.left"), attachmentUploadButton: attachmentUploadButton))
    
      let result = chatService.makeChatUI(theme: CarrascoChatTheme(chatColors: ChatColors()), chatConfiguration: chatConfiguration)
             
      switch result {
        case .success(let chatViewController): 
          return chatViewController
        case .failure(let error):
          debugPrint("Chat screen creation failed with error: \(error)")
          return nil
      }
    } 
    
    // Start the chat session
    func startChat() {
      guard let chatService = chatService else {
        debugPrint("Chat service is invalid")
        viewState = makeViewState()
        return
      } 
      chatService.startChat { [weak self] result in
        if case .failure(let error) = result {
          debugPrint("Chat session initialization failed with error: \(error)")
          self?.resetChat()
        }
      }
     }
    
    // Initialize the chat service
    private func initializeChatService() {
      NowChat.makeChatService(instanceUrl: instanceUrl, delegate: self) { [weak self] result in
        guard let self = self else { return }
        switch result {
          case .success(let service):
            self.chatService = service
          case .failure(let error):
            debugPrint("Creating the chat service failed with error: \(error)") 
        } 
        self.viewState = self.makeViewState()
      }
    }