Passing context variables to Live Agent and Virtual Agent chat
Summarize
Summary of Passing Context Variables to Live Agent and Virtual Agent Chat
ServiceNow allows you to pass context variables to Live Agent and Virtual Agent chat sessions using thecontextDataparameter. This enhances the chat experience by providing relevant information at the start of the session.
Show less
Key Features
- Context Data: Pass relevant context variables during the chat session initiation using
NowChatService - startChat. - Chat Configuration: Modify chat behavior with optional parameters like
closePrompt,disabledFeatures, andconversationOptions. - Close Prompt: Customize the prompt that appears before closing the chat window through header, message, and button titles.
- UI Configuration: Tailor UI components such as close button and attachment upload options for a better user experience.
Key Outcomes
By effectively using context variables and chat configurations, ServiceNow customers can enhance user engagement, streamline chat interactions, and provide a more personalized support experience. Expect smoother chat sessions with the ability to control UI elements and behaviors tailored to your organization’s needs.
You can pass chat context variables when starting a chat session by passing the contextData parameter.
You can pass this value using the NowChatService - startChat(contextData: [String: Any]? = nil, _ completion: @escaping (Result<Void, NowChatServiceError>) -> Void) functions.
For additional information on chat context variables, see Live agent chat context variables.
In addition, you can also pass an optional NowChatConfiguration parameter when starting a chat session to modify some of the behavior of NowChat.
- closePrompt: Prompt text that appears before exiting a chat window. You define this prompt text through the following parameters:
- header: Nullable string value that appears on the prompt’s header.
- message: String value that appears on the prompt’s main body.
- acceptButtonTitle: String value that appears on the primary button of the prompt. This button closes the chat window.
- declineButtonTitle: String value that appears on the secondary button of the prompt. This button dismisses the prompt without closing the chat window.
- disabledFeatures: List of NowChat features to disable. Refer to the NowChatConfiguration.Feature enum class for the list of features that you can disable.
- conversationOptions: List of conversation options to apply to NowChat. Refer to the NowChatConvestation.ConversationOption enum class for the list of options that you can apply.
- uiConfiguration: UIConfiguration value used to configure UI components in NowChat.
// 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()
}
}