# Statistics
The Statistics API allows you to analyze multiple metrics with one request.
POST https://api.smartsupp.com/v2/statistics?timezone=Europe/Prague
{
"responseTime": {
"name": "response_time",
"range": {
"from": "2020-08-03T00:00:00",
"to": "2020-09-02T23:59:59"
}
},
"closed": {
"name": "closed_conversation",
"range": {
"from": "2020-08-03T00:00:00",
"to": "2020-09-02T23:59:59"
}
}
}
In the previous example we fetch data for metrics the response_time
and the closed_conversation
.
Properties new
and closed
are your custom names. Basically the request is the key-value object.
Parameter timezone
Setup the timezone is important to get correct data especially for date ranges and date aggregations.
Default timezone is UTC
.
Let's go deeper to learn how to configure options.
{
"name": "response_time",
"range": {
"from": "2020-08-03T00:00:00",
"to": "2020-09-02T23:59:59"
}
}
The above options compute response time median. The property name
specify a metric you want to analyze.
The above will return the following:
{
"name": "response_time",
"value": 24,
"count": 1300,
"buckets": null
}
The result always contains the count
of all matching objects and the value
as the aggregated value of all matching objects.
For the metric response_time
is used as aggregation median, but others metrics can have different aggregations.
# Metrics
Every metric is related to Message or Conversation object which later allows you to filter the data with filters based on them. The metric also defines witch an aggregation is used. You can chose one of the following:
Name | Source | Agg | Description |
---|---|---|---|
response_time | Message | median | |
first_response_time | Message | median | |
time_to_close | Conversation | median | |
time_to_close_sum | Conversation | sum | |
new_conversation | Conversation | count | |
closed_conversation | Conversation | count | |
conversation_ratings | Conversation | count |
# Aggregations
The aggregations help you retrieve aggregated data divided into buckets where each bucket is associated
with a key and the aggregated value. We support two types of aggregations. The date
aggregating into
date based intervals and the terms
aggregating into value based intervals.
{
"new_by_date": {
"name": "response_time",
"range": {
"from": "2020-08-03T22:00:00",
"to": "2020-09-02T21:59:59"
},
"aggs": [
{
"type": "date",
"interval": "day",
"format": "YYYY_MM_DD"
}
]
}
}
The above options compute response time median but to compare with previous example the response contains buckets as result of the aggregation.
Each bucket contains the count
of all matching objects and the value
as the aggregated value.
The above will return the following:
{
"new_by_date": {
"name": "response_time",
"value": 35,
"count": 4538,
"buckets": [
{
"key": "2020_08_04",
"count": 119,
"value": 25
},
{
"key": "2020_08_05",
"count": 212,
"value": 33
},
...
}
# Date aggregation
As the interval
you can use of the following: day
, week
, month
, year
, day_of_week
and hour_of_day
.
The format
is up to you and must compatible with Moment.js (opens new window).
Example:
{
"aggs": [
{
"type": "date",
"interval": "day",
"format": "YYYY_MM_DD"
}
]
}
# Terms aggregation
Depends on used metric name you can aggregate data by field.
For Conversation based metrics you can use:
- status
- group_id
- agent_ids
- assigned_ids
- rating_value
- domain
Example:
{
"name": "new_conversation",
"aggs": [
{
"type": "terms",
"field": "group_id"
}
]
}
For Message based metrics you can use:
- trigger_id
- agent_id
- is_reply
- is_first_reply
- is_offline
- is_offline_reply
Example:
{
"name": "response_time",
"aggs": [
{
"type": "terms",
"field": "agent_id"
}
]
}
# Multiple aggregation
Aggregations can be combined.
Example:
{
"aggs": [
{
"type": "terms",
"field": "group_id"
},
{
"type": "date",
"interval": "day_of_week"
},
{
"type": "date",
"interval": "hour_of_day"
}
]
}