Le journal des événements d’abonnement fait partie de Slate Analytics, notre nouveau produit de données pour les partenaires. Le journal des événements d’abonnement est différent des autres rapports Slate de plusieurs manières :
- Il est uniquement disponible en ajout (chaque fichier contient de nouvelles données)
- Il n’est pas disponible au téléchargement dans l’interface utilisateur (il est accessible uniquement via l’API)
- Il est conçu explicitement pour les ingénieurs de données partenaires et leur permet de consommer des données granulaires pour effectuer des analyses
Cette rubrique aide les ingénieurs de données à configurer leurs pipelines pour récupérer les données du journal des événements d’abonnement, définit les valeurs dans les fichiers du journal des événements d’abonnement et fournit des exemples de requêtes et des suggestions sur la manière optimale dont les partenaires peuvent utiliser ces données.
Pour commencer, consultez les instructions du Guide d’intégration de l’API. Pour plus d’informations sur les rapports que vous pouvez obtenir auprès de Slate, consultez la documentation Rapports API.
Ingérer les données du journal des événements d’abonnement
Pour accéder à ces données, vous devez disposer de :
- Un identifiant avec Amazon Security Profile
- Un code d’autorisation pour demander un jeton
- Un jeton pour toutes les requêtes curl
Prime Video publie de nouveaux fichiers journaux des abonnements aux évènements tous les jours, à 23 h 59 UTC. Ces journaux peuvent contenir des données datant de 12 heures au plus tôt. En cas de retard, nous vous informerons par e-mail dès que possible.
Une liste des journaux des abonnements aux évènements est disponible à l’adresse URL curl suivante :
https://videocentral.amazon.com/apis/v1/accounts/{account_id}/channelsAnalyticsLogs/{channel/studio_id}/reportTypes/amzn1.vcpa.arcs.insight.29fb1b79-9aa1-4732-9ebb-4befccbeb09a/reports
Utilisez les paramètres de requête suivants :{
limit: {The number of reports returned in a single request (the page size).},
offset: {The number of pages to skip (the page number).},
modifiedDateGte: {UTC timezone since you last pull}
}
Le code montre un exemple de réponse à cette demande.
{
"next":{link to next request},
"total":{num of reports},
"data":
[
{
"downloadUrl":"{presigned url}",
"numRows":{num of rows},
"reportDateBegin":"2024-07-18",
"reportDateEnd":"2024-07-19",
"modifiedDate":"2024-07-23T17:24:29.312Z",
"name":"Channels Persistent CID Subscription Event Log",
"cadence":"Daily"}
]
}
Utilisez l’URL de téléchargement pour télécharger le fichier CSV.
Utilisez ces liens pour trouver votre identifiant account_id ou votre identifiant channel/studio_id.
Gérer les données nouvelles et faisant l’objet d’une modification
Nous fournissons des données aux consommateurs sous la forme d’un journal des modifications. Chaque abonnement n’est publié qu’une seule fois. Toutefois, si les valeurs de colonne d’une ligne précédemment fournie doivent être mises à jour, nous publierons une nouvelle version de l’enregistrement afin de refléter les modifications dans votre prochain fichier disponible. Le journal des modifications ne peut être ajouté que pour garantir que toutes les modifications de données sont capturées. Les ingénieurs de données peuvent utiliser ce journal des modifications pour mettre à jour directement leurs tableaux de données d’abonnement.
Lorsque vous traitez le journal des modifications, il est essentiel de toujours utiliser le dernier enregistrement pour un identifiant subscription_event_id donné, en fonction de la colonne last_update_time_utc. Cela garantit que vous disposez toujours de la version la plus récente de chaque enregistrement. Si un enregistrement doit être supprimé, cette action est reflétée dans la colonne is_deleted. Une valeur de 1 indique que l’enregistrement a été supprimé, tandis qu’une valeur de 0 représente un enregistrement actif.
Cette approche du journal des modifications vous permet de gérer efficacement les données nouvelles et sujettes à modification, et garantit que les tableaux de données de vos abonnements restent exacts et à jour avec les informations les plus récentes.
Définition de colonnes
Le tableau suivant définit les colonnes et les valeurs que vous verrez dans les journaux d’abonnement aux événements.
Colonne |
Définition |
subscription_event_id |
Identifiant unique pour chaque abonnement vendu via ce journal. |
subscription_event_type |
Type d’abonnement aux événements qui a eu lieu.
|
subscription_event_time_utc |
Heure à laquelle l’abonnement à l’événement a eu lieu, normalisée à UTC. |
subscription_event_time_zone |
Le fuseau horaire du site de vente des abonnements. |
cid |
Identifiant client anonymisé. Cet identifiant client (CID) sera conservé pour tous les événements sous une seule chaîne parent afin de permettre le mouvement inter-niveaux et le suivi du cycle de vie du client. |
offer_id |
L’identifiant de l’offre d’abonnement spécifique à laquelle l’abonnement à événement s’est produit. |
offer_name |
Le nom de l’offre lisible par un humain |
offer_type |
Le type d’offre. |
offer_marketplace |
Le site de vente sur lequel l’offre d’abonnement était mis en ligne. |
offer_billing_type |
Le type de paiement requis pour l’offre.
|
offer_payment_amount |
Le montant de facturation de l’identifiant offer_id. |
benefit_id |
L’Identifiant de l’avantage Prime Video sous lequel l’offre est configurée. |
channel_label |
Le nom de la chaîne faisant l’objet de l’offre. Remarque : Si cette colonne affiche une valeur nulle, vous devrez peut-être intégrer Slate Analytics. Pour regrouper des offres ou des niveaux sous une seule étiquette de chaîne, veuillez contacter votre CAM ou PsM. |
channel_tier_label |
Le nom de la chaîne sous laquelle l’offre est attribuée. Remarque : Si cette colonne affiche une valeur nulle, vous devrez peut-être intégrer Slate Analytics. Pour regrouper les offres sous un seul niveau, veuillez contacter votre CAM ou PsM. |
is_promo |
Indique si une offre est en promotion au moment de l’événement (0 = pas de promotion, 1 = oui promotion). |
create_time_utc |
Heure de création de l’enregistrement du journal des abonnements aux événements, normalisée en UTC. |
last_update_time_utc |
L’heure de la dernière mise à jour de l’enregistrement du journal des abonnements aux événements, normalisée en UTC. |
is_deleted |
Indique si un enregistrement précédemment créé doit être supprimé (0 = doit continuer, 1 = doit être supprimé). |
Cas d’utilisation courants
Grâce aux données fournies dans le journal des abonnements aux événements, vous pouvez facilement cartographier les parcours clients individuels de manière très détaillée ou regrouper les données pour des indicateurs de base tels que la conservation.
Les sections suivantes fournissent des cas d’utilisation courants et des exemples de requêtes pour exploiter cet ensemble de données.
Remarque : Tous ces exemples de requêtes sont écrits pour fonctionner avec AWS Athena. Le tableau du journal des abonnements aux événements central est nommé tahoe_cleansed.subs_event_obt pour ces exemples.
Nombre total d’abonnés à la fin de la période mesurée
La requête suivante fournit le nombre d’abonnements à la fin du mois de juin 2024. Tous les horodatages UTC sont convertis dans le fuseau horaire local.WITH main AS (
SELECT
a.cid,
a.offer_id,
SPLIT(a.offer_id, '-')[1] as offer_group_id,
cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp) AS curr_subscription_event_time,
a.subscription_event_type AS curr_event_type,
LEAD(a.subscription_event_type) OVER (
PARTITION BY a.encrypted_customer_id, SPLIT(a.offer_id, '-')[1]
ORDER BY cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp)
) AS next_event_type,
LEAD(cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp)) OVER (
PARTITION BY a.encrypted_customer_id, SPLIT(a.offer_id, '-')[1]
ORDER BY cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp)
) AS next_subscription_event_time
FROM
tahoe_cleansed.subs_event_obt a
WHERE
a.subscription_event_type IN ('Start', 'Renewal', 'Cancel')
)
SELECT
offer_id,
COUNT(DISTINCT cid || offer_group_id) AS month_end_subscriptions
FROM
main
WHERE
(curr_event_type IN ('Renewal', 'Start') AND next_event_type IS NULL AND
curr_subscription_event_time < CAST('2024-07-01' as timestamp)) -- Currently active subscriptions
OR (
curr_event_type IN ('Renewal', 'Start')
AND curr_subscription_event_time < CAST('2024-07-01' AS TIMESTAMP)
AND next_event_type = 'Cancel'
AND next_subscription_event_time >= CAST('2024-07-01' AS TIMESTAMP)
) -- Actif avant la fin du mois, annulé après la fin du mois
OR (
curr_event_type IN ('Renewal', 'Start')
AND next_event_type IN ('Renewal', 'Start')
AND curr_subscription_event_time < CAST('2024-07-01' AS TIMESTAMP)
AND next_subscription_event_time >= CAST('2024-07-01' AS TIMESTAMP)
) -- Capture tous les actifs qui sont restés actifs et ont renouvelé après la fin du mois
GROUP BY
offer_id;
Total des abonnements payants à la fin de la période mesurée
La requête suivante fournit le nombre d’abonnements payants à la fin du mois de juin 2024. Tous les horodatages UTC sont convertis dans le fuseau horaire local.WITH main AS (
SELECT
a.cid,
a.offer_id,
SPLIT(a.offer_id, '-')[1] as offer_group_id,
cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp) AS curr_subscription_event_time,
a.subscription_event_type AS curr_event_type,
LEAD(a.subscription_event_type) OVER (
PARTITION BY a.encrypted_customer_id, SPLIT(a.offer_id, '-')[1]
ORDER BY cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp)
) AS next_event_type,
LEAD(cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp)) OVER (
PARTITION BY a.encrypted_customer_id, SPLIT(a.offer_id, '-')[1]
ORDER BY cast(from_iso8601_timestamp(date_format(at_timezone(a.subscription_event_time_utc, a.subscription_event_time_zone), '%Y-%m-%dT%H:%i:%s')) as timestamp)
) AS next_subscription_event_time
FROM
tahoe_cleansed.subs_event_obt a
WHERE
a.subscription_event_type IN ('Start', 'Renewal', 'Cancel').
and offer_billing_type = 'HO'
)
SELECT
offer_id,
COUNT(DISTINCT cid || offer_group_id) AS month_end_subscriptions
FROM
main
WHERE
(curr_event_type IN ('Renewal', 'Start') AND next_event_type IS NULL AND
curr_subscription_event_time < CAST('2024-07-01' as timestamp)) -- Currently active subscriptions
OR (
curr_event_type IN ('Renewal', 'Start')
AND curr_subscription_event_time < CAST('2024-07-01' AS TIMESTAMP)
AND next_event_type = 'Cancel'
AND next_subscription_event_time >= CAST('2024-07-01' AS TIMESTAMP)
) -- Actif avant la fin du mois, annulé après la fin du mois
OR (
curr_event_type IN ('Renewal', 'Start')
AND next_event_type IN ('Renewal', 'Start')
AND curr_subscription_event_time < CAST('2024-07-01' AS TIMESTAMP)
AND next_subscription_event_time >= CAST('2024-07-01' AS TIMESTAMP)
) -- Capture tous les actifs qui sont restés actifs et ont renouvelé après la fin du mois
GROUP BY
offer_id;
Nouveaux abonnés en juin 2024
La requête suivante fournit le nombre total d’abonnés qui se sont inscrits entre le 1er juin et le 1er juillet 2024.-- New Subscribers
SELECT
offer_id, COUNT(DISTINCT cid) AS new_subscribers
FROM
tahoe_cleansed.subs_event_obt
WHERE
subscription_event_type = 'Start'
AND subscription_event_time_utc >= CAST('2024-06-01' AS TIMESTAMP)
ET subscription_event_time_utc < CAST('2024-07-01' AS TIMESTAMP)
GROUP BY offer_id;
Événements annulés
La requête suivante fournit le nombre total d’abonnements qui ont été annulés entre le 1er juin et le 1er juillet 2024.
SELECT
count(distinct cid || offer_id)
FROM
tahoe_cleansed.subs_event_obt
WHERE subscription_event_type = 'Cancel'
AND subscription_event_time_utc >= CAST('2024-06-01' AS TIMESTAMP)
AND subscription_event_time_utc < CAST('2024-07-01' AS TIMESTAMP)
Conversions d’essais gratuits vers HO en juin 2024
La requête suivante fournit le nombre total de clients d’essais gratuits qui sont passés à une offre ferme en juin 2024.
WITH events AS (
SELECT
subscription_event_id,
cid,
offer_id,
offer_billing_type,
subscription_event_type,
subscription_event_time_utc,
CASE
WHEN subscription_event_type = 'Start' or subscription_event_type = 'Renewal' THEN 1
ELSE 0
END AS is_active,
ROW_NUMBER() OVER (PARTITION BY cid, offer_id ORDER BY subscription_event_time_utc DESC) AS rn
FROM
tahoe_cleansed.subs_event_obt
WHERE
subscription_event_time_utc >= CAST('2024-06-01' AS TIMESTAMP)
AND subscription_event_time_utc < CAST('2024-07-01' AS TIMESTAMP)
),
ft_events AS (
SELECT
cid,
offer_id,
min(subscription_event_time_utc) as ft_event_time
from events
group by cid,
offer_id
),
ho_events AS (
SELECT
cid,
offer_id,
subscription_event_time_utc as ho_event_time
FROM
events
WHERE
rn = 1 and offer_billing_type = 'HO' and is_active = 1
),
conversions as (select a.cid,
a.offer_id,
a.ft_event_time,
b.ho_event_time
from ft_events a
inner join ho_events b sur a.cid = b.cid et a.offer_id = b.offer_id
où b.ho_event_time > a.ft_event_time)
select count(cid distinct || offer_id) as num_conversions
from conversions;
Changement de niveau client de Offer_ID1 à Offer_ID2
La requête suivante fournit le nombre total de clients qui ont changé de niveau d’abonnement au sein d’une chaîne parent.
with first_offer as (
select cid,min(subscription_event_time_utc) as first_offer_time
from tahoe_cleansed.subs_event_obt
where subscription_event_type in ('Start','Renewal')
and offer_id = 'offer_id1'
group by cid
),
second_offer as (
select cid,min(subscription_event_time_utc) as second_offer_time
from tahoe_cleansed.subs_event_obt
where subscription_event_type in ('Start','Renewal')
and offer_id = 'offer_id2'
group by cid
)
select distinct a.cid
from first_offer a
inner join second_offer b on a.cid = b.cid
where b.second_offer_time > a.first_offer_time;