Data Messenger is a conversational user interface (CUI). It is a flexible iOS widget that can be implemented and accessed within an existing application or software interface. Data Messenger enables users to interact conversationally with their data by entering natural language queries to receive information from their database (or more simply, allows users to ask questions in their own words to receive data-related responses).
Throughout this document, the words "Data Messenger" and "Widget" are used interchangeably. All widget components are open source, so Data Messenger is highly customizable in terms of both function and design.
iOS 8 or later.
The following sections in this document contain detailed information about how to customize the properties of the widget.
To run the example project, clone the repo, and run
pod install from the Example directory first.
- Data Messenger is available through CocoaPods. To install it, begin by adding the following line to your Podfile:
- Next, add
import autoqlto your controller
- Call DataMessenger()
let dataChat = DataMessenger( authentication: authentication( apiKey: "YourApiKey", domain: "YourDomain", token: "YourToken"), projectID: "YoutProjectID")
- Show DataMessenger
dataChat.show(YourView) // for access to props, use .config dataChata.config.userDisplayName = "Chata"
|Prop Name||Data Type||Default Value|
|placement||string: "Top" || "Bottom" || "Left" || "Right"||"Right"|
|introMessage||String||"Hi there! Let's dive into your data. What can I help you discover today?"|
|inputPlaceholder||String||"Type your queries here"|
|theme||String: "light" || "dark"||"light"|
isVisible: Determines whether the Bubble Handle view is visible on the screen or not.
//isChecked is a Boolean bubbleHandle.isVisible = isChecked
placement: Determines the edge of the screen where Bubble Handle is placed.
//placement is an Integer //config.placement = "Top" || "Bottom" || "Left" || "Right"
title: Text that appears in the header of the default Data Messenger view. You must provide an empty string if you do not want text to appear here, otherwise the default text (Data Messenger) will apply.
//title is a String config.title = "Your Title"
userDisplayName: Name used in the intro message (example. "Hi Carlos!"). You can customize this value using names from your own database or identity implementation.
//userDisplayName is a String config.userDisplayName = "Your Display Name"
introMessage: Customize the default intro message using your own brand voice and custom copy. The userDisplayName prop will be ignored if this is provided.
//introMessage is a String config.introMessage = "Your intro Message"
inputPlaceholder: Customize the placeholder for the Query Input (natural language query search bar).
//inputPlaceholder is a String config.inputPlaceholder = "Your input Placeholder"
maxMessages: Maximum number of messages that can be displayed in the Data Messenger interface at one time. A message is any input or any output in the interface. This means a query entered by a user constitutes one message, and the response returned in the Data Messenger interface constitutes another message. If a new message is added and you have reached the maximum, the oldest message will be erased.
//maxMessages is a Int config.maxMessages = maxMessages
enableVoiceRecord: Enable the speech to text button.
Note: The speech to text function uses SpeechRecognizer which works when the "Manifest.permission.RECORD_AUDIO" permission is accepted by the user.
//enableVoiceRecord is a Boolean config.enableVoiceRecord = enableVoiceRecord
theme: Color theme for Data Messenger. There are currently two options: light theme and dark theme. For a light theme, we will use 'light' and for a dark theme, we will use 'dark'.
//theme is a String "light" else "dark" config.theme = theme
|Key||Data Type||Default Value|
enableAutocomplete: Automatically populates similar query suggestions as users enter a query, so they get results more quickly and easily. If enabled, suggested queries will begin to appear above the Query Input bar as the user types.
//enableAutocomplete is a Boolean config.autoQLConfig.enableAutocomplete = enableAutocomplete
enableQueryValidation: Catches and verifies references to unique data, so users always receive the data they need. If enabled, the natural language query entered by a user will first go through the validate endpoint. If the query requires validation (ex. the input contains reference to a unique nominal data), suggestions for that labeled data will be returned in a subsequent message, allowing the user to verify their input before executing their query.
//enableQueryValidation is a Boolean config.autoQLConfig.enableQueryValidation = enableQueryValidation
For example: If you query, 'How much money does Carlos owe me?', validation may detect that there is no 'Carlos' label, but there are labels called 'Karlo', and 'carlo' in your database. The message will then let you select the appropriate label and run the corresponding query.
If this value is false, the query will bypass the validate endpoint and be sent straight to the query endpoint.
enableQuerySuggestions: Enables option for user to clarify meaning in cases where their original query lacked context or could be interpreted in multiple separate ways. If enabled, in cases where the query input was ambiguous, a list of suggested queries will be returned for the user to choose from, leading to more efficient and accurate responses. If this is false, a general error message will appear in its place.
//enableQuerySuggestions is a Boolean config.autoQLConfig.enableQuerySuggestions = enableQuerySuggestions
enableDrilldowns: When a table or chart element is clicked by a user, a new query will run automatically, allowing the user to "drilldown" into the data to obtain a detailed breakdown of the figure returned by entry. If this is false, nothing will happen when a table or chart element is clicked.
//enableDrilldowns is a Boolean config.autoQLConfig.enableDrilldowns = enableDrilldowns
enableColumnVisibilityManager: Column Visibility Manager allows the user to control the visibility of individual columns when query results are returned in a table. Users can access the Column Visibility Manager to adjust their visibility preferences by clicking the "eye" icon in the Options Toolbar and selecting or deselecting columns. Once set, visibility preferences will be persisted. Any future query containing columns that were previously shown or hidden by the user will also reflect these changes. The user can access the Column Visibility Manager to make changes to these visibility preferences at any time.
//enableColumnVisibilityManager is a Boolean config.autoQLConfig.enableColumnVisibilityManager = enableColumnVisibilityManager
|Key||Data Type||Default Value|
|dayMonthYearFormat||String||"MMM DD, YYYY"|
currencyCode: If your data is not in USD, you can specify a different ISO 4217 currency code here. All visualizations (tables and charts) will show the default currency formatting for the specified code.
//currencyCode is a String config.dataFormatting.currencyCode = currencyCode
languageCode: If the currency code from your country requires letters not contained in the English alphabet, set this to the appropriate IETF language tag to import the necessary characters.
//languageCode is a String config.dataFormatting.languageCode = languageCode
currencyDecimals: Number of digits to display after a decimal point for currencies.
//currencyDecimals is an Integer config.dataFormatting.currencyDecimals = currencyDecimals
quantityDecimals: Number of digits to display after a decimal point for quantity values.
//quantityDecimals is a Int config.dataFormatting.quantityDecimals = quantityDecimals
monthYearFormat: The format to display the representation of a whole month. AutoQL uses SimpleDateFormat("format", Locale.US). Reference can be found here.
//monthYearFormat is a String config.dataFormatting.monthYearFormat = monthYearFormat
dayMonthYearFormat: The format to display the representation of a single day. (ie. March 18, 2020). AutoQL uses SimpleDateFormat("format", Locale.US). Reference can be found here.
//dayMonthYearFormat is a String config.dataFormatting.dayMonthYearFormat = dayMonthYearFormat
Updated almost 3 years ago