Skip to main content
RingCentral is a cloud phone system (RingEX) for calls, SMS, voicemail and fax. This connector reads your RingCentral account through the RingCentral REST API and brings the company call log (every inbound and outbound call of every user, with its result, duration, recording link, cost and the detailed legs of transfers and forwards), the account directory (users and other extensions, company phone numbers, call queues and their members) and the messages of every mailbox (SMS, MMS, voicemail and fax).
The connector only reads data. It never places calls, sends messages, or changes anything in RingCentral, and it does not download recordings, voicemail audio, or fax documents (only their links).
Do not run a Full sync or an Additional Full Sync on Call Log or Messages. RingCentral keeps call history and messages only for a limited time (see its data retention policy), so a full sync replaces everything Nekt has accumulated in these two tables with what RingCentral still keeps. Keep these two tables on incremental syncs.

Configuring RingCentral as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the RingCentral option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

The connector signs in with a JWT credential of a RingCentral user, presented to a RingCentral app that you create in your own account. Nekt does not need any app of its own.
1

Create the app

Sign in to the RingCentral Developer Console with your RingCentral account and open Apps > Create App. Choose REST API App, select the JWT auth flow authentication, and add the permissions Read Call Log, Read Accounts, and Read Messages (you can leave out Read Messages if you will not sync Messages). Save the app.
2

Copy the app credentials

In the app, open Credentials and copy the Client ID and the Client Secret.
3

Create the JWT credential

Signed in as a user with the Super Admin role (or another role that can see the company call log, users, phone numbers, and messages), click your name in the top-right corner, open Credentials, and click Create JWT. Allow it for the app you created and copy the JWT. A dedicated service user is recommended, so the source keeps working when people leave the company.
See RingCentral’s guides on JWT authentication and creating a JWT credential. The following configurations are available:
  • Client ID: The Client ID of your RingCentral app.
  • Client Secret: The Client Secret of your RingCentral app.
  • JWT Credential: The JWT credential of the RingCentral admin user, allowed for the app.
  • Start Date: The earliest date of the Call Log and Messages read on the first sync and on full syncs. The other tables are always read in full.
  • RingCentral Server (advanced): Keep https://platform.ringcentral.com unless your service is AT&T Office@Hand or Verizon, which use https://platform.ringcentral.biz.
  • Lookback (days) (advanced): Each sync reads Call Log and Messages again from this many days before the previous sync, to pick up calls that ended later and records RingCentral completes afterwards (recordings, read status). From 1 to 30; default: 2.
RingCentral limits how many requests an app may send per user and per minute (for the call log, 10 per minute by default). The first sync (and any full sync) reads the whole period from the Start Date in one go: for a busy account and a Start Date a year back this can take many hours, so pick the Start Date you really need. Later syncs read only the recent days; if a source falls far behind, each sync stops after a few hours, keeps what it read, and the next one continues. The limit is shared with anything else that uses the same app and JWT credential, so use them only for Nekt.
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
    • Incremental: every time the extraction happens, we’ll get only the new data, which is good if, for example, you want to keep every record ever fetched.
    • Full table: every time the extraction happens, we’ll get the current state of the data, which is good if, for example, you don’t want to have deleted data in your catalog.
Keep Call Log and Messages on Incremental. As Full table they would hold only what RingCentral still keeps.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:
  • Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
  • Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while. Do not enable it for Call Log or Messages (see the warnings above).
Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Permissions per table

If the app or the JWT user lacks a permission, the tables that need it are skipped (and named in the sync log, with the permission to grant) while the other tables keep syncing.

Streams and Fields

Available streams

The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description.
Nested information (call legs, transfers, message recipients and attachments, permissions, addresses) comes as JSON text. Fields RingCentral returns that have no column of their own are kept in extra_fields (JSON text). Analytics reports, RingCentral Video, and Contact Center data are not included.

Fields by stream

Every call of every extension of the account, from the company call log with the detailed view (one row per call, with its legs). Read incrementally by the call’s start time: each sync reads again from the previous sync minus the lookback, because a call only appears once it is over.Table: call_log · Primary key: id · Sync: Incremental (start_time)
Users and every other extension of the account (call queues appear with type Department, as RingCentral names them). Read in full on every sync.Table: extensions · Primary key: id · Sync: Full table
Phone numbers of the account, company-level and direct numbers. Read in full on every sync.Table: phone_numbers · Primary key: id · Sync: Full table
Call queues of the account. Read in full on every sync.Table: call_queues · Primary key: id · Sync: Full table
One row per member of each call queue. Read in full on every sync.Table: call_queue_members · Primary key: call_queue_id, id · Sync: Full table
Messages of every mailbox: users, call queues, voicemail-only, and fax extensions that are enabled or disabled. Read incrementally by creation time, each mailbox from its own previous sync minus the lookback; a mailbox added later starts at the Start Date. Extensions that RingCentral says have no message store are skipped. Mailboxes RingCentral does not let the JWT user read (for example when the user’s admin role is limited to some sites) are skipped with a warning in the sync log; a few of them are retried at the start of every sync, so they are read again once the permission is fixed; when most mailboxes are refused, the Messages table fails with a message asking for a Super Admin JWT user.Table: messages · Primary key: mailbox_extension_id, id · Sync: Incremental (creation_time)

Implementation notes

  • Call history retention: RingCentral deletes old call log records, recordings (from 90 days), and messages according to its data retention policy. Keep the source syncing regularly so the history builds up in Nekt, and do not run full syncs on Call Log or Messages.
  • A table that suddenly comes back empty: if Extensions, Phone Numbers, Call Queues, or Call Queue Members return no rows after previous syncs had some, the connector reads them again and empties the table only when RingCentral confirms it has none. Otherwise that table fails without being emptied and the sync log asks you to reset only that table. Do not run a full sync of the whole source for this.
  • Start Date too old: if RingCentral refuses the Start Date because it is older than the history it keeps, the sync log says so; set a more recent Start Date.
  • Changes after the lookback: a call or message changed in RingCentral more than Lookback (days) after the previous sync is not read again. Increase the lookback if your team edits records later.
  • Rate limits: requests are paced under RingCentral’s per-minute limits; when RingCentral asks to slow down, the sync waits and the sync log says so.