Das Abonnement-Ereignisprotokoll ist Teil von Slate Analytics, unserem neuen Partner-Datenprodukt. Das Abonnement-Ereignisprotokoll unterscheidet sich in mehrfacher Hinsicht von anderen Slate-Berichten:
- Es kann nur angehängt werden (jede Datei enthält neue Daten)
- Es ist nicht zum Herunterladen auf der Benutzeroberfläche verfügbar (es ist nur über eine API zugänglich)
- Es wurde explizit für Partner-Dateningenieure entwickelt und ermöglicht ihnen, detaillierte Daten für Analysen zu verwenden
Dieses Thema hilft Dateningenieuren, ihre Pipelines zum Abrufen von Abonnement-Ereignisprotokolldaten einzurichten, definiert die Werte in den Abonnement-Ereignisprotokolldateien und bietet Beispielanfragen und Vorschläge für die optimale Art und Weise, wie Partner diese Daten nutzen können.
Um loszulegen, sieh dir die Richtlinien im API-Onboarding-Leitfaden an. Weitere Informationen zu den Berichten, die du von Slate erhalten kannst, findest du in der Dokumentation zur Berichterstellungs-API.
Abonnement-Ereignisprotokolldaten importieren
Um auf diese Daten zugreifen zu können, benötigst du:
- Ein „Anmeldung mit Amazon“-Sicherheitsprofil
- Einen Autorisierungscode, um ein Token anzufordern
- Ein Token für alle curl-Anfragen
Prime Video veröffentlicht täglich um 23:59 UTC neue Abonnement-Ereignisprotokolldateien. Diese Protokolle können Daten aus den letzten 12 Stunden beinhalten. Falls es zu einer Verzögerung kommt, werden wir dich so schnell wie möglich per E-Mail informieren.
Eine Liste der Abonnement-Ereignisprotokolle findest du unter folgender curl-URL:
https://videocentral.amazon.com/apis/v1/accounts/{account_id}/channelsAnalyticsLogs/{channel/studio_id}/reportTypes/amzn1.vcpa.arcs.insight.29fb1b79-9aa1-4732-9ebb-4befccbeb09a/reports
Verwende die folgenden Anfrageparameter:{
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}
}
Der folgende Code zeigt ein Beispiel für eine Antwort auf diese Anfrage.
{
"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"}
]
}
Verwende die downloadUrl, um die CSV-Datei herunterzuladen.
Verwende diese Links, um deine account_id oder deine channel/studio_id zu suchen.
Neue und sich ändernde Daten verwalten
Wir stellen Verbrauchern Daten in Form eines Änderungsprotokolls zur Verfügung. Jedes Abonnementereignis wird nur einmal veröffentlicht. Falls aber Spaltenwerte einer bereits bereitgestellten Zeile aktualisiert werden müssen, veröffentlichen wir eine neue Version des Datensatzes. Die Änderungen werden dann in der nächsten Datei wiedergegeben. Das Änderungsprotokoll kann nur angehängt werden, um sicherzustellen, dass alle Datenänderungen erfasst werden. Dateningenieure können dieses Änderungsprotokoll verwenden, um ihre Abonnement-Datentabellen direkt zu aktualisieren.
Bei der Verarbeitung des Änderungsprotokolls ist es wichtig, dass du immer den aktuellsten Datensatz für eine bestimmte subscription_event_id verwendest, basierend auf der Spalte last_update_time_utc. Dadurch wird sichergestellt, dass du immer die aktuellste Version jedes Datensatzes hast. Wenn ein Datensatz gelöscht werden muss, wird diese Aktion in der Spalte is_deleted wiedergegeben. Ein Wert von 1 gibt an, dass der Datensatz gelöscht wurde, während ein Wert von 0 einen aktiven Datensatz darstellt.
Dieser Änderungsprotokoll-Ansatz ermöglicht es dir, neue und sich ändernde Daten effektiv zu verwalten. Er sorgt dafür, dass deine Abonnement-Datentabellen jederzeit korrekt und auf dem neuesten Stand sind.
Allgemeine Definitionen
Die folgende Tabelle definiert die Spalten und Werte, die du in Abonnement-Ereignisprotokollen sehen wirst.
Spalte |
Definition |
subscription_event_id |
Eindeutige ID für jedes in diesem Protokoll ausgegebene Abonnementereignis. |
subscription_event_type |
Die Art des Abonnementereignisses, das eingetreten ist.
|
subscription_event_time_utc |
Die Uhrzeit, zu der das Abonnementereignis eingetreten ist, standardisiert auf UTC. |
subscription_event_time_zone |
Die Zeitzone des Abonnement-Marktplatzes. |
cid |
Anonymisierte Kundenkennung. Diese Kundenkennung (CID) wird für alle Ereignisse in einem einzigen übergeordneten Kanal beibehalten, um Bewegungen und Kundenlebenszyklus-Tracking zwischen den einzelnen Stufen zu ermöglichen. |
offer_id |
Die Kennung des spezifischen Abonnementangebots, bei dem das Ereignis eingetreten ist. |
offer_name |
Der von Menschen lesbare Name des Angebots. |
offer_type |
Die Art des Angebots. |
offer_marketplace |
Der Marktplatz, auf dem das Abonnementangebot live war. |
offer_billing_type |
Die für das Angebot erforderliche Zahlungsart.
|
offer_payment_amount |
Der Rechnungsbetrag der offer_id. |
benefit_id |
Die Kennung des Prime Video-Vorteils, unter dem das Angebot konfiguriert ist. |
channel_label |
Der Name des Channels, unter dem das Angebot läuft. Hinweis: Wenn diese Spalte einen Nullwert anzeigt, musst du möglicherweise zu Slate Analytics wechseln. Für Gruppenangebote oder Stufen wende dich bitte an deinen CAM oder PsM. |
channel_tier_label |
Der Name des Channels, unter dem das Angebot läuft. Hinweis: Wenn diese Spalte einen Nullwert anzeigt, musst du möglicherweise zu Slate Analytics wechseln. Um Angebote unter einer einzigen Gruppe zusammenzufassen, wende dich bitte an deinen CAM oder PsM. |
is_promo |
Gibt an, ob ein Angebot zum Zeitpunkt des Ereignisses Teil einer Werbeaktion ist (0 = keine Werbeaktion, 1 = Werbeaktion). |
create_time_utc |
Der Zeitpunkt, zu dem der Eintrag im Abonnement-Ereignisprotokoll erstellt wurde, standardisiert auf UTC. |
last_update_time_utc |
Der Zeitpunkt, zu dem der Abonnement-Ereignisprotokolldatensatz zuletzt aktualisiert wurde, standardisiert auf UTC. |
is_deleted |
Gibt an, ob ein Datensatz, der zuvor erstellt wurde, gelöscht werden sollte (0=sollte bestehen bleiben, 1= sollte gelöscht werden). |
Häufige Anwendungsfälle
Mit den Daten, die im Abonnement-Ereignisprotokoll bereitgestellt werden, kannst du ganz einfach einzelne Kundenreisen detailliert abbilden oder die Daten für zentrale Kennzahlen wie Kundenbindung aggregieren.
Die folgenden Abschnitte enthalten einige gängige Anwendungsfälle und Beispielanfragen für die Nutzung dieses Datensatzes.
Hinweis: Alle diese Beispielanfragen wurden für die Arbeit mit AWS Athena geschrieben. Die zentrale Abonnement-Ereignisprotokolltabelle für diese Beispiele heißt tahoe_cleansed.subs_event_obt.
Gesamtzahl der Abonnenten am Ende des gemessenen Zeitraums
Die folgende Anfrage gibt die Anzahl der Abonnements Ende Juni 2024 an. Alle UTC-Zeitstempel werden in die lokale Zeitzone umgerechnet.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)
) -- Active before end of month, cancelled after month end
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 all active who stayed active and renewed after the month end
GROUP BY
offer_id;
Gesamtzahl der bezahlten Abonnements am Ende des gemessenen Zeitraums
Die folgende Abfrage gibt die Anzahl der bezahlten Abonnements Ende Juni 2024 an. Alle UTC-Zeitstempel werden in die lokale Zeitzone umgerechnet.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)
) -- Active before end of month, cancelled after month end
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 all active who stayed active and renewed after the month end
GROUP BY
offer_id;
Neue Abonnenten im Juni 2024
Die folgende Anfrage gibt die Anzahl der bezahlten Abonnements zwischen 1. Juni und 1. Juli 2024 an.-- 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)
AND subscription_event_time_utc < CAST('2024-07-01' AS TIMESTAMP)
GROUP BY offer_id;
Abgebrochene Events
Die folgende Anfrage liefert die Gesamtzahl der Abonnements, die zwischen dem 1. Juni und dem 1. Juli 2024 gekündigt wurden.
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)
Konvertierungen der kostenlosen Testversion auf HO im Juni 2024
Die folgende Anfrage gibt die Gesamtzahl der Kunden an, die im Juni 2024 auf ein festes Angebot umgestellt haben.
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 on a.cid = b.cid and a.offer_id = b.offer_id
where b.ho_event_time > a.ft_event_time)
select count(distinct cid || offer_id) as num_conversions
from conversions;
Änderung der Kundenstufe von Offer_ID1 to Offer_ID2
Die folgende Anfrage gibt die Gesamtzahl der Kunden an, die ihre Abonnementstufe innerhalb eines übergeordneten Channels geändert haben.
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;