RingSense
RingSense API is in beta
The RingSense API is currently in beta. Developers should be aware of the following:
- Their feature sets are not reflective of the full scope currently planned.
- Backwards compatibility is not guaranteed from one release to the next during the beta period. Changes can be introduced at any time that may impact your applications with little notice.
RingCentral RingSense transcribes your voice calls and provides in-depth conversational insights, offering detailed analytics derived from post-call analysis of recorded sessions. Based on the richness of the conversation content, the insights may include the following:
Transcript
- Transcription objects with identified speakers and the timestamps of their utterances.Summary
- Summary objects with AI-generated summary paragraphs and the timestamps of the conversations.HighLights
- Highlight objects contain speaker utterances that capture key points, valuable insights, and notable moments for quick review and analysis.NextSteps
- Next steps objects contain AI-generated action items for the call participants.AIScore
- A numerical value that represents the confidence level of the RingSense AI's analysis and prediction.BulletedSummary
- A list of AI-generated sentences summarizing the conversations in bullet points.
Requirements
- A RingSense license must be purchased and assigned to a user extension.
- The license is transferable from one user extension to another user extension.
- RingSense data retention is defined in your RingSense settings. By default the data is retained for 1 year.
- You must request access to RingSense APIs via this form.
To learn more about RingSense and how to enable the service for a RingCentral RingEX account, please refer to this online article.
RingSense API
The RingSense API allows you to programmatically access RingSense data from your account.
Notes
- Currently the API does not support video meeting recordings.
The API functions at the account level and requires the "RingSense for Sales - Access Insights" user permission. This means that any user extension with this permission can access RingSense data for any user holding a RingSense license.
How to check if an extension has the permission to access RingSense data via API?
Check from the account admin portal
- Log in to your account admin portal using a super admin user.
- Select the 'Users' tab then click the 'Roles' option
- Select the role which is assigned to the user extension
- Scroll to the Artificial Intelligence section and check if the checkbox is checked
Check from the platform API
Authenticate the app using the login credentials of the user who is authorized to access RingSense data. Then, make a GET request to the API below:
/restapi/v1.0/account/~/extension/~/authz-profile/check?permissionId=ReadRingSenseInsights
If the user has the permission, the response will contain the info below:
{
"uri" : "https://platform.ringcentral.com/restapi/v1.0/account/80964XXXX/extension/6228832YYYY/authz-profile/check?permissionId=ReadRingSenseInsights&targetExtensionId=6228832YYYY",
"successful" : true,
"details" : {
"permission" : {
"uri" : "https://platform.ringcentral.com/restapi/v1.0/dictionary/permission/ReadRingSenseInsights",
"id" : "ReadRingSenseInsights",
"assignable" : true,
"readOnly" : false,
"siteCompatible" : "Independent"
},
"effectiveRole" : {
"uri" : "https://platform.ringcentral.com/restapi/v1.0/dictionary/user-role/1",
"id" : "1"
},
"scopes" : [ "AllExtensions" ]
}
}
There are two methods to access RingSense data: through push notifications (recommended method) or via a REST API call.
RingSense event notification
You can get notified when a new voice call recording analysis is completed via RingCentral push notification service. The RingSense data is included in the event payload together with the event metadata.
To receive RingSense event notification for voice call recordings, subscribe for this event.
Remember, the notification events are triggered only if a voice call was recorded by users who hold a RingSense license.
Read RingSense data
You can read the RingSense data of a recorded voice call if you know the sourceRecordId
or the sourceSessionId
. Both sourceRecordId
and sourceSessionId
values are included in the RingSense event payload.
Notes
- The
sourceRecordId
of a voice call recording is the recording ID of a recorded call. You can get the recording ID of a call from the call log data. - The
sourceSessionId
of a voice call recording is the telephony session ID of a recorded call. You can get the telephony session ID of a call from the call log data.
Read RingSense data using a recording Id:
GET /ai/ringsense/v1/public/accounts/~/domains/pbx/records/[sourceRecordId]/insights
This endpoint retrieves the RingSense data for a specific call recording, identified by the sourceRecordId
.
Read RingSense data using a telephony session Id:
GET /ai/ringsense/v1/public/accounts/~/domains/pbx/sessions/[sourceSessionId]/insights
This endpoint returns the RingSense data for all call recordings associated with the specified telephony session. Multiple call recordings can exist for a single session in scenarios such as call transfers between agents, where each leg of the call is recorded separately. The RingSense data for each individual recording will be included in the records
array in the API response.
Example of API Response
{
"title": "Call from John Smith to Tracy Debolah",
"domain": "pbx",
"sourceSessionId": "s-a0e7b361acc0az191bec7e275z7cae070000",
"sourceRecordId": "2728084995017",
"callDirection": "Outbound",
"ownerExtensionId": "6228832XXXX",
"recordingDurationMs": 125963,
"recordingStartTime": "2024-09-04T20:44:16.390Z",
"creationTime": "2024-09-04T21:15:43.597Z",
"lastModifiedTime": "2024-09-04T21:15:43.591Z",
"speakerInfo": [
{
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1",
"name": "John Smith",
"accountId": "809646XXX",
"extensionId": "6228832XXXX"
},
{
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-2",
"name": "Tracy Debolah",
"accountId": null,
"extensionId": null
}
],
"insights": {
"Transcript": [
{
"end": 14.52,
"text": "Okay, I record this meeting so we will have the RingSense meeting insights.",
"start": 2.2,
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1"
},
...
{
"end": 40.44,
"text": "And I have some action items for myself.",
"start": 36.6,
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1"
},
{
"end": 46.12,
"text": "As I have to complete the test.",
"start": 42.52,
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1"
},
...
{
"end": 125.88,
"text": "Goodbye.",
"start": 125.4,
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1"
}
],
"Summary": [
{
"start": 0,
"end": 1,
"value": "The call is about discussing the tasks and timeline for completing a project."
}
],
"NextSteps": [
{
"start": 42.52,
"end": 53.32,
"value": "Complete the test with own code for the API.",
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1"
},
{
"start": 56.04,
"end": 64.92,
"value": "Write a developer guide for the API.",
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-2"
},
...
{
"start": 82.92,
"end": 99.56,
"value": "Publish the developer guide after review and editing.",
"speakerId": "p-a0e7b361acc0az191bec7e275z7cae070000-1"
}
],
"AIScore": [
{
"value": "8"
}
],
"BulletedSummary": [
{
"value": "Agent confirmed they were recording the call for sentiment analysis purposes."
},
...
],
"CallNotes": [
{
"value": "Call notes.\nAgent expressed frustration over internal communication issues and ..."
}
]
}
}
Parameter | Type | Description |
---|---|---|
title |
string | For voice calls, the system uses the the caller and callee name to compose the title. |
domain |
String | Name of the communication medium. Currently only for voice calls ('pbx') are supported. |
sourceRecordId |
String | The value is the call recording ID (can be retrieved from the call log). |
sourceSessionId |
String | The value is the call telephony session id. |
callDirection |
String | For voice calls only. The value is either Inbound or Outbound . |
ownerExtensionId |
String | The extension ID of the user who holds the RingSense license. |
recordingDurationMs |
Integer | The length of the voice call recording. |
recordingStartTime |
String | The date and time when the recording started. |
creationTime |
String | The date and time when the conversational insights are created. |
lastModifiedTime |
String | The date and time when the conversational insights are last modified. |
speakerInfo |
List | Contains identified call participant objects. |
insights |
JSON object | Contains call conversational insights data objects. |
SpeakerInfo
The speakerInfo
is a list of objects, with each object contains the following key/value pairs:
Parameter | Type | Description |
---|---|---|
speakerId |
String | System given speaker identifier. For voice calls, the ID is the call party ID assigned by the telephony system. |
name |
String | The name of a participant. If the speaker is an agent (a user under the account), the name is the full name of the user extension. If the speaker is a call party outside of the account, the name is the specified name of the contact associated with the agent company or personal contacts. |
accountId |
String | The ID of the RingCentral account. If the speaker is a call party outside of the account, this value is null . |
extensionId |
String | The ID of the user extension. If the speaker is a call party outside of the account, this value is null . |
Insights
The insights
is an object that may contain the following objects:
Parameter | Type | Description |
---|---|---|
Transcript |
List | A list of JSON objects. Each object contains transcribed texts and related metadata. |
Summary |
List | A list of JSON objects. Each object contains the summary value and related metadata. |
HighLights |
List | A list of JSON objects. Each object contains the highlight value and related metadata. |
NextSteps |
List | A list of JSON objects. Each object contains the next step value and related metadata. |
AIScore |
List | A JSON object that contains a numerical value that represents the confidence level of the RingSense AI's analysis and prediction. |
BulletedSummary |
List | A list of JSON objects. Each object contains the AI-generated sentences summarizing the conversations. |
CallNotes |
List | A JSON objects contains the taken notes from the call conversation. Each call note is separated by a new line "\n". |
When processing the insights objects—such as reconstructing conversations using the utterances in the Transcript
objects, you can match the speaker ID from a transcript object with the corresponding speaker ID in the speakerInfo
object. This allows you to display the speaker's name (if available) alongside the utterance text.