Breaking Changes
LocationProvider has been replaced by the new interface OptionalLocationProvider affecting the method getLocation() in UserisCTIRoutingEnabled() to isExternalRoutingEnabled() in interface CategorygetCreatedUser() in interface TextModuleNode now returns an Optional<User> instead of UsergetLastChangedUser() in interface TextModuleNode now returns an Optional<User> instead of UsergetDeviceId() in interface AgentDeviceLoginRequest now returns an Optional<String> instead of StringAgentCallQuickCase to AgentPhoneTicketAgentCallQuickCaseStartOperation to AgentPhoneTicketStartOperationAgentCallQuickCaseStartOperationResult to AgentPhoneTicketStartOperationResultAsCallQuickCase to AgentQuickCaseOperationBuilder.AsPhoneTicketgetDuration() in interface Call - the duration of a call is provided by the CallInfo object.getRoutingDuration() in interface Call - the routing duration of a call is provided by the CallInfo object.getCallState() in interface CallBacklogHandler - the CallState is now provided by the CallQueuedCall, IncomingCall and OutgoingCall.getDialogUrl() in AgentTicketActionValidationException and corresponding constructor - the dialog url is now provided by the AgentTicketActionInterruptedException thrown be the specific validate methods of the AgentTicketActionValidatorgetDialogUrl() in AgentChatActionValidationException and corresponding constructor - the dialog url is now provided by the AgentChatActionInterruptedException thrown be the specific validate methods of the AgentChatActionValidatorgetDialogUrl() in AgentCallActionValidationException and corresponding constructor - the dialog url is now provided by the AgentCallActionInterruptedException thrown be the specific validate methods of the AgentCallActionValidatordisplayName to Public Javascript API method addTab() : function(name, displayName, url, autoSwitch)ChatStartedEventListener replaced by ChatStateEventListenerChatResubmittedEventListener replaced by ChatStateEventListenerChatClosedEventListener replaced by ChatStateEventListenerPreProcessingResult (unused)postIncomingMessage(Message,IncomingMessageInfo,Message,BacklogMessageInfo,Ticket) replaced by PostIncomingMessageListener.postIncomingMessage(PostIncomingMessageEvent)preProcess(Message, IncomingMessageInfo) replaced by TemplateMessageManipulator.manipulateTemplateMessage(TemplateMessageManipulationInput)LOGGED_OFF replaced by PhoneDeviceState.DISCONNECTEDisCloseAllowed() replaced by Category.isCloseWithoutAnswerAllowed()isTransactionCodeRequired() replaced by Category.isTransactionCodeRequiredForMail(), Category.isTransactionCodeRequiredForChat(), Category.isTransactionCodeRequiredForCall()isCloseAllowed() replaced by CategoryModifier.isCloseWithoutAnswerAllowed()setCloseAllowed(boolean) replaced by CategoryModifier.setCloseWithoutAnswerAllowed(boolean)validateCloseAllowed(boolean) replaced by CategoryModifier.validateCloseWithoutAnswerAllowed(boolean)isTransactionCodeRequired() replaced by CategoryModifier.isTransactionCodeRequiredForMail(), CategoryModifier.isTransactionCodeRequiredForChat(), CategoryModifier.isTransactionCodeRequiredForCall()setTransactionCodeRequired(boolean) replaced by CategoryModifier.setTransactionCodeRequiredForMail(boolean), CategoryModifier.setTransactionCodeRequiredForChat(boolean), CategoryModifier.setTransactionCodeRequiredForCall(boolean)validateTransactionCodeRequired(boolean) replaced by CategoryModifier.validateTransactionCodeRequiredForMail(boolean), CategoryModifier.validateTransactionCodeRequiredForChat(boolean), CategoryModifier.validateTransactionCodeRequiredForCall(boolean)getDescription() replaced by TransactionCode.getDescription(Locale)getDescription() replaced by TransactionCodeModifier.getDescription(Locale)setDescription(String) replaced by TransactionCodeModifier.setDescription(Locale, String)validateDescription(String) replaced by TransactionCodeModifier.validateDescription(Locale, String)Other Changes
sendMessage method of MessageConnector plugins will also be invoked to send mails with channel LETTER if the printout process is not handled by other custom components.Banner in UserNotificationOperationBuilder to send top screen banner notifications to agents new extension point
new method
getSentTicketCategory to get an option with the category of the ticket that caused this delivery failure message, if availablenew deprecations
isCloseAllowed() is deprecated and will be removed with the next major version. This method is replaced by isCloseWithoutAnswerAllowed().isCloseAllowed() is deprecated and will be removed with the next major version. This method is replaced by isCloseWithoutAnswerAllowed().setCloseAllowed(boolean) is deprecated and will be removed with the next major version. This method is replaced by setCloseWithoutAnswerAllowed(boolean).validateCloseAllowed(boolean) is deprecated and will be removed with the next major version. This method is replaced by validateCloseWithoutAnswerAllowed(boolean).changed behavior
false when calling the method isCloseAllowed() but true when calling the method isAnswerAllowed() now disallows only to close without answering any tickets of this category but allows the send-and-close operation. (Previously the send-and-close operation was also disallowed when the method isCloseAllowed() returned false)new methods
addAttachment(Attachment) now allows also to add an external attachment provided by an AttachmentDataSourceProvider to the currently selected mail in the novomind iAGENT Desk. The method is a backend alternative to the JS-API method NM.api.imail.agent.mail.addAttachment(scheme, uid, name).addAssignedMessageTemplate, removeAssignedMessageTemplate and getAssignedMessageTemplates to assign templates to categories.getAssignedMessageTemplates to get a list of currently assigned templates.postIncomingMessage(Message, IncomingMessageInfo, Message, BacklogMessageInfo, Ticket) is deprecated and will be removed with the next major version. This method is replaced by postIncomingMessage(PostIncomingMessageEvent).preProcess(Message, IncomingMessageInfo) is deprecated and will be removed with the next major version. This method is replaced by manipulateTemplateMessage(TemplateMessageManipulationInput) and will now return the TemplateMessageManipulationResult.getDescription() is deprecated and will be removed with the next major version. This method is replaced by getDescription(Locale) and will now return the localized description of the transaction code for the default language of the novomind iAGENT system.getDescription() is deprecated and will be removed with the next major version. This method is replaced by getDescription(Locale) and will now return the localized description of the transaction code for the default language of the novomind iAGENT system.setDescription(String) is deprecated and will be removed with the next major version. This method is replaced by setDescription(Locale, String) and will now set the localized description of the transaction code for the default language of the novomind iAGENT system.validateDescription(String) is deprecated and will be removed with the next major version. This method is replaced by validateDescription(Locale, String) and will now validate the localized description of the transaction code for the default language of the novomind iAGENT system.isTransactionCodeRequired is deprecated and will be removed with novomind iAGENT v13. This method is replaced by the module specific methods isTransactionCodeRequiredForMail, isTransactionCodeRequiredForChat, isTransactionCodeRequiredForCall.isTransactionCodeRequired will now return true if one of the new module specific methods is true, otherwise falseisTransactionCodeRequired, setTransactionCodeRequired and validateTransactionCodeRequired are deprecated and will be removed with novomind iAGENT v13. These methods are replaced by the module specific methods.isTransactionCodeRequired will now return true if one of the new module specific methods is true, otherwise falsesetTransactionCodeRequired will now call all the new module specific methodsvalidateTransactionCodeRequired will now call all the new module specific methodsSystemGroupModifier now allows to add or remove GroupPrivilegesiMail/api/rest/privileges to retrieve all visible privileges for the executing user. See API Console for more information.iMail/api/rest/groups/systemgroups/{id}/assignedprivileges to retrieve, add or remove privileges of a system group. See API Console for more information.TicketOperationBuilder provides specific operation builders e.g. to create a new ticketAgentChatInfo provided by AgentInfo for extension point
Contact or a List with the help of a ContactIdentifier.close now supports closing chatsiMail/api/rest/accounts in order to create incoming and system accounts. See API Console for more information.iMail/api/rest/accounts/{id} in order to update specific fields using HTTP PATCH. See API Console for more information.ChatChangeReconnectAck Acknowledge of successful reconnect. All following ChatChanges until ChatChangeReconnectLoaded represent the current chat history.ChatChangeReconnectLoaded End of transferred chat history.ChatChangeReconnectNack Unsuccessful reconnect to a chat e.g. due to invalid chatid and tokenpayload for ChatChangeChatstep to access custom payloads like a chatbot emotion.iMail/api/rest/search/chats in order to search past chats. See API Console for more information.Contact of a CallUserNotificationOperationBuilder to send notifications to agents provided by the
PersistencyHandler now provides a RoutingTagModifier to create a new RoutingTag.User now offers access to the following attributes: clearanceRequired, maxMails, maxChats, autoRoutingCategoryMode, manualRoutingCategoryModeUserModifier can now change the following attributes of an User: clearanceRequired, maxMails, maxChats, autoRoutingCategoryMode, manualRoutingCategoryModetag to assign routing tags to an issueBreaking Changes
long to Long of MessageInfo.getTicketIdgetDate() to getEventDate() in interfaces TicketEvent and ChatEvent defined by new common interface EventgetEventDate()getEventDate()CategoryProvider has been replaced by the new interface OptionalCategoryProvider CategoryProvider. Therefore the method getCategory() now returns an Optional<Category> instead of Category.TenantProvider. Therefore the method getTenant() now returns an Optional<Tenant> instead of Tenant.getAttributes() in the SimpleMessage Interface has been removed. Please use getIntermediateStorage() from the NextMessageInfo Interface com.novomind.ecom.api.imail.routing.workflow to com.novomind.ecom.api.iagent.routing.workflowOther Changes
requeue to requeue a ticket currently assigned to an agentUser now offers access to the assigned RoutingTags (see getRoutingTags)ContactIdentifier for incoming messages or queued calls via the SimpleMessage (see getContactIdentifier), ExtendedMessage (see getContactIdentifier) or QueuedCallEnqueuedEvent (see getContactIdentifier). The information will be used as secondary search criterion for searching existing contacts.MessageConnector. Replaces MailMessageConnector in the future.AgentTicketRecategorizeAction for extension point
AgentQueuedCallInfo provided by AgentInfo for extension point
AgentFolderInfo provided by AgentInfo for extension point
close
internalForward and resubmit
Breaking Changes
ecom-api-imail has been removed. The contents are now part of ecom-api-iagent. The java packages did not change. If you resolved ecom-api-imail in your plugins, please change it to ecom-api-iagent starting with v11.0.set*() methods of the interface IntermediateStorage have changed from the return type Storage to the new return type IntermediateStorage. If you are using any of these methods in your plugins, please recompile and redeploy your apps when updating to v11.0.getAttachments() of the interface MailMessage has changed from Map<String, BodyPart> to the new return type Set<MessageAttachmentDataSource>. If you are using this method of MailMessage in your plugins, please adapt to this change when updating to v11.0./categories, /users, /holidays and /businesshours was removed. The services now return changed responses. See API Console for more information on the responses./categories has changed. /categories/categories can now be used to get categories withtout maincategories. /categories/maincategories can now be used to get the maincategories.Other Changes
dataType: EncryptedStringguiTypes: password and secret