---
sourceDocument: Xanadu API リファレンス
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - ja-JP

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) 所要時間：13分

NowChatService クラスは、仮想チャット機能とライブエージェントチャット機能を提供します。

このクラスを使用すると、チャットサービスの開始と停止、チャットセッションの開始、チャットユーザーインターフェイスの作成、未読メッセージの登録/登録解除を行うことができます。
{#NowChatServiceiOSAPI__entry__2}

| 名前 | Description (説明) |
|-|-|
| 構成 | サービスが初期化されたときに指定された構成設定。 データ型: [NowServiceConfiguration](https://servicenow-prod.fluidtopics.net/stoU_DsvecOSpmkh8Wo3FA#NowServiceConfigurationiOSStruct "NowServiceConfiguration 構造体は、フィーチャ サービスの構成情報を定義します。") |
| instanceVersion | 関連付けられた ServiceNow インスタンスのバージョン (utah や Quebec など)。 データタイプ：文字列 |
| ネットワークサービス | このチャットサービスに関連付けられたネットワークサービス。 データ型: NetworkService |
| セッションタイプ | セッションのタイプ。 可能な値： * 認証 * 客 * 偽装 * 不明 データタイプ:SessionType |
[表 : 1. プロパティ]

## NowChatService - init(configuration: NowServiceConfiguration, delegate: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = nil) {#ariaid-title2}

新しい NowChatService インスタンスを初期化します。
{#NChatServ-init_O_S_S__table_jgv_vqp_npb__entry__3}

| 名前 | タイプ | Description (説明) |
|-|-|-|
| 構成 | [NowServiceConfiguration](https://servicenow-prod.fluidtopics.net/stoU_DsvecOSpmkh8Wo3FA#NowServiceConfigurationiOSStruct "NowServiceConfiguration 構造体は、フィーチャ サービスの構成情報を定義します。") | サービスを適切に初期化するために必要な構成情報。 |
| 代理人 | NowChatServiceDelegate | オプション。NowChatServiceDelegate プロトコルを実装する NowChat コールバックデリゲートオブジェクト。 デフォルト:nil |
| coreServiceProvider | NowCoreServiceOffering | オプション。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(theme: NowChatThemeable, chatOptions: NowChatOptions? = nil) -\> Result\<UIViewController, NowChatServiceError\>) {#ariaid-title3}

チャット ユーザー インターフェイスをホストする `UIViewController` を作成します。
この関数はチャット UI を作成しますが、 startChat() 関数を呼び出してチャットセッションを開始する必要があります。この呼び出しは、チャット UI が表示されたときに行う必要があります。詳細については、関連するサンプルアプリケーションと [Mobile SDK 開発者ガイド - iOS](https://servicenow-prod.fluidtopics.net/9cW8sX2D0JqVvoccwJ~L9g "ServiceNow Mobile SDKを使用すると、スタンドアロンのモバイル iOS アプリケーション内で ServiceNow プラットフォームの機能とリソースを活用できます。")を参照してください。
{#NChatServ-makeChatUI_O__table_lkt_lvj_npb__entry__3}

| 名前 | タイプ | Description (説明) |
|-|-|-|
| theme | NowChatThemeable オブジェクト | 作成するチャット UI のテーマ情報。 |
| チャットオプション | [NowChatOptions?](https://servicenow-prod.fluidtopics.net/MBGuSsgZh_m4wLIsCkGb2g#NowChatOptionsiOS "NowChatOptions クラスを使用すると、チャット セッションで、チャット ウィンドウを閉じる前にプロンプトを表示したり、チャットの使用中に機能を無効にしたりするなどのオプションを構成できます。") | オプション。チャットセッションに適用するオプション。 |
[表 : 3. パラメーター]

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

| タイプ | 説明 |
|-|-|
| オブジェクト | 成功: UI ビュー コントローラーの構成情報を含む UIViewController オブジェクト。 失敗:NowChatServiceError オブジェクト。 考えられるエラー: * chatServiceInvalid * coreServiceInvalid * ゲストユーザーは許可されていません * 無効な認証情報 * セッションなし * 不明 * サポートされていないサーバー |
[表 : 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: \[文字列: 任意\]?) {#ariaid-title5}

チャットセッションを開始します。
注:  
チャットセッションの開始後に完了タスクを実行する場合は、 [NowChatService - startChat(contextData: \[String: Any\]? = nil, _ completion: @escaping (結果\<Void, NowChatServiceError\>))](uK_YWAqQnCmvhjbRtyg3Bw#NChatServ-startChat_O "チャットセッションを開始し、チャットセッションの開始後に完了ブロックを実行します。") 機能を使用します。
{#NChatServ-startChat__table_myg_12k_npb__entry__3}

| 名前 | タイプ | Description (説明) |
|-|-|-|
| コンテキストデータ | \[文字列:任意\]? | オプション。チャットセッションに渡されるチャットコンテキスト変数を含む辞書。 チャットコンテキスト変数の詳細については、「 [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}

| タイプ | Description (説明) |
|-|-|
| void または String | 成功:void エラー:NowChatServiceError 考えられるエラー: * chatServiceInvalid * coreServiceInvalid * ゲストユーザーは許可されていません * 無効な認証情報 * セッションなし * 不明 * サポートされていないサーバー |
[表 : 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, _ completion: @escaping (結果\<Void, NowChatServiceError\>)) {#ariaid-title6}

チャットセッションを開始し、チャットセッションの開始後に完了ブロックを実行します。
{#NChatServ-startChat_O__table_tk1_bbk_npb__entry__3}

| 名前 | タイプ | Description (説明) |
|-|-|-|
| コンテキストデータ | \[文字列:任意\]? | オプション。チャットセッションに渡されるチャットコンテキスト変数を含む辞書。 チャットコンテキスト変数の詳細については、「 [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}

| タイプ | Description (説明) |
|-|-|
| void または String | 補完ブロックの戻り値: * 成功:void * エラー:NowChatServiceError 考えられるエラー: * chatServiceInvalid * coreServiceInvalid * ゲストユーザーは許可されていません * 無効な認証情報 * セッションなし * 不明 * サポートされていないサーバー {#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, completion: @escaping (Int) -\> Void) {#ariaid-title7}

未読メッセージ数リスナーに登録します。
{#NChatServ-subToUnreadMsgCount_S__table_pv1_3ln_1qb__entry__3}

| 名前 | タイプ | Description (説明) |
|-|-|-|
| pollingInterval | 時間間隔 | 未読チャットメッセージ数について Web サービスをポーリングする頻度。 単位：秒 |
| 完了 | @escaping (int) -\> void) | 未読チャットメッセージ数を報告するために呼び出す完了ハンドラー。 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
    }


