Comment accéder à vos données via l'API ?

Dans Metricalp, vous pouvez toujours accéder aux données de votre tableau de bord via l'API. Vous pouvez l'utiliser pour créer votre propre tableau de bord ou pour produire vos propres flux de travail personnalisés pour les rapports. Pour accéder à vos données via l'API, vous aurez besoin de deux choses. Token d'Accès API et le data-tid de votre traceur.

Vous pouvez trouver votre Token d'Accès API dans les Paramètres de votre Compte. Allez dans Paramètres du Compte puis dans l'onglet Tokens API.

Sur cet écran, vous pouvez voir ou copier votre Token d'Accès API. Vous pouvez également le remplacer (pour des raisons de sécurité). Mais soyez prudent, lorsque vous remplacez votre Token d'Accès API, votre ancien Token d'Accès API sera invalide et ne fonctionnera pas. Gardez toujours votre token en sécurité.

La deuxième chose est le data-tid de votre traceur cible pour accéder à ses données. Vous pouvez trouver le data-tid de votre traceur dans la page des paramètres du traceur. Veuillez consulter: Intégrer le Traceur de Partage pour des informations détaillées sur votre data-tid.

Maintenant que vous avez votre Token d'Accès API et votre data-tid, vous êtes prêt à accéder à vos données via l'API. Approfondissons le sujet.

API de Données

Tout d'abord, pour accéder aux données du tableau de bord, vous devez faire des requêtes POST au point de terminaison du tableau de bord ci-dessous :

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

Vous devez inclure votre Token d'Accès API dans l'en-tête Authorization avec le préfixe Bearer

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

Obtenir le Traceur

Commençons par un simple. Vous pouvez obtenir le nom, le fuseau horaire, les objectifs, les entonnoirs et d'autres informations sur votre traceur avec la requête API pour obtenir le traceur. Vous trouverez un exemple en JavaScript ci-dessous, mais vous pouvez utiliser n'importe quel langage que vous souhaitez. Il s'agit simplement d'une requête HTTP POST avec un en-tête Authorization et un corps JSON.

Requête :

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)});

Dans l'en-tête, nous avons fourni notre token d'accès API et dans le corps, nous avons fourni :

- reqRoute:'get-tracker'

- trackerId: 'mam2' (qui est le data-tid de votre traceur que nous avons obtenu ci-dessus)

Si tout se passe bien, la réponse de succès sera comme suit :

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: 'Cliquer sur le bouton d'achat aux États-Unis',
                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: 'Visiter l'écran d'achat',
                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: 'Achat aux États-Unis',
                goals_flow: '6-2-ls3gdxss-gfs>6-2-ls3gep4h-kfm'
              }
            ]
          }

Nous avons obtenu toutes les informations de base sur notre traceur, ainsi que sur les entonnoirs et les objectifs. Les identifiants des entonnoirs et des objectifs seront importants lors des requêtes pour eux ci-dessous. Vous souhaiterez peut-être les conserver pour les requêtes.

Requête

Nous pouvons maintenant interroger les données de notre tableau de bord. Nous décrirons la structure du corps de la requête dans la requête. Mais d'abord, voici le type complet TypeScript du corps de la requête attendu dans la route de requête :

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;
  }

Ne t'inquiète pas, nous expliquerons ces champs et leurs objectifs ci-dessous.

- reqRoute

reqRoute est 'query' lors de la requête de données du tableau de bord. C'était get-tracker lors de l'obtention des données du tracker ci-dessus. Comme tu l'as remarqué, le point de terminaison est toujours le même, mais body.reqRoute change pour différents types de requêtes. Pour interroger des données, ce sera toujours 'query'.

- genericType

genericType est un concept spécifique important dans Metricalp. main et main-chart sont clairs à cause des noms. Lorsque tu obtiens des données pour les métriques principales comme les visiteurs uniques, les sessions totales, les vues d'écran totales, etc., tu dois définir cela sur main. Si tu veux obtenir des données sous forme de graphique pour une métrique spécifique, tu dois définir cela sur main-chart. non-pfph et pfph sont des termes spéciaux dans Metricalp. pfph signifie essentiellement permanent par session. Par exemple, si le navigateur d'un visiteur est Chrome et qu'il ne peut pas être modifié pendant une session. Donc, c'est un champ pfph. Mais le champ path peut changer dans un flux de session, car le visiteur peut passer d'une page à l'autre. Donc, c'est un champ non-pfph. Nous faisons cette séparation pour réaliser de grandes optimisations de performance en arrière-plan. Voici la liste de tous les champs non-pfph et 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

Aussi, si tu veux obtenir des données sur l'entonnoir, tu dois définir ce genericType sur funnel. Tu peux obtenir des types d'événements en définissant cela sur event-type et enfin, pour obtenir des données en temps réel comme un résumé, tu peux définir cela sur realtime-summary.

- conditions

Comme tu le sais, tu peux définir des conditions (filtres) dans le tableau de bord. Par exemple, pour obtenir des visiteurs uniquement aux États-Unis et ayant le navigateur Chrome. Pour définir des conditions dans l'API, tu dois définir le champ conditions dans le corps de la requête. Une condition peut être basée sur l'égalité (est) ou la non-égalité (n'est pas).

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

Si tu définis eq sur true, cela signifie que le filtre est basé sur l'égalité, donc il ramènera les visiteurs avec le navigateur Chrome. Mais si tu le définis sur false, cela signifie qu'il ramènera uniquement les visiteurs qui *NE* ont pas le navigateur Chrome.

Note importante :

Tu dois toujours inclure les informations de ton tracker data-tid (comme tracker_id), event_type, depuis la date et jusqu'à la date dans les conditions. Sinon, la requête ne fonctionnera pas. Assure-toi que tu es le propriétaire du tracker ou que le tracker est public pour accéder à ses données.

Voici un exemple complet d'un objet 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

Tu dois fournir cette valeur uniquement lorsque tu fais une requête pour un entonnoir (genericType = funnel).

Il devrait s'agir du flux d'ID d'objectifs dans l'entonnoir. Tu avais ces données lorsque tu as fait une demande get-tracker. Tu avais toutes les données de l'entonnoir et leurs goals_flow. Utilise les données de goals_flow ici pour obtenir des résultats pour l'entonnoir. Exemple :

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

Tu verras un exemple complet de requête à la fin de cette documentation.

- fields

Dans une requête, tu peux obtenir des résultats pour un ou plusieurs champs. Ainsi, tu peux fournir une liste de champs sous forme de tableau dans le corps de la requête. Ce qui est important c'est que tu dois avoir des champs non-pfph ou pfph dans la liste des champs en fonction de ton genericType. Tu ne peux pas les mélanger dans une seule requête. C'est une contrainte d'optimisation de performance (tant du côté client que serveur).

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

- offset

Dans une requête de champ, tu auras 10 éléments par champ (ordonnés par ordre décroissant basé sur le compte unique) (c'est-à-dire, les 10 principaux navigateurs). Mais pour un seul champ (comme cliquer sur le bouton "voir plus" dans le tableau de bord) lorsque tu veux voir plus, tu dois interroger en te basant sur une logique de pagination. L'offset le fournira. Tu peux définir offset sur 0 pour la première requête puis +20 pour chaque autre requête pour voir les résultats page par page. Tu verras un exemple complet à la fin.

- rangeType

Cela est nécessaire lorsque tu fais une requête genericType main-chart. Il détermine le rangeType du graphique. Tu peux le configurer en five-min, hourly, daily, weekly ou monthly.

- trackerAccessKey

Si la configuration d'accès de ton tracker est key, alors les gens peuvent accéder aux données de ton tableau de bord via l'API avec la clé que tu as configurée dans les paramètres. Ils doivent envoyer cette clé dans chaque requête. Tu peux définir cette clé dans le champ trackerAccessKey dans le corps de la requête. Si la configuration d'accès de ton tracker est 'public' ou 'private' ou 'tu es le propriétaire du tracker et as fourni un jeton d'accès public', alors tu n'as pas besoin de définir ce champ.

- mainActiveTab

Lorsque tu fais une requête pour un graphique (genericType= main-chart), tu dois spécifier pour quel champ tu fais la requête. Par exemple, si tu veux obtenir des données pour les visiteurs uniques, tu dois définir ce champ sur eventUniqueCount. De plus, rangeType est nécessaire pour les requêtes de graphiques, comme décrit ci-dessus.

- extendedLimit

Par défaut, chaque requête renvoie 10 résultats par champ. Lorsque tu consultes un seul champ (par exemple, en cliquant sur le bouton "voir plus" dans le tableau de bord), tu peux définir cela sur true pour obtenir 20 résultats par champ. Chaque page aura 20 éléments et tu peux utiliser le paramètre offset pour paginer.

Exemples Complets de Requêtes

Obtenir les Métriques Principales

Requête :

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)});

Réponse :

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

Obtenir le Graphique Principal

Requête :

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)});

Réponse :

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' }
  ]

Obtenir les Champs Non-PFPH

Requête :

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)});

Réponse :

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: []
  }

Obtenir les Champs PFPH

Requête :

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)});

Réponse :

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: []
  }

Obtenir le Funnel

Requête :

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)});

Réponse :

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

Comme vous pouvez le voir, la réponse retourne également les ID des étapes au lieu des noms. Vous devrez utiliser les informations des étapes (obtenues avec la requête get-tracker) pour associer les ID aux noms des étapes dans le funnel.

Obtenir les Types d'Événements

Requête :

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)});

Réponse :

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

Obtenir un Résumé en Temps Réel

Requête :

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)});

Réponse :

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

Obtenir un Champ Unique avec Pagination

Requête :

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 - Requête pour la deuxième page :

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)});

Réponse :

JSON
       {
    country: [
      { label: 'Inde-IN', uniq: '195' },
      { label: 'Nigeria-NG', uniq: '162' },
      { label: 'Turquie-TR', uniq: '65' },
      { label: 'Royaume-Uni-GB', uniq: '57' },
      { label: 'Indonésie-ID', uniq: '35' },
      { label: 'Kenya-KE', uniq: '33' },
      { label: 'France-FR', uniq: '31' },
      { label: 'Allemagne-DE', uniq: '29' },
      { label: 'Thaïlande-TH', uniq: '29' },
      { label: 'Canada-CA', uniq: '28' },
      { label: 'Afrique du Sud-ZA', uniq: '25' },
      { label: 'Italie-IT', uniq: '19' },
      { label: 'Pakistan-PK', uniq: '18' },
      { label: 'Philippines-PH', uniq: '16' },
      { label: 'Pologne-PL', uniq: '15' },
      { label: 'Taïwan-TW', uniq: '14' },
      { label: 'Émirats Arabes Unis-AE', uniq: '13' },
      { label: 'Argentine-AR', uniq: '13' },
      { label: 'Ghana-GH', uniq: '12' },
      { label: 'Malaisie-MY', uniq: '12' }
    ],
    unknown: []
  }

Requête avec Conditions (Filtres)

Requête :

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)});

Réponse :

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

Lorsque vous avez le navigateur dans les conditions, vous obtiendrez également browser_detail dans la réponse. C'est également le cas pour source -> source_detail, operating_system -> os_detail

Requête pour Type d'Événement Personnalisé au lieu de screen_view

Requête :

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)});

Réponse :

JSON
       {
    country: [
      { label: 'Inde-IN', uniq: '16' },
      { label: 'Nigeria-NG', uniq: '5' },
      { label: 'Kenya-KE', uniq: '3' },
      { label: 'Pakistan-PK', uniq: '3' },
      { label: 'Royaume-Uni-GB', uniq: '2' },
      { label: 'Turquie-TR', uniq: '2' },
      { label: 'Allemagne-DE', uniq: '2' },
      { label: 'Botswana-BW', uniq: '2' },
      { label: 'Italie-IT', uniq: '1' },
      { label: 'Afrique du Sud-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: 'Anglais (États-Unis)-US', uniq: '20' },
      { label: 'Anglais (Royaume-Uni)-GB', uniq: '16' },
      { label: 'Anglais (Inde)-IN', uniq: '6' },
      { label: 'Espagnol (Argentine)-419', uniq: '1' },
      { label: 'Anglais (Canada)-CA', uniq: '1' },
      { label: 'Russe-inconnu', uniq: '1' },
      { label: 'Français (France)-FR', uniq: '1' },
      { label: 'Chinois (S)-CN', uniq: '1' },
      { label: 'Russe (Russie)-RU', uniq: '1' },
      { label: 'Allemand-inconnu', 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: []
  }