You are a heavy user/customer of Domo.
You could also be one of Domo partners and official resellers that have multiple clients on your platform.
You have connected to many data sources using the existing connectors.
You have new datasets coming in from your organization or from your client’s systems.
You want to connect to a data source for which the built-in connector is not yet available in DOMO’s marketplace.
You want to fetch your data in the different format than what is provided by existing connectors.
You are planning to use DOMO’s platform and looking for resources to handle the technicality of bringing data from your data source to DOMO.
You ultimately want to build a Domo custom connector to save your time and money.
If these are the problems you face, you have come to the right place.
Table of Contents
Connecting Your data to DOMO
If you want to read my opinions about Domo, I’ve laid them out in detail from an analyst and an end user (client) perspective both while comparing it with other best dashboard softwares
With over 500+ ready connectors and expanding, this software has almost an exhaustive list of ready connectors to use.
Domo’s proprietary platform provides quick and easy connections to your on-premise databases, cloud applications, spreadsheets, files, and more. You can connect to a variety of sources using Domo’s Workbench, CSV upload, OLAP & ODBC Connectors, and Domo’s published APIs.
What is a Domo Custom Connector & Why to Build it?
If DOMO’s marketplace doesn’t have in-built connector for a platform where your data resides or you don’t want to use DOMO’s marketplace and want to build your own connector for a particular platform, you can create your own connector to dynamically bring your data with the use of API’s into Domo using DOMO’s IDE.
There are hundreds if not thousands of software or custom software’s with your relevant data that you or your clients can be used but are not yet able to add it inside Domo due to the lack of a connector.
After completing the Domo custom connector, it will send data to Domo databases at any set time interval and will be fully automated henceforth, which is the biggest advantage and time save here.
This is how a custom connector can be built to help bridge the gap & we can help with our technical team in getting it done. You can get in touch here to discuss more.
Examples of Custom connectors built
We have built a number of custom connectors for our clients, most of them from a data source for which DOMO doesn’t provide connectors and some of them rebuilt in order to suit client’s need.
You can see the names and APIs of some of the major platforms for which we have built custom connectors below:
We are in process of building more connectors for our clients as per requirements all the time and have a technical team who is proficient in the same.
You can either hire us to get it done at extremely competitive rates for lifetime automated connector built for you or build it yourself. We have shared some basic technical details below that we used in building the connectors also.
Steps to create Domo Custom Connectors
The high-level process of building a custom connector is as follows:
- Understanding your connector’s API and Domo API
- Building the technical aspects of the Connector (Read more on technical overview)
- Test the connector using console data
- Publish the connector for approval by Domo Connector team
- Once approved, find it in your connectors list and use the data
- If not approved, keep correcting the issues and publish again until approved
The approval process after publishing the connector takes around 1-2 weeks depending on the complexity of the same and the Domo connector team’s responses. You can keep communicating with them to expedite the process. It does help if you are a Domo partner, as they will give you the priority.
If you want to build your own custom connector, you can follow the in-depth documentation given by Domo itself and some of our tips below.
It’s a different procedure for each API as it will be unique based on its documentation and compatibility with Domo’s API.
Note: Technical details below, you can stop reading if you are not interested in deep tech details here.
Domo Custom Connectors: Technical Overview
After logging into DOMO, navigate here
The link will take to the DOMO’s IDE page where you can start building your own custom connectors.
Click on “Create New Connector” tab to begin developing your new connector.
Important to note: while the IDE runs your code client side in your chosen browser, your deployed code will run in the Nashorn engine found in Java 8. Specifically, please use ES5, as ES6 is not supported in the IDE. See the ECMAScript Language Specification for details.
For example, Xmlhttprequest is not supported you will need to use httprequest in its place. Sample call:
httprequest.get(‘https://samplecrm.domo.com/samplecrm‘);
There are four main important parts to this:
- Uploading Connector Images
- Configure User Authentication
- Configure Selectable reports
- Define how data is processed
They are described in detail below for your reference if you want to build the connector yourself.
-
Uploading Connector Images:
It is important to identify your connector by providing images. The specifications for the four different icons are detailed above the sample images in the Studio.
If you want to get started now, the four images you need for a connector are:
- Icon with background (512 x 512 pixels)
- Icon, no background (512 x 512 pixels)
- Logo with background (512 x 512 pixels)
- Logo banner, no background (1024 x 512 pixels)
Note: Icons are required in order to publish your connector.
2. Configure User Authentication:
The connector builder provides four different Authentication Method:
- None when the API does not require any authentication. Even when the connection does not require you to authenticate, the IDE still requires that you put auth.authenticationSuccess() in the authentication block of the IDE.
- Username with password is most commonly used with Basic Authentication. When authenticating with Basic Authentication the user passes an Authorization header with a Base64Encoded <username>:<password>. Example:
“ httprequest.addHeader(‘Authorization’, ‘Basic ‘ + DOMO.b64EncodeUnicode(metadata.account.username + ‘:’ + metadata.account.password)); ”
c. API Key is generally a non-expiring key or token passed in as a header or a query parameter. Example:
httprequest.addHeader(‘API-KEY’, metadata.account.apikey); or
httprequest.get(‘https://samplecrm.domo.com/samplecrm?apikey=’ + apikey);
d. OAuth2 uses a client-side and server flow to generate token to authenticate to an API. For detailed information on OAuth2.
Consult the API documentation for the API you are using to determine the best way to configure this.
- The redirect URI for the connector IDE is https://api.domo.com/builder/oauth.html
- The CallBack URL response body needs to be JSON
- The AccessToken key needs to be access_token.
At the end of the code blocks you to set auth.authenticationSuccess(); or auth.authenticationFailed(‘Your username and password are incorrect’);
3. Configuring Selectable Reports:
Connectors are comprised of a series of reports, which define groups of data that a user will select when using this connector in Domo. You will need to define the reports for your connector in this step
You can add custom parameters to your reports by enabling advanced mode.
Click on the “Add Parameter” button, and then enter a name and description for the new parameter. The help text description will be very helpful in helping a foreign user identify what exactly this report is providing them. Custom parameters are used in the “Define how data is processed” section.
In order to access the value of a given parameter, you can use the following syntax:
metadata.parameters[“Parameter Name”]
To understand different parameters type, Please refer https://developer.domo.com/docs/custom-connectors/advanced-mode.
4. Data Processing
Data Processing script example.
——————————————–
DOMO.log(‘metadata.report: ‘ + metadata.report); //Opportunities
if(metadata.report == ‘Opportunities’){
httprequest.addHeader(‘Authorization’, ‘Basic ‘ + DOMO.b64EncodeUnicode(metadata.account.username + ‘:’ + metadata.account.password));//example of how to access “Pull data from the last x day(s)” value:
//var res = httprequest.get(‘https://samplecrm.domo.com/samplecrm?days=’ + metadata.days);
var res = httprequest.get(‘https://samplecrm.domo.com/samplecrm’);
DOMO.log(‘res: ‘ + res);
var lines = res.split(‘r’);
var header = lines[0].split(‘,’);//There are three data types: datagrid.DATA_TYPE_STRING, datagrid.DATA_TYPE_DOUBLE and datagrid.DATA_TYPE_DATETIME
// date format needs to be yyyy-MM-dd’T’HH:mm:ss
datagrid.addColumn(‘Account.Id’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Account.Industry’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Account.Name’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Amount’, datagrid.DATA_TYPE_DOUBLE);
datagrid.addColumn(‘CloseDate’, datagrid.DATA_TYPE_DATETIME);
datagrid.addColumn(‘CloseDate’, datagrid.DATA_TYPE_DATETIME);
datagrid.addColumn(‘Id’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘IsClosed’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘IsWon’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘LastActivityDate’, datagrid.DATA_TYPE_DATETIME);
datagrid.addColumn(‘LastModifiedDate’, datagrid.DATA_TYPE_DATETIME);
datagrid.addColumn(‘LeadSource’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Name’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘NextStep’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Probability’, datagrid.DATA_TYPE_DOUBLE);
datagrid.addColumn(‘StageName’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Type’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘ForecastCategoryName’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Strategic_Account__c’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Forecasted_ACV__c’, datagrid.DATA_TYPE_DOUBLE);
datagrid.addColumn(‘Competitor__c’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.CreatedDate’, datagrid.DATA_TYPE_DATETIME);
datagrid.addColumn(‘Owner.Email’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.FullPhotoUrl’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.Id’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.IsActive’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.Manager’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.Name’, datagrid.DATA_TYPE_STRING);
datagrid.addColumn(‘Owner.UserRole.Name’, datagrid.DATA_TYPE_STRING);for(var i = 1; i < lines.length; i++){
console.log(‘line: ‘ + lines[i]); ///For heavy logging use browser console logging
var rows = lines[i].split(‘,’);
for(var j = 0; j < rows.length; j++){
if(j == 4){datagrid.addCell(rows[j] + ‘T00:00:00’);}
else if(j == 9){datagrid.addCell(rows[j] + ‘T00:00:00’);}
else{datagrid.addCell(rows[j]);}
}
datagrid.endRow();
}
} else {
DOMO.log(metadata.report + ‘ is not a supported report.’);
datagrid.error(0, metadata.report + ‘ is not a supported report.’);
}
—————————————————-
See the reference section for specifics.
If you have read till here, hope all the tech and high-level details have helped you in building your Domo custom connectors. If you need any help, you can get in touch with us or ask us in comments below.
Note: Contributions on development done by Vishnu Yadav
Leave a Reply