El registro de eventos de suscripción forma parte de Slate Analytics, nuestro nuevo producto de datos para socios. El registro de eventos de suscripción se diferencia de otros informes de Slate en varios sentidos:
- Es solo para añadir (cada archivo contiene datos nuevos).
- No está disponible para su descarga en la interfaz de usuario (solo se puede acceder a él a través de la API).
- Está creado explícitamente para los ingenieros de datos asociados, a quienes permite consumir datos detallados para realizar análisis.
Este tema se ha elaborado para ayudar a los ingenieros de datos a configurar sus procesos a fin de recuperar los datos del registro de eventos de suscripción, define los valores de los archivos de registro de eventos de suscripción y proporciona ejemplos de consultas y sugerencias sobre la forma óptima en que los socios pueden utilizar estos datos.
Para empezar, consulta las normas de la guía de incorporación de la API. Para obtener más información sobre los informes que puedes obtener en Slate, consulta la documentación de la API de informes.
Ingesta de datos del registro de eventos de la suscripción
Para acceder a estos datos, debes tener:
- Un perfil de seguridad de Inicio de sesión con Amazon
- Un código de autorización para solicitar un token
- Un token para todas las solicitudes Curl
Prime Video publica nuevos archivos de registro de eventos de suscripción todos los días a las 23:59 UTC. Estos registros pueden contener datos de hasta 12 horas antes. Si hay demoras, nos comunicaremos por correo electrónico lo antes posible.
Hay disponible una lista de registros de eventos de suscripción en la siguiente URL Curl:
https://videocentral.amazon.com/apis/v1/accounts/{account_id}/channelsAnalyticsLogs/{channel/studio_id}/reportTypes/amzn1.vcpa.arcs.insight.29fb1b79-9aa1-4732-9ebb-4befccbeb09a/reports
Usa los siguientes parámetros de solicitud:{
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}
}
El código siguiente es un ejemplo de respuesta a esta solicitud.
{
"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"}
]
}
Usa el valor de downloadUrl para descargar el archivo CSV.
Usa estos vínculos para encontrar tu account_id o tu channel/studio_id.
Gestionar datos nuevos y modificados
Proporcionamos datos a los consumidores en forma de registro de cambios. Cada evento de suscripción se publica solamente una vez. Sin embargo, si es necesario actualizar el valor de alguna columna de una fila proporcionada anteriormente, publicaremos una nueva versión del registro para reflejar los cambios en tu próximo archivo disponible. El registro de cambios es solo para añadir y sirve para garantizar que se capturan todas las modificaciones de los datos. Los ingenieros de datos pueden utilizar este registro de cambios para actualizar directamente sus tablas de datos de suscripciones.
Al procesar el registro de cambios, es esencial utilizar siempre el registro más reciente de un subscription_event_id determinado, según la columna last_update_time_utc. Esto garantiza que siempre tengas la versión más actualizada de cada registro. Si es necesario eliminar un registro, esta acción se refleja en la columna is_deleted. Un valor de 1 indica que el registro se ha eliminado, mientras que un valor de 0 representa un registro activo.
Este enfoque de registro de cambios te permite gestionar de forma eficaz los datos nuevos y modificados, y garantiza que las tablas de datos de tus suscripciones sigan siendo precisas y estén actualizadas con la información más reciente.
Definiciones de columnas
En la siguiente tabla se definen las columnas y los valores que verás en los registros de eventos de suscripción.
Columna |
Definición |
subscription_event_id |
ID único para cada evento de suscripción completado a través de este registro. |
subscription_event_type |
Tipo de evento de suscripción que ha tenido lugar.
|
subscription_event_time_utc |
La hora en que se produjo el evento de suscripción, estandarizada en UTC. |
subscription_event_time_zone |
La zona horaria del mercado de la suscripción. |
cid |
Identificador de cliente anónimo. Este identificador de cliente (CID) se mantendrá durante todos los eventos en un único canal de socio principal para permitir el seguimiento del movimiento entre niveles y del ciclo de vida de los clientes. |
offer_id |
El identificador de la oferta de la suscripción específica con la que se produjo el evento. |
offer_name |
El nombre legible de la oferta. |
offer_type |
El tipo de oferta. |
offer_marketplace |
El mercado en el que estaba disponible la oferta de suscripción. |
offer_billing_type |
El tipo de pago requerido para la oferta.
|
offer_payment_amount |
El importe de facturación del offer_id. |
benefit_id |
El ID de la ventaja de Prime Video con la que está configurada la oferta. |
channel_label |
El nombre del canal en el que está la oferta. Nota: Si esta columna muestra un valor nulo, puede que tengas que incorporarte a Slate Analytics. Para agrupar ofertas o niveles en una única etiqueta de canal, ponte en contacto con tu gestor de cuentas o tu gestor de socios. |
channel_tier_label |
El nombre del canal en el que está la oferta. Nota: Si esta columna muestra un valor nulo, puede que tengas que incorporarte a Slate Analytics. Para agrupar ofertas de un solo nivel, ponte en contacto con tu gestor de cuentas o gestor de socios. |
is_promo |
Indica si una oferta es una promoción en el momento del evento (0 = no es una promoción, 1 = es una promoción). |
create_time_utc |
Hora en que se creó el registro de eventos de suscripción, estandarizada en UTC. |
last_update_time_utc |
La hora a la que se actualizó por última vez el registro de eventos de suscripción, estandarizada en UTC. |
is_deleted |
Indica si un registro que se creó anteriormente debe eliminarse (0 = debe conservarse, 1 = debe eliminarse). |
Casos de uso comunes
Con los datos del registro de eventos de suscripción, puedes asignar fácilmente los recorridos de cada cliente con detalle o agregar los datos para obtener métricas básicas, como las de retención.
En las siguientes secciones se muestran algunos casos de uso comunes y ejemplos de consultas para usar este conjunto de datos.
Nota: Todas estas consultas de ejemplo están escritas para que funcionen con AWS Athena. El nombre de la tabla central de registro de eventos de suscripción es tahoe_cleansed.subs_event_obt en estos ejemplos.
Total de suscriptores al final del periodo medido
La siguiente consulta muestra el número de suscripciones a finales de junio de 2024. Todas las marcas horarias UTC se convierten a la zona horaria 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)
) -- 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;
Total de suscripciones de pago al final del periodo medido
La siguiente consulta muestra el número de suscripciones de pago a finales de junio de 2024. Todas las marcas horarias UTC se convierten a la zona horaria 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)
) -- 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;
Nuevos suscriptores en junio de 2024
La siguiente consulta muestra el número total de suscriptores que se inscribieron entre el 1 de junio y el 1 de julio de 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)
AND subscription_event_time_utc < CAST('2024-07-01' AS TIMESTAMP)
GROUP BY offer_id;
Eventos cancelados
La siguiente consulta muestra el número total de suscripciones que se cancelaron entre el 1 de junio y el 1 de julio de 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)
Conversiones de pruebas gratuitas a ofertas directas en junio de 2024
La siguiente consulta muestra el número total de clientes de pruebas gratuitas que se convirtieron en clientes de oferta directa en junio de 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 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;
Cambio de nivel de cliente de Offer_ID1 a Offer_ID2
La siguiente consulta muestra el número total de clientes que cambiaron el nivel de su suscripción dentro de un canal principal.
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;