---
sourceDocument: Xanadu API 참조
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - ko-KR

ft:publication_title :

    - Xanadu API 참조

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# NowChatService 클래스 - iOS

# NowChatService 클래스 - iOS {#ariaid-title1}

* 릴리스 버전: Xanadu
* 
* 업데이트 날짜 2024년 08월 01일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 12분

NowChatService 클래스는 가상 및 라이브 에이전트 채팅 기능을 제공합니다.

이 클래스를 사용하여 채팅 서비스를 시작 및 중지하고, 채팅 세션을 시작하고, 채팅 사용자 인터페이스를 만들고, 읽지 않은 메시지를 구독/구독 취소할 수 있습니다.
{#NowChatServiceiOSAPI__entry__2}

| 이름 | 설명 |
|-|-|
| 구성 | 서비스가 초기화될 때 제공되는 구성 설정입니다. 데이터 형식: [NowServiceConfiguration](https://servicenow-prod.fluidtopics.net/KFurLGfFBxiSRKTtUWo4pg#NowServiceConfigurationiOSStruct "NowServiceConfiguration 구조는 기능 서비스에 대한 구성 정보를 정의합니다.") |
| 인스턴스 버전 | 연결된 ServiceNow 인스턴스의 버전입니다(예: 유타 또는 퀘벡). 데이터 유형: 문자열 |
| 네트워크 서비스 | 이 채팅 서비스와 관련된 네트워크 서비스입니다. 데이터 형식: NetworkService |
| 세션 유형 | 세션의 유형입니다. 가능한 값: * 인증 * 손님 * 가장 * 알 수 없음 데이터 유형: SessionType |
[표 1. 속성]

## NowChatService - init(구성: NowServiceConfiguration, 대리자: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = nil) {#ariaid-title2}

새 NowChatService 인스턴스를 초기화합니다.
{#NChatServ-init_O_S_S__table_jgv_vqp_npb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 구성 | [NowServiceConfiguration](https://servicenow-prod.fluidtopics.net/KFurLGfFBxiSRKTtUWo4pg#NowServiceConfigurationiOSStruct "NowServiceConfiguration 구조는 기능 서비스에 대한 구성 정보를 정의합니다.") | 서비스를 올바르게 초기화하는 데 필요한 구성 정보입니다. |
| 위임 | NowChatService위임자 | 옵션입니다. NowChatServiceDelegate 프로토콜을 구현하는 NowChat 콜백 대리자 객체입니다. 기본값 : nil |
| 'coreServiceProvider'를 선택합니다. | NowCoreServiceProviding (영문) | 옵션입니다. NowCoreServiceProviding 프로토콜을 구현하는 객체입니다. NowChat 서비스에 대한 액세스를 제공합니다. 기본값 : nil |
[표 2. 매개변수]

{#NChatServ-init_O_S_S__table_jgv_vqp_npb}  
다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    guard let coreService = NowSDK.core() else {
      // Error with NowServiceError.sdkNotConfigured
      return
    }

    guard 
      let instanceUrl = URL(string: "http://sample.service-now.com"), 
      let serviceConfig = NowSDK.makeServiceConfiguration(for: instanceUrl) else {
        // Could not create service -- 
        // NowServiceError.serviceConfigurationInvalid
        return
      }
        
    let chatService = NowChatService(configuration: serviceConfig, delegate: delegate, coreServiceProvider: coreService)

## NowChatService - makeChatUI(테마: NowChatThemeable, chatOptions: NowChatOptions? = nil) - \> 결과\<UIViewController, NowChatServiceError\>) {#ariaid-title3}

채팅 사용자 인터페이스를 호스트하는 `UIViewController` 를 만듭니다.
이 함수가 채팅 UI를 생성하더라도 startChat() 함수를 호출하여 채팅 세션을 시작해야 합니다. 채팅 UI가 표시되면 이 호출을 수행해야 합니다. 자세한 내용은 관련 샘플 응용 프로그램 및 .[Mobile SDK 개발자 가이드 - iOS](https://servicenow-prod.fluidtopics.net/EjcAplcffaQbQpKiXW4zLw "이를 ServiceNow Mobile SDK 통해 독립 실행형 모바일 iOS 애플리케이션 내에서 플랫폼의 ServiceNow 기능과 리소스를 활용할 수 있습니다.")
{#NChatServ-makeChatUI_O__table_lkt_lvj_npb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 주제 | NowChatThemeable 객체 | 채팅 UI가 작성할 테마 정보입니다. |
| chatOptions | [나우챗옵션?](https://servicenow-prod.fluidtopics.net/hTIblJi_71Ndsu~wBa_pUA#NowChatOptionsiOS "NowChatOptions 클래스를 사용하면 채팅 세션에서 채팅 창을 닫기 전에 프롬프트를 표시하거나 채팅을 사용하는 동안 기능을 비활성화하는 등의 옵션을 구성할 수 있습니다.") | 옵션입니다. 채팅 세션에 적용할 옵션입니다. |
[표 3. 매개변수]

{#NChatServ-makeChatUI_O__table_lkt_lvj_npb} {#NChatServ-makeChatUI_O__table_mkt_lvj_npb__entry__2}

| 유형 | 설명 |
|-|-|
| 객체 | 성공: UI 뷰 컨트롤러 구성 정보를 포함하는 UIViewController 개체입니다. 실패: NowChatServiceError 객체. 가능한 오류: * chatServiceInvalid * coreServiceInvalid * guestUserNotAllowed (영문) * invalidCredentials * no세션 * 알 수 없음 * 지원되지 않는 서버 |
[표 4. 반환]

{#NChatServ-makeChatUI_O__table_mkt_lvj_npb}  
다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    func makeChatScreen() -> UIViewController? {
      guard let chatService = chatService else { return nil }
      let closePrompt = NowChatOptions.ClosePrompt(
        header: "Close Window",
        message: "Are you sure you want to close the chat window?",
        acceptButtonTitle: "Yes",
        declineButtonTitle: "No")

      let disabledFeatures = [.startNewConversation]
        
      let chatOptions = NowChatOptions(closePrompt: closePrompt,
        disabledFeatures: disabledFeatures,
        forceNewConversation: true)
        
      let result = chatService.makeChatUI(theme: CarrascoChatTheme(chatColors: ChatColors()), chatOptions: chatOptions)
        
      switch result {
      case .success(let chatViewController):
        return chatViewController
      case .failure(let error):
        return nil
      }
    }

## NowChatService - shutdown() {#ariaid-title4}

활성 채팅 세션을 포함한 채팅 서비스를 종료합니다.
이 함수를 호출한 후에는 연결된 `NowChatService` 가 비활성화되어 다시 사용할 수 없습니다. 다른 채팅 세션을 설정하려면 NowChat.makeChatService() 함수를 호출하여 새 `NowChatService` 인스턴스를 만듭니다.
{#NChatServ-shutdown__table_zm2_tfk_npb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 없음 |   |   |
[표 5. 매개변수]

{#NChatServ-shutdown__table_zm2_tfk_npb} {#NChatServ-shutdown__table_an2_tfk_npb__entry__2}

| 유형 | 설명 |
|-|-|
| 없음 |   |
[표 6. 반환]

{#NChatServ-shutdown__table_an2_tfk_npb}  
다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    private func resetChat() {
      chatService?.shutdown()
      chatService = nil
      initializeChatService()
      viewState = makeViewState()
    }

    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()
    }

    func makeViewState() -> ViewState {
      ViewState(chatEnabled: chatService != nil,
        menuItems: menuItems)
    }

## NowChatService - startChat(contextData: \[String: Any\]?) {#ariaid-title5}

채팅 세션을 시작합니다.
주:  
채팅 세션이 시작된 후 완료 작업을 실행하려면 이 [NowChatService - startChat(contextData: \[string: any\]? = nil, _ 완료: @escaping (Result\<void, NowChatServiceError\>))](5Yfoxt_FKjv86Qj8AyJDOw#NChatServ-startChat_O "채팅 세션을 시작하고 채팅 세션이 시작된 후 완료 블록을 실행합니다.") 기능을 사용합니다.
{#NChatServ-startChat__table_myg_12k_npb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 컨텍스트 데이터 | \[문자열 : any\]? | 옵션입니다. 채팅 세션에 전달되는 채팅 컨텍스트 변수를 포함하는 딕셔너리입니다. 채팅 컨텍스트 변수에 대한 자세한 내용은 을 참조하십시오 [Live agent chat context variables](https://www.servicenow.com/docs/access?context=live-agent-chat-context-vars&version=xanadu&pubname=xanadu-conversational-interfaces&ft:locale=en-US). |
[표 7. 매개변수]

{#NChatServ-startChat__table_myg_12k_npb} {#NChatServ-startChat__table_nyg_12k_npb__entry__2}

| 유형 | 설명 |
|-|-|
| void 또는 문자열 | 성공: 무효 오류: NowChatServiceError 가능한 오류: * chatServiceInvalid * coreServiceInvalid * guestUserNotAllowed (영문) * invalidCredentials * no세션 * 알 수 없음 * 지원되지 않는 서버 |
[표 8. 반환]

{#NChatServ-startChat__table_nyg_12k_npb}  
다음 코드 예제에서는 컨텍스트 변수를 전달하지 않고 이 함수를 호출하는 방법을 보여 줍니다.

    chatService.startChat { [weak self] result in
      if case .failure(let error) = result {
        debugPrint("Chat session initialization failed with error: \(error)")
        self?.resetChat()
      }
    }

다음 코드 예제에서는 컨텍스트 변수를 전달하여 이 함수를 호출하는 방법을 보여 줍니다.

    chatService.startChat { [weak self] result in
      let contextData = ["sys_id": "123456789", "table_name": "wm_task", "active": true] as [String: Any]
      chatService.startChat(contextData: contextData) { [weak self] result in
        if case .failure(let error) = result {
          debugPrint("Chat session initialization failed with error: \(error)")
          self?.resetChat()
        }
      }
    }

## NowChatService - startChat(contextData: \[string: any\]? = nil, _ 완료: @escaping (Result\<void, NowChatServiceError\>)) {#ariaid-title6}

채팅 세션을 시작하고 채팅 세션이 시작된 후 완료 블록을 실행합니다.
{#NChatServ-startChat_O__table_tk1_bbk_npb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 컨텍스트 데이터 | \[문자열 : any\]? | 옵션입니다. 채팅 세션에 전달되는 채팅 컨텍스트 변수를 포함하는 딕셔너리입니다. 채팅 컨텍스트 변수에 대한 자세한 내용은 을 참조하십시오 [Live agent chat context variables](https://www.servicenow.com/docs/access?context=live-agent-chat-context-vars&version=xanadu&pubname=xanadu-conversational-interfaces&ft:locale=en-US). |
| 완료 | 객체 | 채팅 세션이 시작된 후 실행할 완료 블록입니다. |
[표 9. 매개변수]

{#NChatServ-startChat_O__table_tk1_bbk_npb} {#NChatServ-startChat_O__table_uk1_bbk_npb__entry__2}

| 유형 | 설명 |
|-|-|
| void 또는 문자열 | 완성 블록의 반환 값: * 성공: 무효 * 오류: NowChatServiceError 가능한 오류: * chatServiceInvalid * coreServiceInvalid * guestUserNotAllowed (영문) * invalidCredentials * no세션 * 알 수 없음 * 지원되지 않는 서버 {#NChatServ-startChat_O__ul_e1n_lpj_k1c} |
[표 10. 반환]

{#NChatServ-startChat_O__table_uk1_bbk_npb}  
다음 코드 예제에서는 컨텍스트 데이터 없이 이 함수를 호출하는 방법을 보여 줍니다.

    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()
        }
      }
    }

    func makeViewState() -> ViewState {
      ViewState(chatEnabled: chatService != nil,
        menuItems: menuItems)
    }

다음 코드 예제에서는 컨텍스트 데이터를 사용하여 이 함수를 호출하는 방법을 보여 줍니다.

    func startChat() {
      guard let chatService = chatService else {
        debugPrint("Chat service is invalid")
        viewState = makeViewState()
        return
      }

      let contextData = ["sys_id": "123456789", "table_name": "wm_task", "active": true] as [String: Any]
      chatService.startChat(contextData: contextData) { [weak self] result in
        if case .failure(let error) = result {
          debugPrint("Chat session initialization failed with error: \(error)")
          self?.resetChat()
        }
      }
    }

    func makeViewState() -> ViewState {
      ViewState(chatEnabled: chatService != nil,
        menuItems: menuItems)
    }

## NowChatService - subscribeToUnreadMessageCount(pollingInterval: TimeInterval, 완료: @escaping(Int) -\> 무효) {#ariaid-title7}

읽지 않은 메시지 수 수신기를 구독합니다.
{#NChatServ-subToUnreadMsgCount_S__table_pv1_3ln_1qb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| pollingInterval (폴링인터벌) | 시간 간격 | 읽지 않은 채팅 메시지 수에 대해 웹 서비스를 폴링하는 빈도입니다. 단위: 초 |
| 완료 | @escaping(정수) - \> 무효) | 읽지 않은 채팅 메시지 수를 보고하기 위해 호출할 완료 핸들러입니다. Int: 읽지 않은 채팅 메시지 수입니다. |
[표 11. 매개변수]

{#NChatServ-subToUnreadMsgCount_S__table_pv1_3ln_1qb} {#NChatServ-subToUnreadMsgCount_S__table_qv1_3ln_1qb__entry__2}

| 유형 | 설명 |
|-|-|
| 없음 |   |
[표 12. 반환]

{#NChatServ-subToUnreadMsgCount_S__table_qv1_3ln_1qb}  
다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    ...
    if viewModel.isPolling {
      viewModel.unsubscribeFromUnreadMessageCount()
      viewState.pollingInterval = ""
    } else {
      viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
    }
    ...

    func subscribeToUnreadMessageCount(pollingInterval: TimeInterval) {
      chatService.subscribeToUnreadMessageCount(pollingInterval: pollingInterval) { [weak self] count in
        self?.unreadMessageCount = count
      }
      isPolling = true
    }

## NowChatService - unsubscribeFromUnreadMessageCount() {#ariaid-title8}

읽지 않은 메시지 카운트 수신기 수신 구독을 취소합니다.
{#NChatServ-unsubFromUnreadMsgCount__table_inn_ywn_1qb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 없음 |   |   |
[표 13. 매개변수]

{#NChatServ-unsubFromUnreadMsgCount__table_inn_ywn_1qb} {#NChatServ-unsubFromUnreadMsgCount__table_jnn_ywn_1qb__entry__2}

| 유형 | 설명 |
|-|-|
| 없음 |   |
[표 14. 반환]

{#NChatServ-unsubFromUnreadMsgCount__table_jnn_ywn_1qb}  
다음 코드 예제에서는 이 함수를 호출하는 방법을 보여 줍니다.

    ...
    if viewModel.isPolling {
      viewModel.unsubscribeFromUnreadMessageCount()
      viewState.pollingInterval = ""
    } else {
      viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
    }
    ...
    func unsubscribeFromUnreadMessageCount() {
      chatService.unsubscribeFromUnreadMessageCount()
      isPolling = false
      unreadMessageCount = 0
    }


