diff --git a/ringcentral/README.md b/ringcentral/README.md
index 22124824dfb1f..66c6050a85efb 100644
--- a/ringcentral/README.md
+++ b/ringcentral/README.md
@@ -1,16 +1,86 @@
+# RingCentral
+
## Overview
+The RingCentral integration seamlessly collects Voice, Audit, A2P SMS, and Voice(Analytics) data and ingests them into Datadog for comprehensive analysis. Leveraging the built-in logs pipeline, these logs are parsed and enriched, enabling effortless search and analysis. Through intuitive, out-of-the-box dashboards the integration provides insights into call activities, SMS trends, and audit trails. Additionally, it includes pre-configured monitors for proactive notifications on SMS budget overrun and SMS error rates.
+
+### The integration collects:
+
+#### Logs for:
+- Voice
+- Audit
-The RingCentral integration seamlessly collects Voice, Audit, A2P SMS and Voice(Analytics) data and ingests them into Datadog for comprehensive analysis. Leveraging the built-in logs pipeline, these logs are parsed and enriched, enabling effortless search and analysis. The integration empowers users with deep insights into call activities, SMS trends, and audit trails through intuitive, out-of-the-box dashboards. Additionally, it includes pre-configured monitors for proactive notifications on SMS budget overrun and SMS error rates.
+#### Metrics for:
+- Voice (Analytics)
+- A2P SMS
## Setup
-### Configuration
+### RingCentral Datadog Integration Configuration
+
+Configure the Datadog endpoint to forward RingCentral logs and metrics to Datadog.
+
+1. Navigate to `RingCentral`.
+2. Add your [RingCentral credentials](#get-api-credentials-from-ringcentral).
+
+| RingCentral Parameters | Description |
+|------------------------------ |-----------------------------------------------------------------------------------------|
+| [Account ID](#ringcentral-account-id) | The Account ID of RingCentral. |
+| [Client ID](#ringcentral-application-client-id-and-client-secret) | The Client ID of the RingCentral Application. |
+| [Client Secret](#ringcentral-application-client-id-and-client-secret) | The Client Secret of the RingCentral Application. |
+| [JWT Token](#ringcentral-jwt-token) | The JWT Token from RingCentral. |
+| Get Voice Calls | Enable to collect Voice Call Logs from RingCentral. The default value is True. |
+| Get Voice(Analytics) Metrics | Enable to collect Voice(Analytics) Metrics from RingCentral. The default value is True. |
+| Get SMS Metrics | Enable to collect SMS Metrics from RingCentral. The default value is True. |
+| Get Audit Logs | Enable to collect Audit Logs from RingCentral. The default value is True. |
-!!! Add list of steps to set up this integration !!!
+### Get API Credentials from RingCentral
-### Validation
+#### RingCentral Account ID
+To access the Account ID, you need to first access details for a "Super Admin" user and then locate the Account ID through the URL:
-!!! Add steps to validate integration is functioning as expected !!!
+1. Visit [RingCentral][1] and log in as a Super Admin.
+1. Under the **Users** section, click **Users with Extensions**.
+1. From the list of users, click on the user who has a "Super Admin" suffix in their name to open the user's details panel.
+1. Look at the URL in your web browser's address bar.
+1. Find the 9-digit number within the URL. This is your RingCentral Account ID.
+ - **Example URL:** https://service.ringcentral.com/application/users/users/default/123456789/settings/default
+ - The `123456789` is your Account ID.
+
+#### RingCentral Application Client ID and Client Secret
+To find the Client ID and Client Secret, you need to register a new application:
+
+1. Login to your [RingCentral Developer][2] account using a user with Super Admin role or [Custom role](#create-and-assign-a-custom-role).
+1. Click **Console**.
+1. Under the *Apps* section, click **Register App**.
+1. Select **Rest API app** for the App type .
+1. Fill in the required details for your application, such as the name and description.
+
+| Field | Selection |
+| --- | ----------- |
+| Do you intend to promote this app in the RingCentral App Gallery? | **No** |
+| Auth type | **JWT auth flow** |
+| Issue refresh tokens | **Yes** |
+| Application scopes | Select the following:
Analytics Read Audit Trail Read Call Log A2P SMS
+|
+1. Click **create App**.
+1. After creating the application, find the `clientId` and `clientSecret` in the application settings.
+1. Copy these credentials.
+- **Note**: Ensure these credentials are stored securely and not exposed in public repositories or insecure locations.
+
+#### RingCentral JWT Token
+1. Login to [RingCentral Developers][2] with the same user you used to find the [Client ID and Client Secret](#ringcentral-application-client-id-and-client-secret).
+1. Click **Credentials** under your username.
+1. Click **Create JWT**.
+1. Add an appropriate label and select the **Production** environment.
+1. Allow this JWT token for only a specific app and add the `clientId` of the application created to find the [Client ID and Client Secret](#ringcentral-application-client-id-and-client-secret).
+1. If you select an expiration date, make sure you create a new JWT and update it in the integration configuration before the expiry date.
+1. Click **Create JWT**.
+
+#### Create and assign a custom role
+1. Create a custom role, following the [RingCentral documentation][3].
+1. Select **Standard** role as a starting point.
+1. Provide additional **Audit Trail** and **Company Call Log - View Only** permissions to the role.
+1. Assign a custom role to a user, following the [RingCentral documentation][4].
## Data Collected
@@ -20,16 +90,19 @@ The RingCentral integration collects and forwards Voice and Audit logs to Datado
### Metrics
-The RingCentral integration collects and forwards Voice(Analytics) and SMS metrics to Datadog. See [metadata.csv][4] for a list of metrics provided by this integration.
+The RingCentral integration collects and forwards Voice(Analytics) and SMS metrics to Datadog. See [metadata.csv][5] for a list of metrics provided by this integration.
### Events
The RingCentral integration does not include any events.
## Support
-For further assistance, contact [Datadog Support][3].
+
+For further assistance, contact [Datadog Support][6].
[1]: https://service.ringcentral.com/
[2]: https://developers.ringcentral.com/
-[3]: https://docs.datadoghq.com/help/
-[4]: https://github.com/DataDog/integrations-core/blob/master/ringcentral/metadata.csv
\ No newline at end of file
+[3]: https://support.ringcentral.com/article-v2/10641-user-roles-permissions-edit-permission-custom-role.html?brand=RC_US&product=RingEX&language=en_US
+[4]: https://support.ringcentral.com/article-v2/10647-user-roles-permissions-assign-role-user-details.html?brand=RC_US&product=RingEX&language=en_US
+[5]: https://github.com/DataDog/integrations-core/blob/master/ringcentral/metadata.csv
+[6]: https://docs.datadoghq.com/help/
diff --git a/ringcentral/assets/dashboards/ringcentral_audit.json b/ringcentral/assets/dashboards/ringcentral_audit.json
new file mode 100644
index 0000000000000..f9cd3cded8790
--- /dev/null
+++ b/ringcentral/assets/dashboards/ringcentral_audit.json
@@ -0,0 +1,589 @@
+{
+ "title": "RingCentral Audit",
+ "description": "The RingCentral Audit dashboard provides a detailed examination of activity within the RingCentral account. It includes the total number of audit logs, frequent audit logs, infrequent audit logs and detailed insights into audit activities.",
+ "widgets": [
+ {
+ "id": 4130361917849544,
+ "definition": {
+ "type": "image",
+ "url": "https://www.jenne.com/media/1024/ringcentral.png",
+ "url_dark_theme": "https://www.jenne.com/media/1024/ringcentral.png",
+ "sizing": "fill",
+ "has_background": false,
+ "has_border": false,
+ "vertical_align": "center",
+ "horizontal_align": "center"
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 7,
+ "height": 2
+ }
+ },
+ {
+ "id": 259564121481914,
+ "definition": {
+ "title": "Total Audit Logs",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [],
+ "search": {
+ "query": "source:ringcentral service:audit $AccountId $EventType $ActionId $ExtensionId $UserName"
+ },
+ "storage": "hot"
+ }
+ ],
+ "response_format": "scalar",
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_green"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 2,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 7,
+ "y": 0,
+ "width": 5,
+ "height": 5
+ }
+ },
+ {
+ "id": 727466998845956,
+ "definition": {
+ "type": "note",
+ "content": "**Dashboard Overview**\n\nThe RingCentral Audit dashboard provides a detailed examination of activity within the RingCentral account. It includes the total number of audit logs, frequent audit logs, infrequent audit logs and detailed insights into audit activities.\n\nFor more information, see the [RingCentral Integration Documentation](https://docs.datadoghq.com/integrations/ringcentral/).\n\n**Tips**\n- Use the timeframe selector in the top right of the dashboard to change the default timeframe.\n- Clone this dashboard to rearrange, modify and add widgets and visualizations.",
+ "background_color": "transparent",
+ "font_size": "14",
+ "text_align": "left",
+ "vertical_align": "center",
+ "show_tick": false,
+ "tick_pos": "50%",
+ "tick_edge": "left",
+ "has_padding": true
+ },
+ "layout": {
+ "x": 0,
+ "y": 2,
+ "width": 7,
+ "height": 3
+ }
+ },
+ {
+ "id": 7222771573571842,
+ "definition": {
+ "title": "Frequent Audit Logs",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "toplist",
+ "requests": [
+ {
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@actionId",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:audit $AccountId $EventType $ActionId $ExtensionId $UserName"
+ },
+ "storage": "hot"
+ }
+ ],
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "style": {
+ "display": {
+ "type": "stacked",
+ "legend": "automatic"
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 5,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 6431214995239432,
+ "definition": {
+ "title": "Infrequent Audit Logs",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "toplist",
+ "requests": [
+ {
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@actionId",
+ "limit": 10,
+ "sort": {
+ "order": "asc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:audit $AccountId $EventType $ActionId $ExtensionId $UserName"
+ },
+ "storage": "hot"
+ }
+ ],
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "asc"
+ }
+ ]
+ }
+ }
+ ],
+ "style": {
+ "display": {
+ "type": "stacked",
+ "legend": "automatic"
+ }
+ }
+ },
+ "layout": {
+ "x": 6,
+ "y": 5,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 1139033551588232,
+ "definition": {
+ "title": "Activity by User ",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@usr.name",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:audit $EventType $ActionId $ExtensionId $AccountId $UserName"
+ },
+ "storage": "hot"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 9,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 7580811123066196,
+ "definition": {
+ "title": "Activity by Extension ID",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@extensionId",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:audit $EventType $ActionId $AccountId $UserName $ExtensionId"
+ },
+ "storage": "hot"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 6,
+ "y": 9,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 4062801632963958,
+ "definition": {
+ "title": "Activity by Role",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@initiator.role",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:audit $EventType $ActionId $ExtensionId $AccountId $UserName"
+ },
+ "storage": "hot"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 500,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 13,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 4650277533081732,
+ "definition": {
+ "title": "Activity by Location",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "geomap",
+ "requests": [
+ {
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@network.client.geoip.country.iso_code",
+ "limit": 250,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:audit $EventType $ActionId $ExtensionId $AccountId $UserName"
+ },
+ "storage": "hot"
+ }
+ ],
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "sort": {
+ "count": 250,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "style": {
+ "palette": "hostmap_blues",
+ "palette_flip": false
+ },
+ "view": {
+ "focus": "WORLD"
+ }
+ },
+ "layout": {
+ "x": 6,
+ "y": 13,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 5393766589865430,
+ "definition": {
+ "title": "Audit Logs",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "event_list",
+ "query": {
+ "data_source": "logs_stream",
+ "query_string": "service:audit source:ringcentral $AccountId $EventType $ActionId $ExtensionId $UserName",
+ "indexes": [],
+ "storage": "hot",
+ "sort": {
+ "order": "desc",
+ "column": "timestamp"
+ }
+ },
+ "columns": [
+ {
+ "field": "status_line",
+ "width": "auto"
+ },
+ {
+ "field": "timestamp",
+ "width": "auto"
+ },
+ {
+ "field": "service",
+ "width": "auto"
+ },
+ {
+ "field": "content",
+ "width": "auto"
+ }
+ ]
+ }
+ ],
+ "type": "list_stream"
+ },
+ "layout": {
+ "x": 0,
+ "y": 17,
+ "width": 12,
+ "height": 5
+ }
+ }
+ ],
+ "template_variables": [
+ {
+ "name": "AccountId",
+ "prefix": "@accountId",
+ "available_values": [],
+ "default": "*"
+ },
+ {
+ "name": "EventType",
+ "prefix": "@eventType",
+ "available_values": [],
+ "default": "*"
+ },
+ {
+ "name": "ActionId",
+ "prefix": "@actionId",
+ "available_values": [],
+ "default": "*"
+ },
+ {
+ "name": "ExtensionId",
+ "prefix": "@extensionId",
+ "available_values": [],
+ "default": "*"
+ },
+ {
+ "name": "UserName",
+ "prefix": "@usr.name",
+ "available_values": [],
+ "default": "*"
+ }
+ ],
+ "layout_type": "ordered",
+ "notify_list": [],
+ "reflow_type": "fixed"
+}
\ No newline at end of file
diff --git a/ringcentral/assets/dashboards/ringcentral_message.json b/ringcentral/assets/dashboards/ringcentral_message.json
new file mode 100644
index 0000000000000..4431e5b1540fd
--- /dev/null
+++ b/ringcentral/assets/dashboards/ringcentral_message.json
@@ -0,0 +1,907 @@
+{
+ "title": "RingCentral Message",
+ "description": "The Message Dashboard delivers an in-depth look at A2P SMS metrics within RingCentral, focusing on performance, costs, and message delivery status. It provides valuable insights, to help you make effective decision and improve operational efficiency.",
+ "widgets": [
+ {
+ "id": 1098312735089554,
+ "definition": {
+ "type": "image",
+ "url": "https://www.jenne.com/media/1024/ringcentral.png",
+ "url_dark_theme": "https://www.jenne.com/media/1024/ringcentral.png",
+ "sizing": "fill",
+ "has_background": false,
+ "has_border": false,
+ "vertical_align": "center",
+ "horizontal_align": "center"
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 5,
+ "height": 1
+ }
+ },
+ {
+ "id": 3467094000519634,
+ "definition": {
+ "title": "SMS Monitors Summary",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 6103602941817638,
+ "definition": {
+ "title": "SMS Monitors Summary",
+ "type": "manage_status",
+ "display_format": "countsAndList",
+ "color_preference": "text",
+ "hide_zero_counts": true,
+ "show_status": true,
+ "last_triggered_format": "relative",
+ "query": "tag:ringcentral",
+ "sort": "status,asc",
+ "count": 50,
+ "start": 0,
+ "summary_type": "monitors",
+ "show_priority": false,
+ "show_last_triggered": false
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 7,
+ "height": 4
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 5,
+ "y": 0,
+ "width": 7,
+ "height": 5
+ }
+ },
+ {
+ "id": 1183794838763428,
+ "definition": {
+ "type": "note",
+ "content": "**Dashboard Overview**\n\nThe Message Dashboard delivers an in-depth look at A2P SMS metrics within RingCentral, focusing on performance, costs, and message delivery status and provides valuable insights, aiding in effective decision-making and operational efficiency.\n\nFor more information, see the [RingCentral Integration Documentation](https://docs.datadoghq.com/integrations/ringcentral).\n\n**Tips**\n- Use the timeframe selector in the top right of the dashboard to change the default timeframe.\n- Clone this dashboard to rearrange, modify and add widgets and visualizations.",
+ "background_color": "white",
+ "font_size": "14",
+ "text_align": "left",
+ "vertical_align": "center",
+ "show_tick": false,
+ "tick_pos": "50%",
+ "tick_edge": "left",
+ "has_padding": true
+ },
+ "layout": {
+ "x": 0,
+ "y": 1,
+ "width": 5,
+ "height": 4
+ }
+ },
+ {
+ "id": 1354438272141958,
+ "definition": {
+ "title": "Message Overview",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 6749798258044494,
+ "definition": {
+ "title": "Total Messages",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.total_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_green",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 1
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 5,
+ "height": 5
+ }
+ },
+ {
+ "id": 805763509201790,
+ "definition": {
+ "title": "Message by Direction",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "query": "sum:ringcentral.message.total_messages{$AccountId,$Direction} by {direction}.as_count()",
+ "data_source": "metrics",
+ "name": "query1",
+ "aggregator": "sum"
+ }
+ ],
+ "response_format": "scalar",
+ "style": {
+ "palette": "datadog16"
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 5,
+ "y": 0,
+ "width": 7,
+ "height": 5
+ }
+ },
+ {
+ "id": 4637114014020790,
+ "definition": {
+ "title": "Sent Messages",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.sent_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 5,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 7448304232428118,
+ "definition": {
+ "title": "Queued Messages ",
+ "title_size": "16",
+ "title_align": "left",
+ "time": {
+ "type": "live",
+ "unit": "day",
+ "value": 1
+ },
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.queued_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "last"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 4,
+ "y": 5,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 6258634474642316,
+ "definition": {
+ "title": "Delivered Messages",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.delivered_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 8,
+ "y": 5,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 1655079203516784,
+ "definition": {
+ "title": "Messages Over Time",
+ "title_size": "16",
+ "title_align": "left",
+ "show_legend": false,
+ "legend_layout": "auto",
+ "legend_columns": [
+ "avg",
+ "min",
+ "max",
+ "value",
+ "sum"
+ ],
+ "type": "timeseries",
+ "requests": [
+ {
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.total_messages{$AccountId,$Direction}.as_count()"
+ }
+ ],
+ "response_format": "timeseries",
+ "style": {
+ "palette": "cool",
+ "order_by": "values",
+ "line_type": "solid",
+ "line_width": "normal"
+ },
+ "display_type": "line"
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 8,
+ "width": 12,
+ "height": 5
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 5,
+ "width": 12,
+ "height": 14
+ }
+ },
+ {
+ "id": 7053038689443074,
+ "definition": {
+ "title": "Cost Breakdown",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 2129613024777588,
+ "definition": {
+ "title": "Total Cost",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.cost_total{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "dollar"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_green",
+ "custom_bg_color": "#e6e6fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 1,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 981649751684142,
+ "definition": {
+ "title": "Cost by Message Status",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "dollar"
+ }
+ },
+ "formula": "query1 + query2 + query3 + query4 + query5"
+ }
+ ],
+ "queries": [
+ {
+ "query": "sum:ringcentral.message.queued_cost{$AccountId,$Direction} by {messagestatus}.as_count()",
+ "data_source": "metrics",
+ "name": "query1",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.message.delivered_cost{$AccountId,$Direction} by {messagestatus}.as_count()",
+ "data_source": "metrics",
+ "name": "query2",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.message.delivery_failed_cost{$AccountId,$Direction} by {messagestatus}.as_count()",
+ "data_source": "metrics",
+ "name": "query3",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.message.sending_failed_cost{$AccountId,$Direction} by {messagestatus}.as_count()",
+ "data_source": "metrics",
+ "name": "query4",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.message.sent_cost{$AccountId,$Direction} by {messagestatus}.as_count()",
+ "data_source": "metrics",
+ "name": "query5",
+ "aggregator": "sum"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 500,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 4,
+ "y": 0,
+ "width": 8,
+ "height": 6
+ }
+ },
+ {
+ "id": 2729028664585858,
+ "definition": {
+ "title": "Average Cost per Message",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.cost_total{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ },
+ {
+ "name": "query2",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.total_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "dollar"
+ }
+ },
+ "formula": "query1 / query2"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_green",
+ "custom_bg_color": "#e6e6fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 2,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 3,
+ "width": 4,
+ "height": 3
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 19,
+ "width": 12,
+ "height": 7
+ }
+ },
+ {
+ "id": 1285360102800516,
+ "definition": {
+ "title": "Failures and Errors",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 4164423135813118,
+ "definition": {
+ "title": "Total Errors",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.delivery_failed_error_code{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ },
+ {
+ "name": "query2",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.sending_failed_error_code{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1 + query2"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_red"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 8150038489836508,
+ "definition": {
+ "title": "Delivery Failed Messages",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.delivery_failed_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 4,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 5819016213405378,
+ "definition": {
+ "title": "Sending Failed Messages",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.message.sending_failed_messages{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 8,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 8470755112862582,
+ "definition": {
+ "type": "note",
+ "content": "In case of message sending or delivery failure, please refer to this [link](https://developers.ringcentral.com/guide/messaging/sms/high-volume/handling-errors#common-errors) for a detailed description of the error codes.",
+ "background_color": "yellow",
+ "font_size": "14",
+ "text_align": "center",
+ "vertical_align": "center",
+ "show_tick": true,
+ "tick_pos": "50%",
+ "tick_edge": "right",
+ "has_padding": true
+ },
+ "layout": {
+ "x": 0,
+ "y": 3,
+ "width": 2,
+ "height": 5
+ }
+ },
+ {
+ "id": 4148315245837032,
+ "definition": {
+ "title": "Delivery Failed Error by Error Code",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "metrics",
+ "name": "query1",
+ "query": "sum:ringcentral.message.delivery_failed_error_code{$AccountId,$Direction} by {errorcode}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 500,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "automatic"
+ },
+ "custom_links": []
+ },
+ "layout": {
+ "x": 2,
+ "y": 3,
+ "width": 5,
+ "height": 5
+ }
+ },
+ {
+ "id": 1967938469950472,
+ "definition": {
+ "title": "Sending Failed Error by Error Code",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "metrics",
+ "name": "query1",
+ "query": "sum:ringcentral.message.sending_failed_error_code{$AccountId,$Direction} by {errorcode}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 500,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "automatic"
+ }
+ },
+ "layout": {
+ "x": 7,
+ "y": 3,
+ "width": 5,
+ "height": 5
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 26,
+ "width": 12,
+ "height": 9
+ }
+ }
+ ],
+ "template_variables": [
+ {
+ "name": "AccountId",
+ "prefix": "accountid",
+ "available_values": [],
+ "default": "*"
+ },
+ {
+ "name": "Direction",
+ "prefix": "direction",
+ "available_values": [
+ "inbound",
+ "outbound"
+ ],
+ "default": "*"
+ }
+ ],
+ "layout_type": "ordered",
+ "notify_list": [],
+ "reflow_type": "fixed"
+}
\ No newline at end of file
diff --git a/ringcentral/assets/dashboards/ringcentral_voice_call.json b/ringcentral/assets/dashboards/ringcentral_voice_call.json
new file mode 100644
index 0000000000000..b0a1570c01183
--- /dev/null
+++ b/ringcentral/assets/dashboards/ringcentral_voice_call.json
@@ -0,0 +1,1437 @@
+{
+ "title": "RingCentral Voice Call",
+ "description": "The RingCentral Voice Dashboard offers an extensive view of RingCentral voice call metrics, providing crucial insights into call performance, usage, and associated costs. It serves as a vital tool for analyzing user behavior, detecting call patterns, and enhancing communication efficiency within the organization.",
+ "widgets": [
+ {
+ "id": 8321444127095890,
+ "definition": {
+ "type": "image",
+ "url": "https://www.jenne.com/media/1024/ringcentral.png",
+ "url_dark_theme": "https://www.jenne.com/media/1024/ringcentral.png",
+ "sizing": "fill",
+ "has_background": false,
+ "has_border": false,
+ "vertical_align": "center",
+ "horizontal_align": "center"
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 5,
+ "height": 2
+ }
+ },
+ {
+ "id": 889760886222274,
+ "definition": {
+ "title": "Call Overview",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 1638255374572738,
+ "definition": {
+ "title": "Total Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.total_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 7,
+ "height": 2
+ }
+ },
+ {
+ "id": 7418162133773108,
+ "definition": {
+ "title": "Total Call Minutes",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.total_call_minutes{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "custom_unit_label",
+ "label": "minutes"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 2
+ },
+ "layout": {
+ "x": 0,
+ "y": 2,
+ "width": 3,
+ "height": 3
+ }
+ },
+ {
+ "id": 8016995663955472,
+ "definition": {
+ "title": "Average Call Duration",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.total_call_minutes{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ },
+ {
+ "name": "query2",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.total_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "minute"
+ }
+ },
+ "formula": "query1 / query2"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 2
+ },
+ "layout": {
+ "x": 3,
+ "y": 2,
+ "width": 4,
+ "height": 3
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 5,
+ "y": 0,
+ "width": 7,
+ "height": 6
+ }
+ },
+ {
+ "id": 2923359492917778,
+ "definition": {
+ "type": "note",
+ "content": "**Dashboard Overview**\n\nThe RingCentral Voice Dashboard offers an extensive view of RingCentral voice call metrics, providing crucial insights into call performance, usage, and associated costs. It serves as a vital tool for analyzing user behavior, detecting call patterns, and enhancing communication efficiency within the organization.\n\n[RingCentral Integration Documentation](https://docs.datadoghq.com/integrations/ringcentral).\n\n**Tips**\n- Use the timeframe selector in the top right of the dashboard to change the default timeframe.\n- Clone this dashboard to rearrange, modify and add widgets and visualizations.",
+ "background_color": "white",
+ "font_size": "14",
+ "text_align": "left",
+ "vertical_align": "center",
+ "show_tick": false,
+ "tick_pos": "50%",
+ "tick_edge": "left",
+ "has_padding": true
+ },
+ "layout": {
+ "x": 0,
+ "y": 2,
+ "width": 5,
+ "height": 4
+ }
+ },
+ {
+ "id": 735774317626376,
+ "definition": {
+ "title": "Call Types and Status",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 6190958815110272,
+ "definition": {
+ "title": "Completed Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.completed_voice_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "custom_bg",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 5749468265615256,
+ "definition": {
+ "title": "Missed Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.missed_voice_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "custom_bg",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 4,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 1378360882989284,
+ "definition": {
+ "title": "Unknown Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.unknown_voice_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "custom_bg",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 8,
+ "y": 0,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 8446987192974732,
+ "definition": {
+ "title": "Accepted Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.accepted_voice_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "custom_bg",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 3,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 2970894397584182,
+ "definition": {
+ "title": "Abandoned Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.abandoned_voice_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "custom_bg",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 4,
+ "y": 3,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 1125861725681346,
+ "definition": {
+ "title": "Voicemail Calls",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.voicemail_voice_calls{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "custom_bg",
+ "custom_bg_color": "#e1f0fa"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 0,
+ "timeseries_background": {
+ "type": "area",
+ "yaxis": {
+ "include_zero": true
+ }
+ }
+ },
+ "layout": {
+ "x": 8,
+ "y": 3,
+ "width": 4,
+ "height": 3
+ }
+ },
+ {
+ "id": 7640625940389524,
+ "definition": {
+ "title": "Calls by Result",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@log.result",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:voice $AccountId $Direction"
+ },
+ "storage": "hot"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 6,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 2899541394888750,
+ "definition": {
+ "title": "Calls by Response",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1 + query2 + query3 + query4"
+ }
+ ],
+ "queries": [
+ {
+ "query": "sum:ringcentral.voice.answered_voice_calls{$AccountId,$Direction} by {response}.as_count()",
+ "data_source": "metrics",
+ "name": "query1",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.voice.notanswered_voice_calls{$AccountId,$Direction} by {response}.as_count()",
+ "data_source": "metrics",
+ "name": "query2",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.voice.connected_voice_calls{$AccountId,$Direction} by {response}.as_count()",
+ "data_source": "metrics",
+ "name": "query3",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.voice.notconnected_voice_calls{$AccountId,$Direction} by {response}.as_count()",
+ "data_source": "metrics",
+ "name": "query4",
+ "aggregator": "sum"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ],
+ "count": 500
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 6,
+ "y": 6,
+ "width": 6,
+ "height": 4
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 6,
+ "width": 12,
+ "height": 11
+ }
+ },
+ {
+ "id": 8747954866743258,
+ "definition": {
+ "title": "Call Duration Breakdown",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 3453842358568210,
+ "definition": {
+ "type": "note",
+ "content": "An *inbound* call is a call received by a company or individual from a customer or client, while an *outbound* call is made by a company or individual to reach out to a customer or client.",
+ "background_color": "white",
+ "font_size": "14",
+ "text_align": "left",
+ "vertical_align": "center",
+ "show_tick": true,
+ "tick_pos": "50%",
+ "tick_edge": "right",
+ "has_padding": true
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 2,
+ "height": 3
+ }
+ },
+ {
+ "id": 5053173972030748,
+ "definition": {
+ "title": "Inbound Call Duration",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.inbound_call_duration{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "second"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 1
+ },
+ "layout": {
+ "x": 2,
+ "y": 0,
+ "width": 5,
+ "height": 3
+ }
+ },
+ {
+ "id": 5218963444986850,
+ "definition": {
+ "title": "Outbound Call Duration",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.outbound_call_duration{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "second"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 1
+ },
+ "layout": {
+ "x": 7,
+ "y": 0,
+ "width": 5,
+ "height": 3
+ }
+ },
+ {
+ "id": 7395151899769614,
+ "definition": {
+ "type": "note",
+ "content": "Internal voice calls refer to calls made between users within the same organization, using the RingCentral system. External voice calls are those made to or received from contacts outside the organization, such as customers or clients.",
+ "background_color": "white",
+ "font_size": "14",
+ "text_align": "left",
+ "vertical_align": "center",
+ "show_tick": true,
+ "tick_pos": "50%",
+ "tick_edge": "right",
+ "has_padding": true
+ },
+ "layout": {
+ "x": 0,
+ "y": 3,
+ "width": 2,
+ "height": 3
+ }
+ },
+ {
+ "id": 8560850209729932,
+ "definition": {
+ "title": "Internal Call Duration",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.internal_call_duration{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "second"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 1
+ },
+ "layout": {
+ "x": 2,
+ "y": 3,
+ "width": 5,
+ "height": 3
+ }
+ },
+ {
+ "id": 6344750945994318,
+ "definition": {
+ "title": "External Call Duration",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_value",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.external_call_duration{$AccountId,$Direction}.as_count()",
+ "aggregator": "sum"
+ }
+ ],
+ "formulas": [
+ {
+ "number_format": {
+ "unit": {
+ "type": "canonical_unit",
+ "unit_name": "second"
+ }
+ },
+ "formula": "query1"
+ }
+ ],
+ "conditional_formats": [
+ {
+ "comparator": ">=",
+ "value": 0,
+ "palette": "black_on_light_yellow"
+ }
+ ]
+ }
+ ],
+ "autoscale": true,
+ "precision": 2
+ },
+ "layout": {
+ "x": 7,
+ "y": 3,
+ "width": 5,
+ "height": 3
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 17,
+ "width": 12,
+ "height": 7
+ }
+ },
+ {
+ "id": 5765673603022034,
+ "definition": {
+ "title": "Call Trends and Distribution",
+ "background_color": "vivid_blue",
+ "show_title": true,
+ "type": "group",
+ "layout_type": "ordered",
+ "widgets": [
+ {
+ "id": 1144839007896174,
+ "definition": {
+ "title": "Voice Call Volume Over Time",
+ "title_size": "16",
+ "title_align": "left",
+ "show_legend": false,
+ "legend_layout": "auto",
+ "legend_columns": [
+ "avg",
+ "min",
+ "max",
+ "value",
+ "sum"
+ ],
+ "type": "timeseries",
+ "requests": [
+ {
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "name": "query1",
+ "data_source": "metrics",
+ "query": "sum:ringcentral.voice.total_calls{$AccountId,$Direction}.as_count()"
+ }
+ ],
+ "response_format": "timeseries",
+ "style": {
+ "palette": "dog_classic",
+ "order_by": "values",
+ "line_type": "solid",
+ "line_width": "normal"
+ },
+ "display_type": "line"
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 12,
+ "height": 4
+ }
+ },
+ {
+ "id": 2416177293091466,
+ "definition": {
+ "title": "Calls by Company Hours",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1 + query2"
+ }
+ ],
+ "queries": [
+ {
+ "query": "sum:ringcentral.voice.businesshours_calls{$AccountId,$Direction} by {companyhours}.as_count()",
+ "data_source": "metrics",
+ "name": "query1",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.voice.afterhours_calls{$AccountId,$Direction} by {companyhours}.as_count()",
+ "data_source": "metrics",
+ "name": "query2",
+ "aggregator": "sum"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 500,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 4,
+ "width": 6,
+ "height": 5
+ }
+ },
+ {
+ "id": 3071602528342088,
+ "definition": {
+ "title": "Calls by Transport",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "scalar",
+ "formulas": [
+ {
+ "formula": "query1"
+ }
+ ],
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@log.transport",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "service:voice source:ringcentral $AccountId $Direction"
+ },
+ "storage": "hot"
+ }
+ ],
+ "style": {
+ "palette": "datadog16"
+ },
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 6,
+ "y": 4,
+ "width": 6,
+ "height": 5
+ }
+ },
+ {
+ "id": 7163848489017058,
+ "definition": {
+ "title": "Calls by Origin",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "formulas": [
+ {
+ "formula": "query1 + query2"
+ }
+ ],
+ "queries": [
+ {
+ "query": "sum:ringcentral.voice.total_internal_calls{$AccountId,$Direction} by {origin}.as_count()",
+ "data_source": "metrics",
+ "name": "query1",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.voice.total_external_calls{$AccountId,$Direction} by {origin}.as_count()",
+ "data_source": "metrics",
+ "name": "query2",
+ "aggregator": "sum"
+ }
+ ],
+ "response_format": "scalar",
+ "style": {
+ "palette": "datadog16"
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 0,
+ "y": 9,
+ "width": 6,
+ "height": 5
+ }
+ },
+ {
+ "id": 6510124761908000,
+ "definition": {
+ "title": "Calls by Direction",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "formulas": [
+ {
+ "formula": "query1 + query2"
+ }
+ ],
+ "queries": [
+ {
+ "query": "sum:ringcentral.voice.total_inbound_calls{$AccountId,$Direction} by {direction}.as_count()",
+ "data_source": "metrics",
+ "name": "query1",
+ "aggregator": "sum"
+ },
+ {
+ "query": "sum:ringcentral.voice.total_outbound_calls{$AccountId,$Direction} by {direction}.as_count()",
+ "data_source": "metrics",
+ "name": "query2",
+ "aggregator": "sum"
+ }
+ ],
+ "response_format": "scalar",
+ "style": {
+ "palette": "datadog16"
+ }
+ }
+ ],
+ "type": "sunburst",
+ "legend": {
+ "type": "table"
+ }
+ },
+ "layout": {
+ "x": 6,
+ "y": 9,
+ "width": 6,
+ "height": 5
+ }
+ },
+ {
+ "id": 4907079252645858,
+ "definition": {
+ "title": "Inbound Calls by Phone Number",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_table",
+ "requests": [
+ {
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@log.from.phoneNumber",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:voice @log.direction:Inbound $AccountId $Direction"
+ },
+ "storage": "hot"
+ }
+ ],
+ "response_format": "scalar",
+ "sort": {
+ "count": 10,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ },
+ "formulas": [
+ {
+ "cell_display_mode": "bar",
+ "alias": "count",
+ "formula": "query1"
+ }
+ ]
+ }
+ ],
+ "has_search_bar": "auto"
+ },
+ "layout": {
+ "x": 0,
+ "y": 14,
+ "width": 6,
+ "height": 4
+ }
+ },
+ {
+ "id": 2987926043576390,
+ "definition": {
+ "title": "Outbound Calls by Phone Number",
+ "title_size": "16",
+ "title_align": "left",
+ "type": "query_table",
+ "requests": [
+ {
+ "queries": [
+ {
+ "data_source": "logs",
+ "name": "query1",
+ "indexes": [
+ "*"
+ ],
+ "compute": {
+ "aggregation": "count"
+ },
+ "group_by": [
+ {
+ "facet": "@log.from.phoneNumber",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ },
+ {
+ "facet": "@log.from.name",
+ "limit": 10,
+ "sort": {
+ "order": "desc",
+ "aggregation": "count"
+ }
+ }
+ ],
+ "search": {
+ "query": "source:ringcentral service:voice @log.direction:Outbound $AccountId $Direction"
+ },
+ "storage": "hot"
+ }
+ ],
+ "response_format": "scalar",
+ "sort": {
+ "count": 100,
+ "order_by": [
+ {
+ "type": "formula",
+ "index": 0,
+ "order": "desc"
+ }
+ ]
+ },
+ "formulas": [
+ {
+ "cell_display_mode": "bar",
+ "alias": "count",
+ "formula": "query1"
+ }
+ ]
+ }
+ ],
+ "has_search_bar": "auto"
+ },
+ "layout": {
+ "x": 6,
+ "y": 14,
+ "width": 6,
+ "height": 4
+ }
+ }
+ ]
+ },
+ "layout": {
+ "x": 0,
+ "y": 24,
+ "width": 12,
+ "height": 19,
+ "is_column_break": true
+ }
+ },
+ {
+ "id": 4635841880663967,
+ "definition": {
+ "title": "Call Information",
+ "title_size": "16",
+ "title_align": "left",
+ "requests": [
+ {
+ "response_format": "event_list",
+ "query": {
+ "data_source": "logs_stream",
+ "query_string": "source:ringcentral service:voice $AccountId $Direction ",
+ "indexes": [],
+ "storage": "hot",
+ "sort": {
+ "order": "desc",
+ "column": "timestamp"
+ }
+ },
+ "columns": [
+ {
+ "field": "status_line",
+ "width": "auto"
+ },
+ {
+ "field": "@log.from.name",
+ "width": "auto"
+ },
+ {
+ "field": "@log.direction",
+ "width": "auto"
+ },
+ {
+ "field": "@log.duration",
+ "width": "auto"
+ },
+ {
+ "field": "@log.result",
+ "width": "auto"
+ },
+ {
+ "field": "timestamp",
+ "width": "auto"
+ },
+ {
+ "field": "content",
+ "width": "auto"
+ },
+ {
+ "field": "source",
+ "width": "auto"
+ },
+ {
+ "field": "service",
+ "width": "auto"
+ }
+ ]
+ }
+ ],
+ "type": "list_stream"
+ },
+ "layout": {
+ "x": 0,
+ "y": 0,
+ "width": 12,
+ "height": 5
+ }
+ }
+ ],
+ "template_variables": [
+ {
+ "name": "AccountId",
+ "prefix": "accountid",
+ "available_values": [],
+ "default": "*"
+ },
+ {
+ "name": "Direction",
+ "prefix": "direction",
+ "available_values": [],
+ "default": "*"
+ }
+ ],
+ "layout_type": "ordered",
+ "notify_list": [],
+ "reflow_type": "fixed"
+}
\ No newline at end of file
diff --git a/ringcentral/assets/logs/ringcentral.yaml b/ringcentral/assets/logs/ringcentral.yaml
new file mode 100644
index 0000000000000..3698f3cc58b2b
--- /dev/null
+++ b/ringcentral/assets/logs/ringcentral.yaml
@@ -0,0 +1,150 @@
+id: ringcentral
+metric_id: ringcentral
+backend_only: false
+facets:
+ - groups:
+ - Web Access
+ name: Client IP
+ path: network.client.ip
+ source: log
+ - groups:
+ - User
+ name: User Name
+ path: usr.name
+ source: log
+ - groups:
+ - Geoip
+ name: City Name
+ path: network.client.geoip.city.name
+ source: log
+ - groups:
+ - Geoip
+ name: Continent Code
+ path: network.client.geoip.continent.code
+ source: log
+ - groups:
+ - Geoip
+ name: Continent Name
+ path: network.client.geoip.continent.name
+ source: log
+ - groups:
+ - Geoip
+ name: Country ISO Code
+ path: network.client.geoip.country.iso_code
+ source: log
+ - groups:
+ - Geoip
+ name: Country Name
+ path: network.client.geoip.country.name
+ source: log
+ - groups:
+ - Geoip
+ name: Subdivision ISO Code
+ path: network.client.geoip.subdivision.iso_code
+ source: log
+ - groups:
+ - Geoip
+ name: Subdivision Name
+ path: network.client.geoip.subdivision.name
+ source: log
+pipeline:
+ type: pipeline
+ name: RingCentral
+ enabled: true
+ filter:
+ query: "source:ringcentral"
+ processors:
+ - type: service-remapper
+ name: Define `service` as the official service of the log
+ enabled: true
+ sources:
+ - service
+ - type: pipeline
+ name: Voice
+ enabled: true
+ filter:
+ query: "service:voice"
+ processors:
+ - type: date-remapper
+ name: Define `log.startTime` as the official date of the log
+ enabled: true
+ sources:
+ - log.startTime
+ - type: attribute-remapper
+ name: Map `log.extension.id` to `extensionId`
+ enabled: true
+ sources:
+ - log.extension.id
+ sourceType: attribute
+ target: extensionId
+ targetType: attribute
+ preserveSource: false
+ overrideOnConflict: false
+ - type: attribute-remapper
+ name: Map attribute `log.direction` to tag `direction`
+ enabled: true
+ sources:
+ - log.direction
+ sourceType: attribute
+ target: direction
+ targetType: tag
+ preserveSource: true
+ overrideOnConflict: false
+ - type: attribute-remapper
+ name: Map attribute `enrichment_details.accountId` to tag `accountid`
+ enabled: true
+ sources:
+ - enrichment_details.accountId
+ sourceType: attribute
+ target: accountid
+ targetType: tag
+ preserveSource: true
+ overrideOnConflict: false
+ - type: pipeline
+ name: Audit
+ enabled: true
+ filter:
+ query: "service:audit"
+ processors:
+ - type: date-remapper
+ name: Define `eventTime` as the official date of the log
+ enabled: true
+ sources:
+ - eventTime
+ - type: attribute-remapper
+ name: Map `initiator.extensionId` to `extensionId`
+ enabled: true
+ sources:
+ - initiator.extensionId
+ sourceType: attribute
+ target: extensionId
+ targetType: attribute
+ preserveSource: false
+ overrideOnConflict: false
+ - type: attribute-remapper
+ name: Map `clientIp` to `network.client.ip`
+ enabled: true
+ sources:
+ - clientIp
+ sourceType: attribute
+ target: network.client.ip
+ targetType: attribute
+ preserveSource: false
+ overrideOnConflict: false
+ - type: geo-ip-parser
+ name: GeoIP for the 'network.client.ip'
+ enabled: true
+ sources:
+ - network.client.ip
+ target: network.client.geoip
+ ip_processing_behavior: do-nothing
+ - type: attribute-remapper
+ name: Map `initiator.name` to `usr.name`
+ enabled: true
+ sources:
+ - initiator.name
+ sourceType: attribute
+ target: usr.name
+ targetType: attribute
+ preserveSource: false
+ overrideOnConflict: false
diff --git a/ringcentral/assets/logs/ringcentral_tests.yaml b/ringcentral/assets/logs/ringcentral_tests.yaml
new file mode 100644
index 0000000000000..fc616112f8693
--- /dev/null
+++ b/ringcentral/assets/logs/ringcentral_tests.yaml
@@ -0,0 +1,329 @@
+id: ringcentral
+tests:
+ - sample: |-
+ {
+ "enrichment_details": {
+ "accountId": "000000000"
+ },
+ "log": {
+ "reason": "Hang Up",
+ "extension": {
+ "uri": "https://platform.ringcentral.com/restapi/v1.0/account/000000000/extension/12345678",
+ "id": 12345678
+ },
+ "reasonDescription": "The caller hung up before the call was answered.",
+ "lastModifiedTime": "2024-07-23T11:48:10.032Z",
+ "sessionId": "1234567890",
+ "internalType": "International",
+ "transport": "VoIP",
+ "type": "Voice",
+ "uri": "https://platform.ringcentral.com/restapi/v1.0/account/000000000/call-log/aKH2vDGxBbeYjUA?view=Detailed",
+ "billing": {
+ "costIncluded": 0,
+ "costPurchased": 0
+ },
+ "duration": 16,
+ "result": "Hang Up",
+ "telephonySessionId": "s-a7280be05beffz190df6b11d4z296c790000",
+ "legs": [
+ {
+ "reason": "Hang Up",
+ "extension": {
+ "id": 12345678,
+ "uri": "https://platform.ringcentral.com/restapi/v1.0/account/000000000/extension/12345678"
+ },
+ "reasonDescription": "The caller hung up before the call was answered.",
+ "legType": "SipToPstnUnmetered",
+ "internalType": "International",
+ "transport": "VoIP",
+ "type": "Voice",
+ "master": true,
+ "duration": 16,
+ "result": "Hang Up",
+ "telephonySessionId": "s-a7280be05beffz190df6b11d4z296c790000",
+ "action": "VoIP Call",
+ "startTime": "2024-07-23T12:19:34.664Z",
+ "from": {
+ "phoneNumber": "+00000000000",
+ "name": "xxxxxxxxxxx",
+ "extensionId": "12345678",
+ "device": {
+ "id": "1234567890",
+ "uri": "https://platform.ringcentral.com/restapi/v1.0/account/000000000/device/000000000"
+ }
+ },
+ "to": {
+ "phoneNumber": "+0000000000"
+ },
+ "partyId": "p-a7280be05beffz190df6b11d4z296c790000-2",
+ "durationMs": 1687,
+ "direction": "Outbound"
+ }
+ ],
+ "action": "VoIP Call",
+ "startTime": "2024-08-22T17:21:34.668Z",
+ "from": {
+ "phoneNumber": "+000000000",
+ "name": "xxxxxxx",
+ "extensionId": "12345678",
+ "device": {
+ "id": "0000000000",
+ "uri": "https://platform.ringcentral.com/restapi/v1.0/account/000000000/device/00000000"
+ }
+ },
+ "id": "000000000",
+ "to": {
+ "phoneNumber": "+0000000000"
+ },
+ "partyId": "p-a7280be05beffz190df6b11d4z296c790000-2",
+ "durationMs": 1607,
+ "direction": "Outbound"
+ }
+ }
+ service: "voice"
+ result:
+ custom:
+ enrichment_details:
+ accountId: "000000000"
+ extensionId: 12345678
+ log:
+ action: "VoIP Call"
+ billing:
+ costIncluded: 0
+ costPurchased: 0
+ direction: "Outbound"
+ duration: 16
+ durationMs: 1607
+ extension:
+ uri: "https://platform.ringcentral.com/restapi/v1.0/account/000000000/extension/12345678"
+ from:
+ device:
+ id: "0000000000"
+ uri: "https://platform.ringcentral.com/restapi/v1.0/account/000000000/device/00000000"
+ extensionId: "12345678"
+ name: "xxxxxxx"
+ phoneNumber: "+000000000"
+ id: "000000000"
+ internalType: "International"
+ lastModifiedTime: "2024-07-23T11:48:10.032Z"
+ legs:
+ -
+ reason: "Hang Up"
+ extension:
+ id: 12345678
+ uri: "https://platform.ringcentral.com/restapi/v1.0/account/000000000/extension/12345678"
+ reasonDescription: "The caller hung up before the call was answered."
+ legType: "SipToPstnUnmetered"
+ internalType: "International"
+ transport: "VoIP"
+ type: "Voice"
+ master: true
+ duration: 16
+ result: "Hang Up"
+ telephonySessionId: "s-a7280be05beffz190df6b11d4z296c790000"
+ action: "VoIP Call"
+ startTime: "2024-07-23T12:19:34.664Z"
+ from:
+ phoneNumber: "+00000000000"
+ name: "xxxxxxxxxxx"
+ extensionId: "12345678"
+ device:
+ id: "1234567890"
+ uri: "https://platform.ringcentral.com/restapi/v1.0/account/000000000/device/000000000"
+ to:
+ phoneNumber: "+0000000000"
+ partyId: "p-a7280be05beffz190df6b11d4z296c790000-2"
+ durationMs: 1687
+ direction: "Outbound"
+ partyId: "p-a7280be05beffz190df6b11d4z296c790000-2"
+ reason: "Hang Up"
+ reasonDescription: "The caller hung up before the call was answered."
+ result: "Hang Up"
+ sessionId: "1234567890"
+ startTime: "2024-08-22T17:21:34.668Z"
+ telephonySessionId: "s-a7280be05beffz190df6b11d4z296c790000"
+ to:
+ phoneNumber: "+0000000000"
+ transport: "VoIP"
+ type: "Voice"
+ uri: "https://platform.ringcentral.com/restapi/v1.0/account/000000000/call-log/aKH2vDGxBbeYjUA?view=Detailed"
+ message: |-
+ {
+ "enrichment_details" : {
+ "accountId" : "000000000"
+ },
+ "log" : {
+ "reason" : "Hang Up",
+ "extension" : {
+ "id" : 12345678,
+ "uri" : "https://platform.ringcentral.com/restapi/v1.0/account/000000000/extension/12345678"
+ },
+ "reasonDescription" : "The caller hung up before the call was answered.",
+ "lastModifiedTime" : "2024-07-23T11:48:10.032Z",
+ "sessionId" : "1234567890",
+ "internalType" : "International",
+ "transport" : "VoIP",
+ "type" : "Voice",
+ "uri" : "https://platform.ringcentral.com/restapi/v1.0/account/000000000/call-log/aKH2vDGxBbeYjUA?view=Detailed",
+ "billing" : {
+ "costIncluded" : 0,
+ "costPurchased" : 0
+ },
+ "duration" : 16,
+ "result" : "Hang Up",
+ "telephonySessionId" : "s-a7280be05beffz190df6b11d4z296c790000",
+ "legs" : [ {
+ "reason" : "Hang Up",
+ "extension" : {
+ "id" : 12345678,
+ "uri" : "https://platform.ringcentral.com/restapi/v1.0/account/000000000/extension/12345678"
+ },
+ "reasonDescription" : "The caller hung up before the call was answered.",
+ "legType" : "SipToPstnUnmetered",
+ "internalType" : "International",
+ "transport" : "VoIP",
+ "type" : "Voice",
+ "master" : true,
+ "duration" : 16,
+ "result" : "Hang Up",
+ "telephonySessionId" : "s-a7280be05beffz190df6b11d4z296c790000",
+ "action" : "VoIP Call",
+ "startTime" : "2024-07-23T12:19:34.664Z",
+ "from" : {
+ "phoneNumber" : "+00000000000",
+ "name" : "xxxxxxxxxxx",
+ "extensionId" : "12345678",
+ "device" : {
+ "id" : "1234567890",
+ "uri" : "https://platform.ringcentral.com/restapi/v1.0/account/000000000/device/000000000"
+ }
+ },
+ "to" : {
+ "phoneNumber" : "+0000000000"
+ },
+ "partyId" : "p-a7280be05beffz190df6b11d4z296c790000-2",
+ "durationMs" : 1687,
+ "direction" : "Outbound"
+ } ],
+ "action" : "VoIP Call",
+ "startTime" : "2024-08-22T17:21:34.668Z",
+ "from" : {
+ "phoneNumber" : "+000000000",
+ "name" : "xxxxxxx",
+ "extensionId" : "12345678",
+ "device" : {
+ "id" : "0000000000",
+ "uri" : "https://platform.ringcentral.com/restapi/v1.0/account/000000000/device/00000000"
+ }
+ },
+ "id" : "000000000",
+ "to" : {
+ "phoneNumber" : "+0000000000"
+ },
+ "partyId" : "p-a7280be05beffz190df6b11d4z296c790000-2",
+ "durationMs" : 1607,
+ "direction" : "Outbound"
+ }
+ }
+ service: "voice"
+ tags:
+ - "source:LOGS_SOURCE"
+ - "direction:outbound"
+ - "accountid:000000000"
+ timestamp: 1724347294668
+ -
+ sample: |-
+ {
+ "accountId" : "000000000",
+ "clientIp" : "218.57.154.108",
+ "initiator" : {
+ "role" : "Standard (International)",
+ "extensionNumber" : "000",
+ "name" : "xxxxxx",
+ "extensionId" : "12345678"
+ },
+ "eventTime" : "2024-08-06T10:50:19.442Z",
+ "actionId" : "CHANGE_USER_ROLE",
+ "details" : {
+ "parameters" : [ {
+ "value" : "Super Admin",
+ "key" : "oldRoleName"
+ }, {
+ "value" : "Standard (International)",
+ "key" : "newRoleName"
+ } ]
+ },
+ "id" : "4b52af9-beee-7779d1e802c7",
+ "eventType" : "UPDATE",
+ "target" : {
+ "extensionNumber" : "000",
+ "name" : "xxxxxx",
+ "objectId" : "12345678",
+ "objectType" : "Extension"
+ }
+ }
+ service: "audit"
+ result:
+ custom:
+ accountId: "000000000"
+ actionId: "CHANGE_USER_ROLE"
+ details:
+ parameters:
+ -
+ value: "Super Admin"
+ key: "oldRoleName"
+ -
+ value: "Standard (International)"
+ key: "newRoleName"
+ eventTime: "2024-08-06T10:50:19.442Z"
+ eventType: "UPDATE"
+ extensionId: "12345678"
+ id: "4b52af9-beee-7779d1e802c7"
+ initiator:
+ extensionNumber: "000"
+ role: "Standard (International)"
+ network:
+ client:
+ geoip: {}
+ ip: "218.57.154.108"
+ target:
+ extensionNumber: "000"
+ name: "xxxxxx"
+ objectId: "12345678"
+ objectType: "Extension"
+ usr:
+ name: "xxxxxx"
+ message: |-
+ {
+ "accountId" : "000000000",
+ "clientIp" : "218.57.154.108",
+ "initiator" : {
+ "role" : "Standard (International)",
+ "extensionNumber" : "000",
+ "name" : "xxxxxx",
+ "extensionId" : "12345678"
+ },
+ "eventTime" : "2024-08-06T10:50:19.442Z",
+ "actionId" : "CHANGE_USER_ROLE",
+ "details" : {
+ "parameters" : [ {
+ "value" : "Super Admin",
+ "key" : "oldRoleName"
+ }, {
+ "value" : "Standard (International)",
+ "key" : "newRoleName"
+ } ]
+ },
+ "id" : "4b52af9-beee-7779d1e802c7",
+ "eventType" : "UPDATE",
+ "target" : {
+ "extensionNumber" : "000",
+ "name" : "xxxxxx",
+ "objectId" : "12345678",
+ "objectType" : "Extension"
+ }
+ }
+ service: "audit"
+ tags:
+ - "source:LOGS_SOURCE"
+ timestamp: 1722941419442
\ No newline at end of file
diff --git a/ringcentral/assets/monitors/sms_budget_overrun.json b/ringcentral/assets/monitors/sms_budget_overrun.json
new file mode 100644
index 0000000000000..8ea84682395e0
--- /dev/null
+++ b/ringcentral/assets/monitors/sms_budget_overrun.json
@@ -0,0 +1,35 @@
+{
+ "version": 2,
+ "created_at": "2024-08-07",
+ "last_updated_at": "2024-08-07",
+ "title": "SMS budget overrun",
+ "description": "The monitor tracks and alerts when the total cost for RingCentral SMS messages exceeds the daily allocated budget. It provides notifications to ensure timely awareness and action can be taken to manage SMS usage within the allocated budget limits.",
+ "definition": {
+ "id": 150232092,
+ "name": "[RingCentral] SMS budget overrun",
+ "type": "query alert",
+ "query": "sum(last_1mo):sum:ringcentral.message.cost_total{*} by {accountid}.as_count() > 500",
+ "message": "{{#is_alert}}\nThe total cost for RingCentral SMS has exceeded the alert threshold.\nThe total cost incurred is {{value}} , which exceeds the threshold of {{threshold}} . Please review your RingCentral account.\n{{/is_alert}}\n\n{{#is_warning}}\nThe total cost for RingCentral SMS has exceeded the warning threshold.\nThe total cost incurred is {{value}} , which exceeds the threshold of {{warn_threshold}} . Please review your RingCentral account.\n{{/is_warning}}",
+ "tags": [
+ "integration:ringcentral"
+ ],
+ "options": {
+ "thresholds": {
+ "critical": 500,
+ "warning": 400
+ },
+ "notify_audit": false,
+ "include_tags": true,
+ "notify_no_data": false,
+ "new_group_delay": 60,
+ "silenced": {}
+ },
+ "priority": null,
+ "restriction_policy": {
+ "bindings": []
+ }
+ },
+ "tags": [
+ "integration:ringcentral"
+ ]
+}
\ No newline at end of file
diff --git a/ringcentral/assets/monitors/sms_high_error_rate_detected.json b/ringcentral/assets/monitors/sms_high_error_rate_detected.json
new file mode 100644
index 0000000000000..88cf0c9114a40
--- /dev/null
+++ b/ringcentral/assets/monitors/sms_high_error_rate_detected.json
@@ -0,0 +1,34 @@
+{
+ "version": 2,
+ "created_at": "2024-08-07",
+ "last_updated_at": "2024-08-07",
+ "title": "SMS error rate is higher than usual",
+ "description": "The error rate rises when a significant number of SMS messages fail to be delivered or sent. This monitor tracks the error rate for SMS delivered/sent via RingCentral, ensuring that any spikes in errors are quickly detected to maintain the reliability of SMS delivery.",
+ "definition": {
+ "id": 150232470,
+ "name": "[RingCentral] SMS high error rate detected",
+ "type": "query alert",
+ "query": "sum(last_1h):(sum:ringcentral.message.delivery_failed_error_code{*} by {accountid}.as_count() + sum:ringcentral.message.sending_failed_error_code{*} by {accountid}.as_count()) / sum:ringcentral.message.total_messages{*} by {accountid}.as_count() > 0.05",
+ "message": "The high error rate detected while sending SMS through RingCentral within the last hour. Errors have exceeded the threshold, which may impact SMS delivery reliability.",
+ "tags": [
+ "integration:ringcentral"
+ ],
+ "options": {
+ "thresholds": {
+ "critical": 0.05
+ },
+ "notify_audit": false,
+ "include_tags": true,
+ "notify_no_data": false,
+ "new_group_delay": 60,
+ "silenced": {}
+ },
+ "priority": null,
+ "restriction_policy": {
+ "bindings": []
+ }
+ },
+ "tags": [
+ "integration:ringcentral"
+ ]
+}
\ No newline at end of file
diff --git a/ringcentral/assets/ringcentral.svg b/ringcentral/assets/ringcentral.svg
new file mode 100644
index 0000000000000..1661cd421f141
--- /dev/null
+++ b/ringcentral/assets/ringcentral.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ringcentral/images/ringcentral_audit_1.png b/ringcentral/images/ringcentral_audit_1.png
new file mode 100644
index 0000000000000..2b85925853fca
Binary files /dev/null and b/ringcentral/images/ringcentral_audit_1.png differ
diff --git a/ringcentral/images/ringcentral_audit_2.png b/ringcentral/images/ringcentral_audit_2.png
new file mode 100644
index 0000000000000..66f1624395995
Binary files /dev/null and b/ringcentral/images/ringcentral_audit_2.png differ
diff --git a/ringcentral/images/ringcentral_message.png b/ringcentral/images/ringcentral_message.png
new file mode 100644
index 0000000000000..f08c3fa0d49fa
Binary files /dev/null and b/ringcentral/images/ringcentral_message.png differ
diff --git a/ringcentral/images/ringcentral_voice_call.png b/ringcentral/images/ringcentral_voice_call.png
new file mode 100644
index 0000000000000..29169bd9dca2f
Binary files /dev/null and b/ringcentral/images/ringcentral_voice_call.png differ
diff --git a/ringcentral/manifest.json b/ringcentral/manifest.json
index f7cc51f2eb127..a3d2b2984e18d 100644
--- a/ringcentral/manifest.json
+++ b/ringcentral/manifest.json
@@ -10,7 +10,28 @@
"changelog": "CHANGELOG.md",
"description": "Gain insights into RingCentral Voice, A2P SMS and Audit data.",
"title": "RingCentral",
- "media": [],
+ "media": [
+ {
+ "caption": "RingCentral Audit",
+ "image_url": "images/ringcentral_audit_1.png",
+ "media_type": "image"
+ },
+ {
+ "caption": "RingCentral Audit",
+ "image_url": "images/ringcentral_audit_2.png",
+ "media_type": "image"
+ },
+ {
+ "caption": "RingCentral Message",
+ "image_url": "images/ringcentral_message.png",
+ "media_type": "image"
+ },
+ {
+ "caption": "RingCentral Voice Call",
+ "image_url": "images/ringcentral_voice_call.png",
+ "media_type": "image"
+ }
+ ],
"classifier_tags": [
"Category::Log Collection",
"Category::Metrics",
@@ -30,13 +51,22 @@
},
"metrics": {
"prefix": "ringcentral.",
- "check": [],
+ "check": ["ringcentral.voice.total_calls", "ringcentral.message.total_messages"],
"metadata_path": "metadata.csv"
},
"service_checks": {
"metadata_path": "assets/service_checks.json"
}
},
+ "dashboards": {
+ "RingCentral Audit": "assets/dashboards/ringcentral_audit.json",
+ "RingCentral Message": "assets/dashboards/ringcentral_message.json",
+ "RingCentral Voice Call": "assets/dashboards/ringcentral_voice_call.json"
+ },
+ "monitors": {
+ "sms_budget_overrun": "assets/monitors/sms_budget_overrun.json",
+ "sms_high_error_rate_detected": "assets/monitors/sms_high_error_rate_detected.json"
+ },
"logs": {
"source": "ringcentral"
}
diff --git a/ringcentral/metadata.csv b/ringcentral/metadata.csv
index 60d916455a42f..fafec1febbc20 100644
--- a/ringcentral/metadata.csv
+++ b/ringcentral/metadata.csv
@@ -1 +1,37 @@
-metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags
\ No newline at end of file
+metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric,sample_tags
+ringcentral.message.cost_total,count,,dollar,,Total cost of A2P SMS messages,0,ringcentral,Cost Total,,
+ringcentral.message.delivered_cost,count,,dollar,,The cost for the delivered messages,0,ringcentral,Delivered Cost,,
+ringcentral.message.delivered_messages,count,,,,Total number of Delivered messages,0,ringcentral,Delivered Messages,,
+ringcentral.message.delivery_failed_cost,count,,dollar,,The cost for the delivery failed messages,0,ringcentral,Delivery Failed Cost,,
+ringcentral.message.delivery_failed_error_code,count,,,,Total number of delivery failed error codes,0,ringcentral,Delivery Failed Error Code,,
+ringcentral.message.delivery_failed_messages,count,,,,Total number of failed to deliver messages,0,ringcentral,Delivery Failed Messages,,
+ringcentral.message.queued_cost,count,,dollar,,The cost for the queued messages,0,ringcentral,Queued Cost,,
+ringcentral.message.queued_messages,count,,,,Total number of Queued messages,0,ringcentral,Queued Messages,,
+ringcentral.message.sending_failed_cost,count,,dollar,,The cost for the sending failed messages,0,ringcentral,Sending Failed Cost,,
+ringcentral.message.sending_failed_error_code,count,,,,Total number of sending failed error codes,0,ringcentral,Sending Failed Error Code,,
+ringcentral.message.sending_failed_messages,count,,,,Total number of failed to send messages,0,ringcentral,Sending Failed Messages,,
+ringcentral.message.sent_cost,count,,dollar,,The cost for the sent messages,0,ringcentral,Sent Cost,,
+ringcentral.message.sent_messages,count,,,,Total number of Sent messages,0,ringcentral,Sent Messages,,
+ringcentral.message.total_messages,count,,,,Total number of A2P SMS messages,0,ringcentral,Total Messages,,
+ringcentral.voice.abandoned_voice_calls,count,,,,Total number of abandoned voice calls,0,ringcentral,Abandoned Voice Calls,,
+ringcentral.voice.accepted_voice_calls,count,,,,Total number of accepted voice calls,0,ringcentral,Accepted Voice Calls,,
+ringcentral.voice.afterhours_calls,count,,,,Total number of after hours calls,0,ringcentral,Afterhours Calls,,
+ringcentral.voice.answered_voice_calls,count,,,,Total number of answered voice calls,0,ringcentral,Answered Voice Calls,,
+ringcentral.voice.businesshours_calls,count,,,,Total number of calls during business hours,0,ringcentral,Businesshours Calls,,
+ringcentral.voice.completed_voice_calls,count,,,,Total number of completed voice calls,0,ringcentral,Completed Voice Calls,,
+ringcentral.voice.connected_voice_calls,count,,,,Total number of connected voice calls,0,ringcentral,Connected Voice Calls,,
+ringcentral.voice.external_call_duration,count,,second,,Total duration of external voice calls,0,ringcentral,External Call Duration,,
+ringcentral.voice.inbound_call_duration,count,,second,,Total duration of inbound voice calls,0,ringcentral,Inbound Call Duration,,
+ringcentral.voice.internal_call_duration,count,,second,,Total duration of internal voice calls,0,ringcentral,Internal Call Duration,,
+ringcentral.voice.missed_voice_calls,count,,,,Total number of missed voice calls,0,ringcentral,Missed Voice Calls,,
+ringcentral.voice.notanswered_voice_calls,count,,,,Total number of not answered voice calls,0,ringcentral,Notanswered Voice Calls,,
+ringcentral.voice.notconnected_voice_calls,count,,,,Total number of not connected voice calls,0,ringcentral,Notconnected Voice Calls,,
+ringcentral.voice.outbound_call_duration,count,,second,,Total duration of outbound voice calls,0,ringcentral,Outbound Call Duration,,
+ringcentral.voice.total_calls,count,,,,Total number of voice calls,0,ringcentral,Total Calls,,
+ringcentral.voice.total_calls_minutes,count,,minute,,Total minutes of voice calls,0,ringcentral,Total Calls Minutes,,
+ringcentral.voice.total_external_calls,count,,,,Total number of external voice calls,0,ringcentral,Total External Calls,,
+ringcentral.voice.total_inbound_calls,count,,,,Total number of inbound voice calls,0,ringcentral,Total Inbound Calls,,
+ringcentral.voice.total_internal_calls,count,,,,Total number of internal voice calls,0,ringcentral,Total Internal Calls,,
+ringcentral.voice.total_outbound_calls,count,,,,Total number of outbound voice calls,0,ringcentral,Total Outbound Calls,,
+ringcentral.voice.unknown_voice_calls,count,,,,Total number of unknown voice calls,0,ringcentral,Unknown Voice Calls,,
+ringcentral.voice.voicemail_voice_calls,count,,,,Total number of voicemail voice calls,0,ringcentral,Voicemail Voice Calls,,
\ No newline at end of file