NowChatService クラス - iOS
NowChatService クラスは、仮想チャット機能とライブエージェントチャット機能を提供します。
このクラスを使用すると、チャットサービスの開始と停止、チャットセッションの開始、チャットユーザーインターフェイスの作成、未読メッセージの登録/登録解除を行うことができます。
| 名前 | Description (説明) |
|---|---|
| 構成 | サービスが初期化されたときに指定された構成設定。 データ型: NowServiceConfiguration |
| instanceVersion | 関連付けられた ServiceNow インスタンスのバージョン (utah や Quebec など)。 データタイプ:文字列 |
| ネットワークサービス | このチャットサービスに関連付けられたネットワークサービス。 データ型: NetworkService |
| セッションタイプ | セッションのタイプ。 可能な値:
データタイプ:SessionType |
NowChatService - init(configuration: NowServiceConfiguration, delegate: NowChatServiceDelegate?, coreServiceProvider: NowCoreServiceProviding? = nil)
新しい NowChatService インスタンスを初期化します。
| 名前 | タイプ | Description (説明) |
|---|---|---|
| 構成 | NowServiceConfiguration | サービスを適切に初期化するために必要な構成情報。 |
| 代理人 | NowChatServiceDelegate | オプション。NowChatServiceDelegate プロトコルを実装する NowChat コールバックデリゲートオブジェクト。 デフォルト:nil |
| coreServiceProvider | NowCoreServiceOffering | オプション。NowCoreServiceProviding プロトコルを実装するオブジェクト。NowChat サービスへのアクセスを提供します。 デフォルト:nil |
次のコード例は、この関数を呼び出す方法を示しています。
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>)
チャット ユーザー インターフェイスをホストする UIViewController を作成します。
この関数はチャット UI を作成しますが、 startChat() 関数を呼び出してチャットセッションを開始する必要があります。この呼び出しは、チャット UI が表示されたときに行う必要があります。詳細については、関連するサンプルアプリケーションと Mobile SDK 開発者ガイド - iOSを参照してください。
| 名前 | タイプ | Description (説明) |
|---|---|---|
| theme | NowChatThemeable オブジェクト | 作成するチャット UI のテーマ情報。 |
| チャットオプション | NowChatOptions? | オプション。チャットセッションに適用するオプション。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | 成功: UI ビュー コントローラーの構成情報を含む UIViewController オブジェクト。 失敗:NowChatServiceError オブジェクト。 考えられるエラー:
|
次のコード例は、この関数を呼び出す方法を示しています。
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()
アクティブなチャットセッションを含むチャットサービスをシャットダウンします。
この関数を呼び出した後、関連付けられた NowChatService は非アクティブになり、再利用できなくなります。別のチャットセッションを確立するには、NowChat.makeChatService() 関数を呼び出して新しい NowChatService インスタンスを作成します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
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: [文字列: 任意]?)
チャットセッションを開始します。
| 名前 | タイプ | Description (説明) |
|---|---|---|
| コンテキストデータ | [文字列:任意]? | オプション。チャットセッションに渡されるチャットコンテキスト変数を含む辞書。 チャットコンテキスト変数の詳細については、「 Live agent chat context variables」を参照してください。 |
| タイプ | Description (説明) |
|---|---|
| void または String | 成功:void エラー:NowChatServiceError 考えられるエラー:
|
次のコード例は、コンテキスト変数を渡さずにこの関数を呼び出す方法を示しています。
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>))
チャットセッションを開始し、チャットセッションの開始後に完了ブロックを実行します。
| 名前 | タイプ | Description (説明) |
|---|---|---|
| コンテキストデータ | [文字列:任意]? | オプション。チャットセッションに渡されるチャットコンテキスト変数を含む辞書。 チャットコンテキスト変数の詳細については、「 Live agent chat context variables」を参照してください。 |
| 完了 | オブジェクト | チャットセッションの開始後に実行する完了ブロック。 |
| タイプ | Description (説明) |
|---|---|
| void または String | 補完ブロックの戻り値:
考えられるエラー:
|
次のコード例は、コンテキスト データなしでこの関数を呼び出す方法を示しています。
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)
未読メッセージ数リスナーに登録します。
| 名前 | タイプ | Description (説明) |
|---|---|---|
| pollingInterval | 時間間隔 | 未読チャットメッセージ数について Web サービスをポーリングする頻度。 単位:秒 |
| 完了 | @escaping (int) -> void) | 未読チャットメッセージ数を報告するために呼び出す完了ハンドラー。 Int:未読のチャットメッセージの数。 |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
…
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()
未読メッセージ数リスナーの受信を登録解除します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、この関数を呼び出す方法を示しています。
…
if viewModel.isPolling {
viewModel.unsubscribeFromUnreadMessageCount()
viewState.pollingInterval = ""
} else {
viewModel.subscribeToUnreadMessageCount(pollingInterval: timeInterval)
}
…
func unsubscribeFromUnreadMessageCount() {
chatService.unsubscribeFromUnreadMessageCount()
isPolling = false
unreadMessageCount = 0
}