--- title: Default input and output rich controls for a custom chat integration description: Input and output rich controls must be mapped to your custom chat integration in the Custom Adapter Configurations \[sys\_cs\_custom\_adapter\_config\] table. If a rich control is missing an outbound transformer implementation, a response is not served to the end user and that user may get an unsatisfactory chat experience. locale: en-US canonical_url: https://www.servicenow.com/docs/r/australia/conversational-interfaces/virtual-agent/default-rich-controls-va-cccif.html release: australia product: Virtual Agent classification: virtual-agent topic_type: reference last_updated: "2026-03-12" reading_time_minutes: 5 breadcrumb: [Conversational custom chat integrations, Integrate VA with other channels, Virtual Agent, Conversational Interfaces] --- # Default input and output rich controls for a custom chat integration Input and output rich controls must be mapped to your custom chat integration in the Custom Adapter Configurations \[sys\_cs\_custom\_adapter\_config\] table. If a rich control is missing an outbound transformer implementation, a response is not served to the end user and that user may get an unsatisfactory chat experience. The following default rich controls map to input and output rich controls. The **uiType** parameter refers to a topic control used to build conversations in Virtual Agent Designer.
Rich control Description
ActionRichControl This component handles the different events and actions that occur in a conversation. Some actions may not apply to all channels. For example, StartSpinnerActionMsg is ignored in SMS.ServiceNow® Virtual Agent produces the following types of action messages through this framework. The custom chat interface only recognizes certain action message types. - SeparatorActionMsg \|\|actionMsg instanceof - SystemActionMsg \|\|actionMsg instanceof - TopicFinishedActionMsg \|\|actionMsg instanceof - SwitchToVirtualAgentActionMsg \|\|actionMsg instanceof - SwitchConversationActionMsg \|\|actionMsg instanceof - ChatSubHeaderActionMsg \|\|actionMsg instanceof - StartSpinnerActionMsg \|\|actionMsg instanceof EndSpinnerActionMsg - SubscribetoSupportQueue \|\|actionMsg instanceof - SubscribeToChatPresence \|\|actionMsg instanceof - SwitchToLiveAgentActionMsg \|\|actionMsg instanceof ActionRichControl wraps these messages inside the **actionMsg** element. So, a single outbound transformer for ActionRichControl can handle all of these messages. There is no need for an inbound transformer for this component.
**agentInfo** parameter If the rich control is sent from a live agent, then the **agentInfo** attribute is added to the rich control.Example: ``` { uiType: "someType", group: "someGroup" agentInfo: { sentFromAgent: true } // please note that this object may contain more info in subsequent releases. ... } ```
DefaultPicker Maps to [File Picker](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-file-picker.md), Topic Picker, and [Boolean](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-boolean-user-input.md) controls.Example: ``` { uiType: "Picker/TopicPicker/Boolean", group: "DefaultPicker", nluTextEnabled: true/false, promptMsg: "", // optional (needed for TopicPicker) label: "The question for the list", // always filled itemType: "Picture/List" // needed to user key to expect picture attached options: [ { label: "display label prompt", value: "the value required to satisfy the question", description: "a description of value_1 item" attachment: "www.foo", enabled: true/false }, ... ] } ``` The optional **order** parameter lets you specify the order in which promoted topics should display. For example: ``` "options": [ { label: "Check IT Ticket Status", value: "55720b465bf0201024f11fc40a81c72d", order: 100, enabled: true }, { label: "Live Agent Support", value: "ce2ee85053130010cf8cddeeff7b12bf", order: 200, enabled: true }, { label: "Open IT Ticket 2", value: "2a46cffbc7602010v088bbf603c260a7", order: 300, enabled: true } ] ```
DefaultText Maps to [Input Text](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-text-input.md), [Output Text](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-text-response.md), and File Upload controls.Example: ``` { uiType: "InputText/OutputText/FileUpload/Picture", group: "DefaultText", required: true/false, nluTextEnabled: true/false, itemType: "file/image/inputtext/outputtext", maskType: "SECURE/SENSITIVE/NONE" // null except for InputText/OutputText label: "The Question?" } ```
DefaultDate Maps to [Date and Time](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-date-time-input.md) controls.``` { uiType: "Date/DateTime/Time", group: "DefaultDate", required: true/false, nluTextEnabled: true/false, label: "The Question?" } ```
DefaultOutputLink Maps to [link response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-link-output.md) controls.Example: ``` { uiType: "OutputLink", group: "DefaultOutputLink", label: "link label", header: "link header", type: "link", value: { action: "www.foo", } } } ```
DefaultOutputImage Maps to [image response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-image-output.md) controls.Example: ``` { uiType: "OutputImage", group: "DefaultOutputImage", value: "www.foo" } ```
DefaultOutputCard Maps to [card response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-card-output.md) controls.Example: ``` { uiType: "OutputCard", group: "DefaultOutputCard", templateName: "Card", data: "some json data string" } ```
DefaultOutputHtml Maps to [HTML response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-html-output.md) controls.Example: ``` { uiType: "OutputHtml", group: "DefaultOutputHtml", style: "inline", height: 100, width: 100, value: "
html
" } ```
DefaultOutputTable Maps to [table response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/table-bot-response.md) controls.Example: ``` { uiType: "OutputTable", group: "DefaultOutputTable", label: "Table Title", headers: ["Column 1", "Column 2"], navigationBtnLabel: "See next", data: [ ["foo1", "foo2"], ["bar1", "bar2"] ] } ```
DefaultGroupedPartsOutputControl Maps to [multi-response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-multi-flow-output.md) controls.Example: ``` { uiType: "GroupedPartsOutputControl", group: "DefaultGroupedPartsOutputControl" groupPartType: "Link", header: "header message", values: [ { action: "www.foo", description: "description", label: "link_1 label", context: "ITSM" }, ... ] } ```
DefaultMultiPartOutput Maps to [multi-response](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-multi-flow-output.md) controls.Example: ``` { uiType: "MultiPartOutput", group: "DefaultMultiPartOutput" navigationBtnLabel: "Go next", content: { uiType: "OutputHtml", style: "inline", type: "html", height: 100, width: 100, value: "
html
" } } ```
DefaultCustomControl Maps to [custom controls](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-custom-control-util.md).Example: ``` { uiType: "CustomControl", group: "DefaultCustomControl", name: "The name of the Custom Control (sys_cs_custom_control.name)", required: true/false, uxComponentDefinitionSysId: "seismicComponentId" // or null if not isInput: true/false, // whether to wait for a response value or if just output serializedControlData: "User defined JSON from generateControlData function"; } ```
**Parent Topic:**[Creating conversational custom chat integrations in Virtual Agent](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/conversational-interfaces/virtual-agent/va-custom-adapter-framework.md)