This chapter provides a description of the database schema and instructions for provisioning the Easy 0 databases through both the web UI and the API.
Information that is stored in the database can be divided into the following tables: Administrator, Service Provider, and Call Plan.
The CSV files to be imported for any administrator account should have the following format:
Column |
Value |
---|---|
1 |
Username |
2 |
Role ID |
3 |
First Name |
4 |
Last Name |
5 |
|
6 |
Permissions |
A unique string that is the user name for this user. Limit of 64 characters. Can contain only lowercase characters, numbers, or underscores.
A string that defines the type of administrator that is being created. Accepted values are:
platform_owner
service_provider:<service_provider_name>
A string that is the first name of this user. Limit of 250 characters.
A string that is the last name of this user. Limit of 250 characters.
A string that is the email address for this user. Limit of 250 characters.
An array of permission groups that this user is a member of. Permissions are dependent on the specified role_id of the created administrator.
easy0_platform_administrator_provision
easy0_platform_administrator_view
easy0_platform_administrator_edit
easy0_service_provider_provision
easy0_service_provider_view
easy0_service_provider_edit
easy0_service_provision
easy0_service_view
easy0_service_edit
easy0_call_pattern_provision
easy0_call_pattern_view
easy0_call_pattern_edit
easy0_service_administrator_provision
easy0_service_administrator_view
easy0_service_administrator_edit
easy0_settings_view
easy0_settings_edit
easy0_statistics_view
The CSV files to be imported for Service Providers should have the following format:
Column |
Value |
---|---|
1 |
Name |
2 |
Display Name |
3 |
First Name |
4 |
Last Name |
5 |
|
6 |
Address |
7 |
Phone |
8 |
Notes |
A unique string that is the name of this Service Provider. Limit of 64 characters.
An unconstrained string used as a display name. Limit of 250 characters.
A string that is the first name of a contact for this Service Provider. Limit of 250 characters.
A string that is the last name of a contact for this Service Provider. Limit of 250 characters.
A string that is the email address of this Service Provider, where notifications and password reset requests will be sent. Limit of 250 characters.
A string that is the physical address of this Service Provider. Limit of 250 characters.
A string that is the primary phone number of this Service Provider. Limit of 250 characters.
A string that is a free-form notes field. Limit of 2048 characters.
The CSV files to be imported for call plans should have the following format:
Column |
Value |
---|---|
1 |
Name |
2 |
Service Provider Name |
3 |
Priority |
4 |
Rules |
A string that is the name of this call plan.
A unique string that is the name of the Service Provider using this call plan. Must match an existing Service Provider.
An integer that is the priority of this call plan. Call plans are evaluated by the routing engine in ascending order.
A JSON object that defines the rules for this call plan. The format is as follows:
{
"label": "<examplerule>",
"criteria": {...},
"destination": {...}
}
- label
A string that is the label for this rule.
- criteria
A JSON object that defines the criteria for this rule. The format is as follows:
{
"always": true,
"time": ["HH:mm","HH:mm"],
"date": ["YYYY/MM/DD.HH:mm","YYYY/MM/DD.HH:mm"],
"day": [["sunday"],["monday"],...],
"percent": dd,
"match": [["123xxxxxxx"],["223xxxxxxx"]...],
"npa": [["AL"],["AK"],["AS"]...],
"pointcode": [["000-000-001",null],["000-000-002","000-000-003"]],
"lata": [["Digits","123"],["Intra",null],["Inter",null]],
"zip": [["12345"],["22345"],...]
}
- destination
A JSON object that defines the destination for this rule. The format is as follows:
{
"number": "1234567890",
"trunk": [["12345"],["22345"],...],
"trunk_op": [["12345","1234567890"],["22345","2234567890"]...],
"sip": "1234567890@example.com",
"continue": false,
"terminate": true,
"rule": [{...}]
}
A CSV file can be used to import large amounts of information into a database. Importing data appends the new information to the existing database, and any conflicting records are not overwritten. Each table has at least one unique column that is used to determine if there are conflicting records. Any database entries that are not in the CSV file remain unchanged in the database after the file has been imported.
Note
All columns must be included. If the field is blank, make sure that the column is still included in the CSV file.
Note
When importing CSV files into Easy 0, do not log off until the import is complete. Logging off before the import is complete will cause the entire import of data to fail.
Import Using the Web UI
Whether the database operation to import records from a file is available depends on which page is currently displayed.
Click Import on the task bar.
Click Choose File to browse for a CSV file to import.
Click Start Import.
The file is uploaded and the import begins and runs in the background.
Note
Click Cancel at any time to close the window and stop the import.
The status of an import can be found on the My Account page under Job Logs.
Import Using the API
To import data with the API, the user sends a POST command to the specific object.
The example below shows a Service Provider importing a Subscriber.
curl -X POST \
-H "Content-Type:easy0/json" localhost/easy0/api/job/service_provider:easy0_service_provider?executable=restworkx-easy0 \
-H "Authorization:Basic <secure-access-token>" \
-d '{"job_type":"import","in_file":"/var/opt/xpressworkx/app-manager/easy0/media/upload/subscriber-import.csv","object":"subscriber","service_provider_name":"easy0_service_provider"}'
Which would return a message such as:
"meta": {
"executable": "restworkx-easy0",
"code": 200,
"encoding": "ascii",
"scope": "success",
"records_shown": 1,
"message": "",
"authorization": "Basic <secure-access-token>"
},
"data": [{
"scope": "job",
"meta": {
"modified_by": "system",
"txnid": null,
"modified": "2022-04-07 11:39:44.724128",
"created_by": "system",
"created": "2022-04-07 11:39:44.724102"
},
"links": {
"self": {
"scope": "job",
"identifier": {
"job_id": 104,
"out_file": "/var/opt/xpressworkx/app-manager/easy0/media/download/subscriber-import-2022-04-07-23770cb05d.csv"
},
"uri": "/job"
},
},
"attributes": {
"status": "processing",
"out_file": "/var/opt/xpressworkx/app-manager/easy0/media/download/subscriber-import-2022-04-07-23770cb05d.csv",
"pid": null,
"object": "subscriber",
"job_type": "import",
"job_id": 104,
"elapsed": "0",
"in_file": "/var/opt/xpressworkx/app-manager/easy0/media/upload/subscriber-import.csv",
"kwargs": null,
"progress": null,
"role_id": "service_provider:easy0_service_provider",
"output_hash": null
},
}],
"jsonapi": {
"version": "1.2-2",
"name": "Easy Zero",
"short_name": "easy0",
"author": "IMSWorkX, Inc."
}
Note
The parameter executable=restworkx-easy0 is required to import an object.
Information can be exported from the database, saved, and then imported to restore a database.
Export Using the Web UI
Whether the database operation to export records to a file is available depends on which page is currently displayed.
Click Export on the task bar.
Click Start Export.
The output CSV file can be found on the My Account page under Job Logs.
Export Using the API
To export data with the API, the user sends a POST command to the specific object.
The example below shows a Platform Owner exporting Service Providers.
curl -X POST \
-H "Content-Type:easy0/json" localhost/easy0/api/job/platform_owner?executable=restworkx-easy0 \
-H "Authorization:Basic <secure-access-token>" \
-d '{"job_type": "export","object": "service_provider"}'
Which would return a message such as:
"meta": {
"executable": "restworkx-easy0",
"code": 200,
"encoding": "ascii",
"scope": "success",
"records_shown": 1,
"message": "",
"authorization": "Basic <secure-access-token>"
},
"data": [{
"scope": "job",
"meta": {
"modified_by": "system",
"txnid": null,
"modified": "2022-04-07 13:50:20.834266",
"created_by": "system",
"created": "2022-04-07 13:50:20.834246"
},
"links": {
"self": {
"scope": "job",
"identifier": {
"job_id": 109,
"out_file": "/var/opt/xpressworkx/app-manager/easy0/media/download/service_provider-export-2022-04-07-e996a4f9dc.csv"
},
"uri": "/job"
},
},
"attributes": {
"status": "processing",
"out_file": "/var/opt/xpressworkx/app-manager/easy0/media/download/service_provider-export-2022-04-07-e996a4f9dc.csv",
"pid": null,
"object": "service_provider",
"job_type": "export",
"job_id": 109,
"elapsed": "0",
"in_file": null,
"kwargs": null,
"progress": null,
"role_id": "platform_owner",
"output_hash": null
},
}],
"jsonapi": {
"version": "1.2-2",
"name": "Easy Zero",
"short_name": "easy0",
"author": "IMSWorkX, Inc."
}
Note
The parameter executable=restworkx-easy0 is required to export an object.
The CSV files to be exported for Call Detail Records (CDRs) will have the following format:
Column |
Value |
---|---|
1 |
Service Provider Name |
2 |
Subscriber Name |
3 |
CDR ID |
4 |
Start Time |
5 |
End Time |
6 |
Additional Data |
7 |
Events |
A unique string that is the name of the Service Provider for this Subscriber using this service. Must match an existing Service Provider.
A unique string that is the name of the Subscriber using this service. Must match an existing Subscriber.
A unique string that is the identifier of this specific CDR.
A timestamp indicating the date and time this specific call started.
A timestamp indicating the date and time this specific call ended.
An array that is not populated in this version of Easy 0. Currently, events generate an Additional Data field, which is the returned response from screening this specific call.
A string that is all of the events for this specific call.
Easy 0 does not have an explicit delete function for any of its data. Instead, Easy 0 has the ability to archive data that is not in use.
Archived data remains in the Easy 0 application, but this data is not used when screening calls. Archived data can then be returned to the live data by restoring or can be removed completely by purging. When viewing data through the web UI or with an API request, the user can switch between the live and archive database to see all data.
Note
By default, Easy 0 permanently purges archived data after seven days. This can be changed by a Platform Owner in Settings.
Data that is not currently in use by the Easy 0 application can be removed from the live database by archiving the data. Provisioned data can be archived in the web UI or through the API.
Archive a Single Object Using the Web UI
Navigate to the object that you want to archive.
Right-click on the object to be archived.
Click Archive.
The object will be moved to the archive database.
Archive Multiple Objects Using the Web UI
Navigate to the objects that you want to archive.
Select the objects by clicking on the first object then:
Hold the Shift key and click another object to select everything between and including the two selected objects.
Hold the Ctrl key and click the other objects you want.
Click Archive Selected on the bottom of the page.
The objects will be moved to the archive database.
Archive Using the API
To archive an object with the API, the user sends a DELETE command to the specific object.
The example below shows a user archiving a Subscriber object called new_subscriber.
curl -X DELETE \
-H "Authorization:Basic <secure-access-token>" \
-d 'localhost/easy0/api/subscriber/service_test/new_subscriber'
Which would return a message such as:
"meta": {
"encoding": "ascii",
"records_shown": 0,
"message": "Record successfully archived or restored.",
"code": "205",
"scope": "success"
},
"data": [],
"jsonapi": {
"version": "1.2-2",
"name": "Easy Zero",
"short_name": "easy0",
"author": "IMSWorkX, Inc."
}
Restoring data will move data from the archive database to the live database. Restoring data can be done through the web UI or the API.
Restore a Single Object Using the Web UI
Switch to the archive view by toggling Live / Archive Database in the task bar.
Navigate to the object that you want to restore.
Right-click on the object to be restored.
Click Restore.
The object will be moved to the live database.
Restore Multiple Objects Using the Web UI
Switch to the archive view by toggling Live / Archive Database in the task bar.
Navigate to the objects that you want to restore.
Select the objects by clicking on the first object then:
Hold the Shift key and click another object to select everything between and including the two selected objects.
Hold the Ctrl key and click the other objects you want.
Click Restore Selected on the bottom of the page.
The objects will be moved to the live database.
Restore Using the API
To restore an object with the API, the user sends a DELETE command to the specific object.
The example below shows a user restoring a Subscriber object called new_subscriber.
curl -X DELETE \
-H "Authorization:Basic <secure-access-token>" \
-d 'localhost/easy0/api/subscriber/service_test/new_subscriber?archive=true&restore=true'
Which would return a message such as:
"meta": {
"encoding": "ascii",
"records_shown": 0,
"message": "Record successfully archived or restored.",
"code": "205",
"scope": "success"
},
"data": [],
"jsonapi": {
"version": "1.2-2",
"name": "Easy Zero",
"short_name": "easy0",
"author": "IMSWorkX, Inc."
}
Note
The parameters archive=true&restore=true are required to restore an object.
Purging data permanently removes the data from the archived database. Purging data can be done through the API, web UI, or the Maximum Inactive Days for Records setting in the web UI.
Warning
Once data has been purged from the database, it cannot be restored.
Purge a Single Object Using the Web UI
Switch to the archive view by toggling Live / Archive Database in the task bar.
Navigate to the object that you want to purge.
Right-click on the object to be purged.
Click Purge.
The object will be permanently removed from the database.
Purge Multiple Objects Using the Web UI
Switch to the archive view by toggling Live / Archive Database in the task bar.
Navigate to the objects that you want to purge.
Select the objects by clicking on the first object then:
Hold the Shift key and click another object to select everything between and including the two selected objects.
Hold the Ctrl key and click the other objects you want.
Click Purge Selected on the bottom of the page.
The objects will be permanently removed from the database.
Purge Using the Maximum Inactive Days Setting
Easy 0 will remove records that have been archived longer than the value specified by this setting every night at midnight, which is determined by the time on the active NIU. A value of zero will always keep archived records in the database.
This setting can be found on the Settings page when the user is logged in as a Platform Owner.
Purge Using the API
To purge an object with the API, the user sends a DELETE command to the specific object.
The example below shows a user purging a Subscriber object called new_subscriber.
curl -X DELETE \
-H "Authorization:Basic <secure-access-token>" \
-d 'localhost/easy0/api/subscriber/service_test/new_subscriber?archive=true'
Which would return a message such as:
"meta": {
"encoding": "ascii",
"records_shown": 0,
"message": "Record successfully archived or restored.",
"code": "205",
"scope": "success"
},
"data": [],
"jsonapi": {
"version": "1.2-2",
"name": "Easy Zero",
"short_name": "easy0",
"author": "IMSWorkX, Inc."
}
Note
The parameter archive=true is required to purge an object.