curl --request GET \
--url https://data-api.morada.ai/v1/analytics/tickets/{granularity} \
--header 'Authorization: Bearer <token>'import requests
url = "https://data-api.morada.ai/v1/analytics/tickets/{granularity}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data-api.morada.ai/v1/analytics/tickets/{granularity}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data-api.morada.ai/v1/analytics/tickets/{granularity}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data-api.morada.ai/v1/analytics/tickets/{granularity}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data-api.morada.ai/v1/analytics/tickets/{granularity}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-api.morada.ai/v1/analytics/tickets/{granularity}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"granularity": "<string>",
"tz": "<string>",
"from": "<string>",
"to": "<string>",
"as_of": "<string>",
"stale": true,
"group_by": [
"<string>"
],
"data": [
{
"period": "<string>",
"tickets_created_count": 123,
"tickets_closed": 123,
"tickets_in_service": 123,
"redistributed_timeout": 123,
"total_messages": 123,
"time_to_assignment_sum_seconds": 123,
"time_to_assignment_count": 123,
"first_response_sum_seconds": 123,
"first_response_count": 123,
"handle_time_sum_seconds": 123,
"handle_time_count": 123
}
],
"count": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Analytics de tickets
Agregações aditivas (dia/semana/mês × dimensão) dos tickets do Talk, no formato pronto para BI.
curl --request GET \
--url https://data-api.morada.ai/v1/analytics/tickets/{granularity} \
--header 'Authorization: Bearer <token>'import requests
url = "https://data-api.morada.ai/v1/analytics/tickets/{granularity}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data-api.morada.ai/v1/analytics/tickets/{granularity}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data-api.morada.ai/v1/analytics/tickets/{granularity}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data-api.morada.ai/v1/analytics/tickets/{granularity}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data-api.morada.ai/v1/analytics/tickets/{granularity}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-api.morada.ai/v1/analytics/tickets/{granularity}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"granularity": "<string>",
"tz": "<string>",
"from": "<string>",
"to": "<string>",
"as_of": "<string>",
"stale": true,
"group_by": [
"<string>"
],
"data": [
{
"period": "<string>",
"tickets_created_count": 123,
"tickets_closed": 123,
"tickets_in_service": 123,
"redistributed_timeout": 123,
"total_messages": 123,
"time_to_assignment_sum_seconds": 123,
"time_to_assignment_count": 123,
"first_response_sum_seconds": 123,
"first_response_count": 123,
"handle_time_sum_seconds": 123,
"handle_time_count": 123
}
],
"count": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}tickets_created_count, tickets_closed, tickets_in_service, redistributed_timeout, total_messages.
time_to_assignment_sum_seconds/_count, first_response_sum_seconds/_count, handle_time_sum_seconds/_count. As somas estão em segundos: divida pela contagem para a média (e por 60 para minutos).as_of / stale e o header X-Data-As-Of. tickets_in_service é um retrato pontual (um ticket muda de estado numa execução posterior). CSAT e produto entram numa versão futura.Authorizations
Workspace API key no formato mk_..., gerada na plataforma em Integrações → Configurar API.
Path Parameters
Tamanho do balde. Um de: day, week (segunda-feira ISO), month.
day, week, month Query Parameters
Data ISO (limite inferior, inclusivo). Padrão: 30 dias atrás.
Data ISO (limite superior, exclusivo). Padrão: agora.
Timezone IANA para o agrupamento por dia. Padrão: America/Sao_Paulo.
Lista separada por vírgulas das dimensões permitidas: queue, queue_name, agent, agent_name, status, source.
Filtro: lista separada por vírgulas de ids de fila (queue_id).
Filtro: lista separada por vírgulas de ids de usuário do atendente (agent_user_id).
Filtro: lista separada por vírgulas de status (waiting, in_service, redistributed, closed).
Filtro: lista separada por vírgulas de origens do ticket.
Response
Linhas agregadas de componentes aditivos (contagens e pares soma+contagem).
Granularidade aplicada (day, week ou month).
Timezone IANA usado no agrupamento.
Limite inferior efetivo da janela.
Limite superior efetivo da janela.
Momento (ISO 8601) da última execução de ETL bem-sucedida deste metricset; null quando desconhecido.
true quando os dados estão defasados (mais que ~2× a cadência de 6h) ou o frescor é desconhecido.
Dimensões aplicadas no agrupamento.
Uma linha por balde × combinação de dimensões. Cada dimensão de group_by aparece como uma chave adicional na linha. Para cada média/SLA, divida _sum por _count (e, para os gráficos em minutos, divida ainda por 60 usando as versões _sec_).
Show child attributes
Show child attributes
Número de linhas em data.
Was this page helpful?