Aller au contenu

Analytics multi-tenant

Note d’usage avance : cette page documente une restitution de statistiques par boutique, compte ou client. Le multi-tenant est un modele d’organisation et d’acces aux statistiques, pas un niveau de collecte par nature. Les exemples API requierent un plan ou l’API tenant est activee et une configuration compatible avec ce niveau de restitution.

Pour un produit partage sur un seul hostname comme market.example.com, Pomelo recommande ce modele :

ConceptRoleExemple
siteEntite analytics globalemarket.example.com
tenantBoutique ou espace analytiquedemo-shop
hostname / pathContexte de routagemarket.example.com/demo-shop

site_id reste l’identite de la marketplace. tenant_id reste l’identite stable de la boutique. tenant_slug sert au routage et tenant_name a l’affichage.

SurfaceVariables
SDK JavaScripttenantId, tenantSlug, tenantName, targetTenantId, targetTenantSlug, targetTenantName
API publique / wiretenant_id, tenant_slug, tenant_name
Stockage internegroup_type, group_id, group_slug, group_name, group_source

Votre plateforme reste source de verite des boutiques et synchronise ce registre vers Pomelo. Pomelo resout ensuite tenant_slug -> tenant_id a partir de ce registre.

L’attribution suit cet ordre :

  1. tenant_id explicite
  2. tenant_slug explicite
  3. premier segment du path, par exemple /demo-shop
  4. aucun tenant

Le fallback par path est utile pour les pages boutiques, mais le registre reste la source canonique. Si un tenant explicite est fourni mais ne peut pas etre resolu, l’evenement reste unresolved et ne retombe pas sur le path. Le filtre page n’est donc pas une strategie multi-tenant.

Voir aussi : Guide multi-tenant.

<script
defer
src="https://cdn.pomeloanalytics.com/latest/analytics.js"
data-site-id="site_marketplace"
onload="window.pomelo?.setTenant({
tenantId: 'tenant_demo_shop',
tenantSlug: 'demo-shop',
tenantName: 'Demo Shop'
})"
></script>

Sur les pages tenant, remplacez la balise Pomelo standard par la seule balise avec contexte tenant affichee ici, ou appelez setTenant() depuis le callback SDK pret de votre framework sur le meme script. Ne chargez pas analytics.js deux fois. Quand cet appel a lieu pendant le demarrage du SDK, Pomelo applique le contexte tenant avant de rejouer le premier pageview bufferise.

Le premier pageview de demarrage et les evenements pageview, engagement, perf.* et error.* suivants heritent alors de ce tenant courant.

window.pomelo?.track('boutique.contact_click', {
action_id: 'shop:contact_click',
targetTenantId: 'tenant_demo_shop',
targetTenantSlug: 'demo-shop',
targetTenantName: 'Demo Shop',
});
window.pomelo?.clearTenant();
Fenêtre de terminal
curl -sS -G "https://api.pomeloanalytics.com/v1/tenants" \
-H "Authorization: Bearer $POMELO_API_TOKEN" \
--data-urlencode "site_id=site_marketplace"
Fenêtre de terminal
curl -sS -G "https://api.pomeloanalytics.com/v1/metrics/timeseries" \
-H "Authorization: Bearer $POMELO_API_TOKEN" \
--data-urlencode "site_id=site_marketplace" \
--data-urlencode "tenant_id=tenant_demo_shop" \
--data-urlencode "metric=pageviews"
Fenêtre de terminal
curl -sS -G "https://api.pomeloanalytics.com/v1/metrics/breakdown" \
-H "Authorization: Bearer $POMELO_API_TOKEN" \
--data-urlencode "site_id=site_marketplace" \
--data-urlencode "dimension=tenant"

Quand dimension=tenant, chaque ligne utilise le tenant_id stable comme key. La reponse inclut aussi tenant_slug et tenant_name comme labels d’affichage.

Les tokens peuvent etre restreints a :

  • allowedSiteIds
  • allowedTenantIds

Quand un token est restreint a des boutiques, passez toujours tenant_id dans les requetes analytics.