Come accedere ai tuoi dati tramite API?

In Metricalp, puoi sempre accedere ai dati del tuo cruscotto tramite API. Puoi usarlo per costruire il tuo cruscotto o per creare i tuoi flussi di lavoro personalizzati per i report. Per accedere ai tuoi dati tramite API, avrai bisogno di due cose. Token di Accesso API e il data-tid del tuo tracker.

Puoi trovare il tuo Token di Accesso API nelle Impostazioni del tuo Account. Vai su Impostazioni Account e poi nella scheda Token API.

In questa schermata, puoi visualizzare o copiare il tuo Token di Accesso API. Puoi anche sostituirlo (per motivi di sicurezza). Ma fai attenzione, quando sostituisci il tuo Token di Accesso API, il tuo vecchio Token di Accesso API sarà invalido e non funzionerà. Tieni sempre il tuo token al sicuro.

La seconda cosa è il data-tid del tuo tracker di destinazione per accedere ai suoi dati. Puoi trovare il data-tid del tuo tracker nella pagina delle impostazioni del tracker. Si prega di controllare: Integratore Tracker di Condivisione per informazioni dettagliate sul tuo data-tid.

Ora che hai il tuo Token di Accesso API e il data-tid, sei pronto per accedere ai tuoi dati tramite API. Approfondiamo l'argomento.

API Dati

Prima di tutto, per accedere ai dati del cruscotto devi fare richieste POST al punto di accesso del cruscotto qui sotto:

Endpoint
https://api.metricalp.com/dashboard

Devi includere il tuo Token di Accesso API nell'intestazione Authorization con il prefisso Bearer

JS
const headers = {Authorization: 'Bearer eyJ0b2tlbiI6ImxmYXFpaG16NTAyNTU5bmJtYno2YWtvNndrYzhuNWF4Iiwib2lkIjoxfQ=='}

Ottenere il Tracker

Iniziamo con uno semplice. Puoi ottenere il nome, il fuso orario, gli obiettivi, i funnel e altre informazioni sul tuo tracker con la richiesta API per ottenere il tracker. Troverai un esempio in JavaScript qui sotto, ma puoi usare qualsiasi linguaggio tu voglia. Si tratta semplicemente di una richiesta HTTP POST con intestazione Authorization e corpo JSON.

Richiesta:

JavaScript

          fetch('https://api.metricalp.com/dashboard', {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              'Authorization': 'Bearer eyJ0b2tlbiI6ImdvNHY3b3VhMmw1b3ZwdWlubXlzNWh0eXlzNHVuem53Iiwib2lkIjo2fQ==',
            },
            body: JSON.stringify({
              reqRoute: 'get-tracker',
              trackerId: 'mam2',
            }),
          }).then(response => response.json()).then(data => {console.log(data)});

Nel'intestazione abbiamo fornito il nostro token di accesso API e nel corpo abbiamo fornito:

- reqRoute:'get-tracker'

- trackerId: 'mam2' (che è il data-tid del tuo tracker che abbiamo ottenuto sopra)

Se tutto va bene, la risposta di successo sarà simile a:

JSON
         {
            tracker_id: 2,
            owner_id: 6,
            tracker_name: 'Test Tracker',
            is_active: 1,
            timezone: 'UTC',
            create_date: '2024-01-22T13:56:27.568Z',
            update_date: '2024-01-22T13:56:27.568Z',
            allow_all_hosts: 1,
            allowed_hosts: '[]',
            access: 'private',
            access_key: '',
            deactive_reason: null,
            tracker_warning: null,
            goals: [
              {
                tracker_id: 2,
                goal_id: '6-2-ls3gep4h-kfm',
                goal_name: 'Fare clic sul pulsante di acquisto negli Stati Uniti',
                goal_props: '[{"key":"event_type","value":"click_purchase","matchType":"exact","caseSensitive":true},{"key":"country","value":"United States","matchType":"exact","caseSensitive":false}]'
              },
              {
                tracker_id: 2,
                goal_id: '6-2-ls3gdxss-gfs',
                goal_name: 'Visita la schermata di acquisto',
                goal_props: '[{"key":"event_type","value":"screen_view","matchType":"exact","caseSensitive":true},{"key":"path","value":"/purchase","matchType":"exact","caseSensitive":false}]'
              }
            ],
            funnels: [
              {
                tracker_id: 2,
                funnel_id: '6-2-ls3gf7qk-qvh',
                funnel_name: 'Acquisto negli Stati Uniti',
                goals_flow: '6-2-ls3gdxss-gfs>6-2-ls3gep4h-kfm'
              }
            ]
          }

Abbiamo ottenuto tutte le informazioni di base sul nostro tracker, così come funnel e obiettivi. Gli ID degli funnel e degli obiettivi saranno importanti durante le query per loro qui sotto. Potresti volerli conservare per le query.

Query

Ora possiamo interrogare i dati del nostro dashboard. Descriveremo la struttura del corpo della richiesta nella query. Ma prima, ecco il tipo TypeScript completo del corpo della richiesta previsto nella route di query:

TS

  export type FieldCondition = { value: string | boolean | number; eq: boolean };

  export type Conditions = {
    tracker_id: string;
    from_date: number;
    to_date?: number;
    browser?: FieldCondition;
    browser_detail?: FieldCondition;
    operating_system?: FieldCondition;
    device_type?: FieldCondition;
    country?: FieldCondition;
    city?: FieldCondition;
    event_type?: FieldCondition;
    hostname?: FieldCondition;
    os_detail?: FieldCondition;
    path?: FieldCondition;
    entered_from_path?: FieldCondition;
    exited_from_path?: FieldCondition;
    source?: FieldCondition;
    source_detail?: FieldCondition;
    utm_medium?: FieldCondition;
    utm_source?: FieldCondition;
    utm_campaign?: FieldCondition;
    utm_content?: FieldCondition;
    utm_term?: FieldCondition;
    custom_prop1?: FieldCondition;
    custom_prop2?: FieldCondition;
    custom_prop3?: FieldCondition;
    custom_prop4?: FieldCondition;
    custom_prop5?: FieldCondition;
    goal_id?: FieldCondition;
  };

  type RequestBody = {
      reqRoute: 'query';
      genericType: 'main' | 'main-chart' | 'non-pfph' | 'pfph' | 'funnel' | 'event-type' | 'realtime-summary';
      conditions: Conditions;
      funnel?: string;
      fields: string[];
      offset?: number;
      rangeType?: 'five-min' | 'hourly' | 'daily' | 'weekly' | 'monthly';
      trackerAccessKey?: string;
      mainActiveTab?:
        | 'eventUniqueCount'
        | 'totalSessions'
        | 'totalScreenViews'
        | 'viewsPerSession'
        | 'bounceRate'
        | 'eventTotalCount'
        | 'uniqueGoalConversion';
      extendedLimit?: boolean;
  }

Nessuna preoccupazione, spiegheremo questi campi e i loro scopi di seguito.

- reqRoute

reqRoute è 'query' quando si interrogano i dati del dashboard. Era get-tracker quando si ottenevano i dati del tracker sopra. Quindi, come hai notato, l' endpoint è sempre lo stesso ma body.reqRoute cambia per diversi tipi di richiesta. Per interrogare i dati, sarà sempre 'query'.

- genericType

genericType è un concetto specifico importante in Metricalp. main e main-chart sono chiari per i nomi. Quando ottieni dati per metriche principali come visitatori unici, sessioni totali, visualizzazioni di schermate totali, ecc., devi impostare questo su main. Se vuoi ottenere dati in formato grafico per una metrica specifica, devi impostare questo su main-chart. non-pfph e pfph sono termini speciali in Metricalp. pfph significa fondamentalmente permanente per sessione. Ad esempio, se il browser di un visitatore è Chrome e non può essere cambiato durante una sessione. Quindi è un campo pfph. Ma il campo path può cambiare in un flusso di sessione, poiché il visitatore può passare da una pagina all'altra. Quindi è un campo non-pfph. Facciamo questa separazione per ottenere grandi ottimizzazioni delle prestazioni sotto il cofano. Ecco l'elenco di tutti i campi non-pfph e pfph:

Non-PFPH:

  • path
  • source
  • source_detail
  • hostname
  • utm_medium
  • utm_source
  • utm_campaign
  • utm_content
  • utm_term
  • custom_prop1
  • custom_prop2
  • custom_prop3
  • custom_prop4
  • custom_prop5

PFPH:

  • city
  • country
  • browser
  • browser_detail
  • operating_system
  • os_detail
  • device_type
  • user_language
  • user_timezone

Inoltre, se vuoi ottenere dati sul funnel, dovresti impostare questo genericType su funnel. Puoi ottenere tipi di eventi impostando questo su event-type e infine, per ottenere dati in tempo reale come riepilogo, puoi impostare questo su realtime-summary.

- conditions

Come sai, puoi impostare condizioni (filtri) nel Dashboard. Ad esempio, per ottenere visitatori solo negli Stati Uniti e con il browser Chrome. Per impostare le condizioni nell'API, devi impostare il campo conditions nel corpo della richiesta. Una condizione può basarsi su uguaglianza (è) o non uguaglianza (non è).

JS
const conditions = { "browser": { "eq": true, "value": "Chrome" }}

Se imposti eq su true significa che il filtro è basato su uguaglianza, quindi riporterà i visitatori con il browser Chrome. Ma se lo imposti su false, significa che riporterà solo i visitatori che *NON* hanno il browser Chrome.

Nota importante:

Devi sempre includere le informazioni del tuo tracker data-tid (come tracker_id), event_type, data di inizio e data di fine nelle condizioni. Altrimenti, la query non funzionerà. Tieni presente che devi essere il proprietario del tracker o che il tracker deve essere pubblico per accedere ai suoi dati.

Ecco un esempio completo di un oggetto Conditions:

JS

  const conditions = {
    "browser": {
      "eq": true,
      "value": "Chrome"
    },
    "tracker_id": "mam1",
    "from_date": 1706734800000,
    "to_date": 1706795834711,
    "event_type": {
      "value": "screen_view",
      "eq": true
    }
  }

- funnel

Devi fornire questo valore solo quando fai una query per un funnel (genericType = funnel).

Dovrebbe essere il flusso degli ID degli obiettivi nel funnel. Avevi questi dati quando hai fatto una richiesta get-tracker. Avevi tutti i dati del funnel e i loro goals_flow. Usa i dati di goals_flow qui per ottenere risultati per il funnel. Esempio:

"funnel": "6-2-ls3gdxss-gfs>6-2-ls3gep4h-kfm"

Vedrai un esempio completo di richiesta alla fine di questa documentazione.

- fields

In una richiesta puoi ottenere risultati per uno o più campi. Pertanto, puoi fornire una lista di campi come array nel corpo della richiesta. La cosa importante è che dovresti avere campi non-pfph o pfph nella lista dei campi in base al tuo genericType. Non puoi mescolarli in una sola richiesta. Questa è una restrizione di ottimizzazione delle prestazioni (sia lato client che server).

"fields": ["country","city","user_language","browser"]

- offset

In una richiesta di campo, avrai 10 elementi per campo (ordinati in ordine decrescente basato sul conteggio unico) (cioè i 10 principali browser). Ma per un solo campo (come cliccare sul pulsante 'mostra di più' nel dashboard) quando vuoi vedere di più, devi interrogare basandoti su una logica di paginazione. L'offset lo fornirà. Puoi impostare l'offset su 0 per la prima richiesta e poi +20 per ogni altra richiesta per vedere i risultati pagina per pagina. Vedrai un esempio completo alla fine.

- rangeType

Questo è necessario quando fai una query genericType main-chart. Determina il rangeType del grafico. Puoi impostarlo su five-min, hourly, daily, weekly o monthly.

- trackerAccessKey

Se la configurazione di accesso del tuo tracker è key, allora le persone possono accedere ai dati del tuo dashboard tramite l'API con la chiave che hai impostato nelle impostazioni. Devono inviare questa chiave in ogni richiesta. Puoi impostare questa chiave nel campo trackerAccessKey nel corpo della richiesta. Se la configurazione di accesso del tuo tracker è 'public' o 'private' o 'sei il proprietario del tracker e hai fornito un token di accesso pubblico', allora non è necessario impostare questo campo.

- mainActiveTab

Quando fai una richiesta per un grafico (genericType= main-chart), devi specificare per quale campo stai facendo la richiesta. Ad esempio, se vuoi ottenere dati per visitatori unici, devi impostare questo campo su eventUniqueCount. Inoltre, rangeType è necessario per le richieste di grafico, come descritto sopra.

- extendedLimit

Per impostazione predefinita, ogni richiesta restituisce 10 risultati per campo. Quando interroghi un singolo campo (ad esempio cliccando sul pulsante 'mostra di più' nel dashboard), puoi impostare questo su true per avere 20 risultati per campo. Ogni pagina avrà 20 elementi e puoi usare il parametro offset per la paginazione.

Esempi Completi di Query

Ottenere Metriche Principali

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "main",
        "fields": [],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706811129699,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
       {
    bounceRate: 79.55,
    viewsPerSession: 1.72,
    eventUniqueCount: 1088,
    totalSessions: 1112,
    eventTotalCount: 1747,
    uniqueGoalConversion: 0,
    trackerStatus: 'active'
  }

Ottenere il Grafico Principale

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "main-chart",
        "fields": [],
        "mainActiveTab": "eventUniqueCount",
        "rangeType": "hourly",
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706811129699,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
        [
    { dt: '1706734800000', value: '41' },
    { dt: '1706738400000', value: '19' },
    { dt: '1706742000000', value: '56' },
    { dt: '1706745600000', value: '54' },
    { dt: '1706749200000', value: '43' },
    { dt: '1706752800000', value: '43' },
    { dt: '1706756400000', value: '37' },
    { dt: '1706760000000', value: '52' },
    { dt: '1706763600000', value: '67' },
    { dt: '1706767200000', value: '55' },
    { dt: '1706770800000', value: '23' },
    { dt: '1706774400000', value: '59' },
    { dt: '1706778000000', value: '54' },
    { dt: '1706781600000', value: '52' },
    { dt: '1706785200000', value: '65' },
    { dt: '1706788800000', value: '62' },
    { dt: '1706792400000', value: '65' },
    { dt: '1706796000000', value: '56' },
    { dt: '1706799600000', value: '58' },
    { dt: '1706803200000', value: '62' },
    { dt: '1706806800000', value: '57' },
    { dt: '1706810400000', value: '8' }
  ]

Ottenere Campi Non-PFPH

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "non-pfph",
        "fields": [
            "source",
            "path"
        ],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706811659111,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
        {
    source: [
      { label: 'Direct', uniq: '738' },
      { label: 'com.twitter.android', uniq: '310' },
      { label: 'www.adsensecustomsearchads.com', uniq: '27' },
      { label: 't.co', uniq: '15' },
      { label: 'www.google.com', uniq: '6' },
      { label: 'youtube.com', uniq: '5' },
      { label: 'com.google.android.gm', uniq: '1' }
    ],
    path: [
      { label: '/', uniq: '1073' },
      { label: '/contact', uniq: '55' },
      { label: '/blog', uniq: '42' },
      { label: '/features', uniq: '32' },
      { label: '/pricing', uniq: '31' },
      { label: '/docs/getting-started', uniq: '15' },
      { label: '/how-it-works', uniq: '15' },
      { label: '/team', uniq: '14' },
      { label: '/google-analytics-alternative', uniq: '10' },
      { label: '/about-us', uniq: '9' }
    ],
    unknown: []
  }

Ottenere Campi PFPH

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "pfph",
        "fields": [
            "operating_system",
            "device_type",
            "hostname"
        ],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706811659111,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
        {
    operating_system: [
      { label: 'iOS', uniq: '611' },
      { label: 'Android', uniq: '424' },
      { label: 'Windows', uniq: '30' },
      { label: 'macOS', uniq: '24' },
      { label: 'Linux', uniq: '4' }
    ],
    device_type: [
      { label: 'mobile', uniq: '1026' },
      { label: 'desktop', uniq: '58' },
      { label: 'tablet', uniq: '9' }
    ],
    hostname: [
      { label: 'www.metricalp.com', uniq: '1091' },
      { label: 'dev.metricalp.com', uniq: '2' }
    ],
    unknown: []
  }

Ottenere il Funnel

Richiesta:

JavaScript
          fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "funnel",
        "fields": [],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706812149470,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        },
        "funnel": "1-1-lrnyba2a-kt8>1-1-ls3jvfpd-mfk"
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
{ '1-1-lrnyba2a-kt8': 337, '1-1-lrnyba2a-kt8>1-1-ls3jvfpd-mfk': 0 }

Come puoi vedere, la risposta restituisce anche gli ID delle mete anziché i nomi. Devi usare le informazioni delle mete (ottenute con la richiesta get-tracker) per associare gli ID ai nomi delle mete nel funnel.

Ottenere i Tipi di Evento

Richiesta:

JavaScript
        fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "event-type",
        "fields": [],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706812312189
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
        [
    { event_type: 'screen_view', count: '1777' },
    { event_type: 'live_demo_button_click', count: '68' },
    { event_type: 'sso_login', count: '2' }
  ]

Ottenere Riepilogo in Tempo Reale

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "realtime-summary",
        "fields": [],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706811620538,
            "to_date": 1706812520538
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
[ { unique_count: '14', total_count: '29' } ]

Ottenere un Singolo Campo con Paginazione

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "pfph",
        "fields": [
            "country"
        ],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706812519694,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        },
        "extendedLimit": true,
        "offset": 0
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Bonus - Richiesta per la seconda pagina:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "pfph",
        "fields": [
            "country"
        ],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706812519694,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        },
        "extendedLimit": true,
        "offset": 20
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
       {
    country: [
      { label: 'India-IN', uniq: '195' },
      { label: 'Nigeria-NG', uniq: '162' },
      { label: 'Turchia-TR', uniq: '65' },
      { label: 'Regno Unito-GB', uniq: '57' },
      { label: 'Indonesia-ID', uniq: '35' },
      { label: 'Kenya-KE', uniq: '33' },
      { label: 'Francia-FR', uniq: '31' },
      { label: 'Germania-DE', uniq: '29' },
      { label: 'Thailandia-TH', uniq: '29' },
      { label: 'Canada-CA', uniq: '28' },
      { label: 'Sud Africa-ZA', uniq: '25' },
      { label: 'Italia-IT', uniq: '19' },
      { label: 'Pakistan-PK', uniq: '18' },
      { label: 'Filippine-PH', uniq: '16' },
      { label: 'Polonia-PL', uniq: '15' },
      { label: 'Taiwan-TW', uniq: '14' },
      { label: 'Emirati Arabi Uniti-AE', uniq: '13' },
      { label: 'Argentina-AR', uniq: '13' },
      { label: 'Ghana-GH', uniq: '12' },
      { label: 'Malesia-MY', uniq: '12' }
    ],
    unknown: []
  }

Query con Condizioni (Filtri)

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "non-pfph",
        "fields": [
            "source"
        ],
        "conditions": {
            "country": {
                "eq": true,
                "value": "Canada-CA"
            },
            "browser": {
                "eq": true,
                "value": "Mobile Chrome"
            },
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706813796572,
            "event_type": {
                "value": "screen_view",
                "eq": true
            }
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
       {
    source: [
      { label: 'com.twitter.android', uniq: '3' },
      { label: 'Diretto', uniq: '1' }
    ],
    browser_detail: [
      { label: 'Mobile Chrome 121', uniq: '3' },
      { label: 'Mobile Chrome 120', uniq: '1' }
    ],
    unknown: []
  }

Quando hai il browser nelle condizioni, otterrai anche browser_detail nella risposta. Questo è il caso anche per source -> source_detail, operating_system -> os_detail

Query per Tipo di Evento Personalizzato invece di screen_view

Richiesta:

JavaScript
       fetch('https://api.metricalp.com/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer eyJ0b2tlbiI6InA0ajF0bjA4eGxqcm1xODJzZm94d2l6eWwzY2c3b28yIiwib2lkIjoxfQ',
    },
    body: JSON.stringify({
        "reqRoute": "query",
        "trackerAccessKey": "",
        "genericType": "pfph",
        "fields": [
            "country",
            "city",
            "user_language",
            "browser"
        ],
        "conditions": {
            "tracker_id": "mam1",
            "from_date": 1706734800000,
            "to_date": 1706813796572,
            "event_type": {
                "value": "live_demo_button_click",
                "eq": true
            }
        }
    }),
  }).then(response => response.json()).then(data => {console.log(data)});

Risposta:

JSON
       {
    country: [
      { label: 'India-IN', uniq: '16' },
      { label: 'Nigeria-NG', uniq: '5' },
      { label: 'Kenya-KE', uniq: '3' },
      { label: 'Pakistan-PK', uniq: '3' },
      { label: 'Regno Unito-GB', uniq: '2' },
      { label: 'Turchia-TR', uniq: '2' },
      { label: 'Germania-DE', uniq: '2' },
      { label: 'Botswana-BW', uniq: '2' },
      { label: 'Italia-IT', uniq: '1' },
      { label: 'Sud Africa-ZA', uniq: '1' }
    ],
    city: [
      { label: 'Nairobi-KE', uniq: '3' },
      { label: 'Mumbai-IN', uniq: '3' },
      { label: 'Pune-IN', uniq: '2' },
      { label: 'Madurai-IN', uniq: '2' },
      { label: 'Gaborone-BW', uniq: '2' },
      { label: 'Kayseri-TR', uniq: '2' },
      { label: 'Katsina-NG', uniq: '2' },
      { label: 'Abuja-NG', uniq: '2' },
      { label: 'Islamabad-PK', uniq: '2' },
      { label: 'Vapi-IN', uniq: '1' }
    ],
    user_language: [
      { label: 'Inglese (Stati Uniti)-US', uniq: '20' },
      { label: 'Inglese (Regno Unito)-GB', uniq: '16' },
      { label: 'Inglese (India)-IN', uniq: '6' },
      { label: 'Spagnolo (Argentina)-419', uniq: '1' },
      { label: 'Inglese (Canada)-CA', uniq: '1' },
      { label: 'Russo-sconosciuto', uniq: '1' },
      { label: 'Francese (Francia)-FR', uniq: '1' },
      { label: 'Cinese (S)-CN', uniq: '1' },
      { label: 'Russo (Russia)-RU', uniq: '1' },
      { label: 'Tedesco-sconosciuto', uniq: '1' }
    ],
    browser: [
      { label: 'Mobile Chrome', uniq: '21' },
      { label: 'Mobile Safari', uniq: '15' },
      { label: 'Chrome', uniq: '7' },
      { label: 'Firefox', uniq: '2' },
      { label: 'Instagram', uniq: '1' },
      { label: 'Chrome WebView', uniq: '1' },
      { label: 'Facebook', uniq: '1' },
      { label: 'Samsung Browser', uniq: '1' }
    ],
    unknown: []
  }