¿Cómo acceder a tus datos a través de la API?

En Metricalp, siempre puedes acceder a los datos de tu panel a través de la API. Puedes usarlo para construir tu propio panel o para producir tus propios flujos de trabajo personalizados de informes. Para acceder a tus datos a través de la API, necesitarás dos cosas. Token de Acceso API y el data-tid de tu rastreador.

Puedes encontrar tu Token de Acceso API en la Configuración de tu Cuenta. Ve a Configuración de Cuenta y luego a la pestaña Tokens API.

En esta pantalla, puedes ver o copiar tu Token de Acceso API. También puedes reemplazarlo (por razones de seguridad). Pero ten cuidado, cuando reemplazas tu Token de Acceso API, tu antiguo Token de Acceso API será inválido y no funcionará. Siempre guarda tu token de manera segura.

La segunda cosa es el data-tid de tu rastreador objetivo para acceder a sus datos. Puedes encontrar tu data-tid de rastreador en la página de configuración del rastreador. Por favor revisa: Compartir Rastreador Integrado para información detallada sobre tu data-tid.

Ahora que tienes tu Token de Acceso API y data-tid, estás listo para acceder a tus datos a través de la API. Vamos a profundizar en ello.

API de Datos

Primero, para acceder a los datos del panel debes hacer solicitudes POST al endpoint del panel a continuación:

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

Debes incluir tu Token de Acceso API en el encabezado de Authorization con el prefijo Bearer

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

Obtener Rastreador

Comencemos con uno simple. Puedes obtener el nombre, la zona horaria, los objetivos, los embudos y otra información de tu rastreador con la solicitud API de obtener rastreador. Encontrarás un ejemplo en JavaScript a continuación, pero puedes usar cualquier lenguaje que desees. Es solo una solicitud HTTP POST con encabezado Authorization y cuerpo JSON.

Solicitud:

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

En el encabezado proporcionamos nuestro token de acceso API y en el cuerpo proporcionamos:

- reqRoute:'get-tracker'

- trackerId: 'mam2' (que es tu data-tid de rastreador que obtuvimos anteriormente)

Si todo va bien, la respuesta de éxito será como:

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: 'Hacer clic en el botón de compra en EE.UU.',
                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: 'Visitar pantalla de compra',
                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: 'Compra en EE.UU.',
                goals_flow: '6-2-ls3gdxss-gfs>6-2-ls3gep4h-kfm'
              }
            ]
          }

Hemos obtenido toda la información básica sobre nuestro rastreador, así como embudos y objetivos. Los IDs de embudo y objetivo serán importantes al realizar consultas para ellos a continuación. Es posible que desees mantenerlos para consultarlos.

Consulta

Ahora podemos consultar los datos de nuestro panel. Describiremos la estructura del cuerpo de la solicitud en la consulta. Pero primero, aquí está el tipo completo de TypeScript del cuerpo de solicitud esperado en la ruta de consulta:

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

No te preocupes, explicaremos estos campos y sus propósitos a continuación.

- reqRoute

reqRoute es 'query' al consultar datos del panel. Era get-tracker al obtener datos del rastreador arriba. Como te has dado cuenta, el punto final siempre es el mismo, pero body.reqRoute cambia para diferentes tipos de solicitud. Para consultar datos, siempre será 'query'.

- genericType

genericType es un concepto específico importante en Metricalp. main y main-chart son claros debido a los nombres. Cuando obtienes datos para métricas principales como visitantes únicos, sesiones totales, vistas de pantalla totales, etc., necesitas establecer esto en main. Si deseas obtener datos en una estructura de gráfico para una métrica específica, necesitas establecer esto en main-chart. non-pfph y pfph son términos especiales en Metricalp. pfph básicamente significa permanente por sesión. Por ejemplo, si el navegador de un visitante es Chrome y no puede cambiarse en una sesión. Así que es un campo pfph. Pero el campo path puede cambiar en un flujo de sesión, ya que el visitante puede saltar de una página a otra. Así que es un campo non-pfph. Estamos haciendo esta separación para lograr grandes optimizaciones de rendimiento en el fondo. Aquí puedes encontrar la lista de todos los campos non-pfph y 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

También, si deseas obtener datos de embudo, debes establecer este genericType en funnel. Puedes obtener tipos de eventos configurando esto en event-type y, por último, para obtener datos en tiempo real como resumen, puedes configurarlo en realtime-summary.

- conditions

Como sabes, puedes establecer condiciones (filtros) en el Dashboard. Por ejemplo, para obtener visitantes solo en EE. UU. y con el navegador Chrome. Para establecer condiciones en la API, necesitas establecer el campo conditions en el cuerpo de la solicitud. Una condición puede basarse en igualdad (es) o desigualdad (no es).

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

Si estableces eq en true, significa que el filtro se basa en la igualdad, por lo que traerá visitantes con el navegador Chrome. Pero si lo estableces en false, significa que solo traerá visitantes que *NO* tengan el navegador Chrome.

Nota importante:

Siempre debes incluir la información de tu tracker data-tid (como tracker_id), event_type, desde la fecha y hasta la fecha en las condiciones. De lo contrario, la consulta no funcionará. Ten en cuenta que debes ser el propietario del rastreador o que el rastreador debe ser público para acceder a sus datos.

Aquí tienes un ejemplo de un objeto Conditions completo:

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

Debes proporcionar este valor solo al hacer una consulta para funnel (genericType = funnel).

Debería ser el flujo de ID de objetivos en el embudo. Tenías estos datos cuando hiciste una solicitud get-tracker. Tenías todos los datos del embudo y sus goals_flow. Utiliza los datos de goals_flow aquí para obtener resultados para el embudo. Ejemplo:

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

Verás un ejemplo completo de solicitud al final de esta documentación.

- fields

En una solicitud puedes obtener resultados para uno o más campos. Por lo tanto, puedes proporcionar una lista de campos como un array en el cuerpo de la solicitud. Lo importante es que debes tener campos non-pfph o pfph en la lista de campos según tu genericType. No puedes mezclarlos en una sola solicitud. Esta es una restricción de optimización de rendimiento (tanto del cliente como del servidor).

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

- offset

En una solicitud de campo, tendrás 10 elementos por campo (orden descendente basado en el conteo único) (es decir, los 10 principales navegadores). Pero para un solo campo (como hacer clic en el botón "mostrar más" en el panel) cuando quieras ver más, debes consultar basándote en una lógica de paginación. El offset lo proporcionará. Puedes establecer offset en 0 para la primera consulta y luego +20 para cada otra consulta para ver página por página los resultados. Verás un ejemplo completo al final.

- rangeType

Esto es necesario cuando haces una consulta genericType main-chart. Determina el rangeType del gráfico. Puedes configurarlo en five-min, hourly, daily, weekly o monthly.

- trackerAccessKey

Si la configuración de acceso de tu rastreador es key, entonces las personas pueden acceder a los datos de tu panel a través de la API con la clave que configuraste en la configuración. Deben enviar esta clave en cada solicitud. Puedes configurar esta clave en el campo trackerAccessKey en el cuerpo de la solicitud. Si la configuración de acceso de tu rastreador es 'public' o 'private' o 'eres el propietario del rastreador y proporcionaste un token de acceso público', entonces no necesitas configurar este campo.

- mainActiveTab

Cuando hagas una solicitud de consulta para un gráfico (genericType= main-chart), debes especificar para qué campo estás haciendo la solicitud. Por ejemplo, si deseas obtener datos del gráfico para visitantes únicos, debes establecer este campo en eventUniqueCount. Además, rangeType es necesario para las solicitudes de gráficos, como se describió anteriormente.

- extendedLimit

Por defecto, cada consulta devuelve 10 resultados por campo. Cuando consultes un solo campo (por ejemplo, al hacer clic en el botón "mostrar más" en el panel), puedes establecer esto en true para obtener 20 resultados por campo. Cada página tendrá 20 elementos y puedes usar el parámetro offset para paginar.

Ejemplos Completos de Consulta

Obtención de Métricas Principales

Solicitud:

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

Respuesta:

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

Obtención del Gráfico Principal

Solicitud:

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

Respuesta:

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

Obtención de Campos No-PFPH

Solicitud:

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

Respuesta:

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

Obtención de Campos PFPH

Solicitud:

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

Respuesta:

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

Obtención del Embudo

Solicitud:

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

Respuesta:

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

Como puede ver, la respuesta también devuelve con IDs de metas en lugar de nombres. Debe usar la información de las metas (que obtuvo con la solicitud get-tracker) para asignar IDs a nombres de metas en el embudo.

Obtención de Tipos de Evento

Solicitud:

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

Respuesta:

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

Obteniendo Resumen en Tiempo Real

Solicitud:

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

Respuesta:

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

Obteniendo un Campo Único con Paginación

Solicitud:

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 - Solicitud para la segunda página:

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

Respuesta:

JSON
       {
    country: [
      { label: 'India-IN', uniq: '195' },
      { label: 'Nigeria-NG', uniq: '162' },
      { label: 'Turquía-TR', uniq: '65' },
      { label: 'Reino Unido-GB', uniq: '57' },
      { label: 'Indonesia-ID', uniq: '35' },
      { label: 'Kenia-KE', uniq: '33' },
      { label: 'Francia-FR', uniq: '31' },
      { label: 'Alemania-DE', uniq: '29' },
      { label: 'Tailandia-TH', uniq: '29' },
      { label: 'Canadá-CA', uniq: '28' },
      { label: 'Sudáfrica-ZA', uniq: '25' },
      { label: 'Italia-IT', uniq: '19' },
      { label: 'Pakistán-PK', uniq: '18' },
      { label: 'Filipinas-PH', uniq: '16' },
      { label: 'Polonia-PL', uniq: '15' },
      { label: 'Taiwán-TW', uniq: '14' },
      { label: 'Emiratos Árabes Unidos-AE', uniq: '13' },
      { label: 'Argentina-AR', uniq: '13' },
      { label: 'Ghana-GH', uniq: '12' },
      { label: 'Malasia-MY', uniq: '12' }
    ],
    unknown: []
  }

Consulta con Condiciones (Filtros)

Solicitud:

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

Respuesta:

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

Cuando tienes el navegador en las condiciones, también recibirás browser_detail en la respuesta. Lo mismo aplica para source -> source_detail, operating_system -> os_detail

Consulta para Tipo de Evento Personalizado en lugar de screen_view

Solicitud:

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

Respuesta:

JSON
       {
    country: [
      { label: 'India-IN', uniq: '16' },
      { label: 'Nigeria-NG', uniq: '5' },
      { label: 'Kenia-KE', uniq: '3' },
      { label: 'Pakistán-PK', uniq: '3' },
      { label: 'Reino Unido-GB', uniq: '2' },
      { label: 'Turquía-TR', uniq: '2' },
      { label: 'Alemania-DE', uniq: '2' },
      { label: 'Botswana-BW', uniq: '2' },
      { label: 'Italia-IT', uniq: '1' },
      { label: 'Sudáfrica-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: 'Inglés (Estados Unidos)-US', uniq: '20' },
      { label: 'Inglés (Reino Unido)-GB', uniq: '16' },
      { label: 'Inglés (India)-IN', uniq: '6' },
      { label: 'Español (Argentina)-419', uniq: '1' },
      { label: 'Inglés (Canadá)-CA', uniq: '1' },
      { label: 'Ruso-desconocido', uniq: '1' },
      { label: 'Francés (Francia)-FR', uniq: '1' },
      { label: 'Chino (S)-CN', uniq: '1' },
      { label: 'Ruso (Rusia)-RU', uniq: '1' },
      { label: 'Alemán-desconocido', uniq: '1' }
    ],
    browser: [
      { label: 'Chrome Móvil', uniq: '21' },
      { label: 'Safari Móvil', uniq: '15' },
      { label: 'Chrome', uniq: '7' },
      { label: 'Firefox', uniq: '2' },
      { label: 'Instagram', uniq: '1' },
      { label: 'Chrome WebView', uniq: '1' },
      { label: 'Facebook', uniq: '1' },
      { label: 'Navegador Samsung', uniq: '1' }
    ],
    unknown: []
  }