Skip to content

Configuring your adapter

The developer framework is currently in BETA

This framework is in beta. Please submit a Github issue if you encounter any problems or have a question.

Each adapter provides a configuration that in some ways also acts as a manifest file. The config file not only provides key pieces of metadata to enable the framework to connect to the CRM, and display other properties to the user (name and so forth), but it also allows developers to customize the appearance of screens, add custom fields to various CRM object types, and more. Here is a list of things the config file enables for developers:

  • Provide CRM connectivity and authorization details
  • Define custom fields for:
    • call logging and disposition
    • SMS and messagig logging
  • Customize the "Connect to CRM" or authorization screen
  • Define custom contact record types/categories
  • Customize the welcome screen for a given CRM

Config file

TODO - describe where the config file is

Configuration options

Name Type Description
urlIdentifier string The URL for which this CRM will be enabled. When the CRM is enabled for a domain, the extension's organge quick access button will appear.
name string The name of the CRM.
authType string The supported auth type for the corresponding CRM. Only two values are supported: oauth and apiKey.
authUrl string Only used with authType equal to oauth. The auth URL to initiate the OAuth process with the CRM.
clientId string Only used with authType equal to oauth. The client ID of the application registered with the CRM to access it's API.
canOpenLogPage boolean Set to true if the corresponding CRM supports permalinks for a given activity/log. When set to true users will have the option view/open the activity log in the CRM from the call history page. When set to false, users will open the contact page instead.
contactTypes ARRAY of string CRMs often adopt unique vernaculars to describe contacts. Provide the enumerated list of contact types supported by the corresponding CRM.

Customizing the welcome message

When a user installs the CRM extension for the first time and accesses it from their CRM, a welcome page or splash screen appears to the user. This screen can be very effective in educating the end user about how to setup and connect to the associated CRM.

Currently welcome pages are relatively simple, providing developers with the ability to direct users to two key resources:

  • A URL to watch a video
  • A URL to read documentation
            "embeddedOnCrmPage": {
                "welcomePage": {
                    "docLink": "https://ringcentral.github.io/rc-unified-crm-extension/",
                    "VideoLink": "https://youtu.be/pQgdsAR1UCI"
                }
            }

Customizing pages within the client application

There are a number of pages within the Unified CRM client application that often need to be customized in some way for the corresponding CRM. Those pages are:

  • CRM authentication page
  • Call logging form
  • Message logging form

Authentication page

                "auth": {
                    "title": "test CRM",
                    "content": [
                        {
                            "const": "apiKey",
                            "title": "apiKey",
                            "type": "string",
                            "required": true
                        }
                    ]
                },
                "auth": {
                    "title": "Insightly",
                    "warning": "To manually connect, please go to Insightly User Settings and then copy info in API section over.",
                    "content": [
                        {
                            "const": "insightlyGetApiKey",
                            "title": "Get API Key",
                            "type": "string",
                            "uiSchema": {
                                "ui:field": "button",
                                "ui:variant": "contained",
                                "ui:fullWidth": true
                            }
                        },
                        {
                            "const": "apiKey",
                            "title": "apiKey",
                            "type": "string",
                            "required": true
                        },
                        {
                            "const": "apiUrl",
                            "title": "apiUrl",
                            "type": "string",
                            "required": true
                        }
                    ]
                },

Example custom auth page

Auth page

Adding custom fields to logging forms

CRMs almost always have a set of fields associated with logging an activity that are relatively unique. Consider for example Clio, a CRM used by legal professionals, in which users link calls to "matters" (e.g. a "legal matter"). Where CRMs like Insightly link calls to opportunities. To account for this, the framework makes it easy to add new custom form fields to two key forms users interact with frequently:

  • Call logging page
  • Create contact page

For each page, you will define an array of additionalFields. Each additional field element consists of the properties below.

Name Type Description
const string A unique key identifying the field.
title string The display name of the field.
type string The data type associated with the field.
contactDependent boolean Set to true if this field would change when the selected contact is changed, or false if the value is static.

Custom call log fields

Set up associated deals as dropdown options:

  1. Christmas special A351
  2. Easter A22
  3. Anniversary C92

and address as free input field.

                "callLog": {
                    "additionalFields": [
                        {
                            "const": "associatedDeal",
                            "title": "Deals",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "address",
                            "title": "Address",
                            "type": "inputField",
                            "contactDependent": false
                        }
                    ]
                },

Custom SMS log fields

Set up associated deals the same as call log

                "messageLog": {
                    "additionalFields": [
                        {
                            "const": "associatedDeal",
                            "title": "Deals",
                            "type": "selection",
                            "contactDependent": true
                        }
                    ]
                }

Sample config file

Here is a sample config file that illustrates the full syntax and structure of the config file.

{
    "serverUrl": "https://xxxx.ngrok.io",
    "platforms": {
        "testCRM": {
            "urlIdentifier": "developers.ringcentral.com",
            "name": "testCRM",
            "authType": "apiKey",
            "authUrl": "https://oauth.xxxxxx.com/oauth/authorize",
            "clientId": "",
            "canOpenLogPage": false,
            "contactTypes": [
                "TestContactType",
                "Contact"
            ],
            "page": {
                "auth": {
                    "title": "test CRM",
                    "content": [
                        {
                            "const": "apiKey",
                            "title": "apiKey",
                            "type": "string",
                            "required": true
                        }
                    ]
                },
                "callLog": {
                    "additionalFields": [
                        {
                            "const": "associatedDeal",
                            "title": "Deals",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "address",
                            "title": "Address",
                            "type": "inputField",
                            "contactDependent": false
                        }
                    ]
                },
                "messageLog": {
                    "additionalFields": [
                        {
                            "const": "associatedDeal",
                            "title": "Deals",
                            "type": "selection",
                            "contactDependent": true
                        }
                    ]
                }
            },
            "embeddedOnCrmPage": {
                "welcomePage": {
                    "docLink": "https://ringcentral.github.io/rc-unified-crm-extension/",
                    "VideoLink": "https://youtu.be/pQgdsAR1UCI"
                }
            }
        },
        "clio": {
            "urlIdentifier": "app.clio.com",
            "name": "clio",
            "authType": "oauth",
            "authUrl": "https://app.clio.com/oauth/authorize",
            "clientId": "",
            "canOpenLogPage": false,
            "page": {
                "callLog": {
                    "additionalFields": [
                        {
                            "const": "matters",
                            "title": "Matter",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "logTimeEntry",
                            "title": "Log time entry",
                            "type": "checkbox",
                            "contactDependent": false,
                            "defaultValue": true
                        }
                    ]
                },
                "messageLog": {
                    "additionalFields": [
                        {
                            "const": "matters",
                            "title": "Matter",
                            "type": "selection",
                            "contactDependent": true
                        }
                    ]
                }
            },
            "embeddedOnCrmPage": {
                "welcomePage": {
                    "docLink": "https://ringcentral.github.io/rc-unified-crm-extension/clio/",
                    "VideoLink": "https://youtu.be/pQgdsAR1UCI"
                }
            }
        },"insightly": {
            "urlIdentifier": "insightly.com",
            "name": "insightly",
            "authType": "apiKey",
            "canOpenLogPage": true,
            "contactTypes": [
                "Lead",
                "Contact"
            ],
            "page": {
                "auth": {
                    "title": "Insightly",
                    "warning": "To manually connect, please go to Insightly User Settings and then copy info in API section over.",
                    "content": [
                        {
                            "const": "insightlyGetApiKey",
                            "title": "Get API Key",
                            "type": "string",
                            "uiSchema": {
                                "ui:field": "button",
                                "ui:variant": "contained",
                                "ui:fullWidth": true
                            }
                        },
                        {
                            "const": "apiKey",
                            "title": "apiKey",
                            "type": "string",
                            "required": true
                        },
                        {
                            "const": "apiUrl",
                            "title": "apiUrl",
                            "type": "string",
                            "required": true
                        }
                    ]
                },
                "callLog": {
                    "additionalFields": [
                        {
                            "const": "organization",
                            "title": "Organisation",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "opportunity",
                            "title": "Opportunity",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "project",
                            "title": "Project",
                            "type": "selection",
                            "contactDependent": true
                        }
                    ]
                },
                "messageLog": {
                    "additionalFields": [
                        {
                            "const": "organization",
                            "title": "Organisation",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "opportunity",
                            "title": "Opportunity",
                            "type": "selection",
                            "contactDependent": true
                        },
                        {
                            "const": "project",
                            "title": "Project",
                            "type": "selection",
                            "contactDependent": true
                        }
                    ]
                }
            },
            "embeddedOnCrmPage": {
                "welcomePage": {
                    "docLink": "https://ringcentral.github.io/rc-unified-crm-extension/insightly/",
                    "VideoLink": "https://youtu.be/5hWvVI12UAc"
                }
            }
        }
    },
    "rcClientId": "",
    "rcServer": "https://platform.ringcentral.com",
    "redirectUri": "https://ringcentral.github.io/ringcentral-embeddable/redirect.html",
    "version": "0.0.1"
}