API de plataforma digital: servicio de audiencia instantánea

Nota:

Aviso de alfa-beta

Este campo o característica forma parte de la funcionalidad que actualmente se encuentra en fase Alfa o Beta. Por lo tanto, está sujeto a cambios.

El servicio de audiencia instantánea es un método del lado del servidor que usa una arquitectura de streaming para agregar grupos individuales o pequeños de usuarios a segmentos, a través de la API de la plataforma digital. Se trata de una alternativa a la API de servicio de segmento por lotes, que se usa para cargar usuarios en masa en los públicos. De forma similar a la API de servicio de segmentos por lotes, las cargas no se procesan en tiempo real y pueden tardar hasta 24 horas en completarse.

Configurar el servicio

Nota:

El Servicio de audiencia instantánea (IAS) es un servicio cerrado y no está habilitado de forma predeterminada. Si está interesado en utilizar IAS, primero debe member_id estar habilitado explícitamente para una configuración de IAS. Póngase en contacto con el representante de la cuenta de Microsoft o con el equipo de soporte técnico para solicitar acceso e iniciar el proceso de habilitación.

Si es un cliente nuevo y desea comenzar a usar el Servicio de audiencia instantánea, deberá abrir un ticket y proporcionar la siguiente información:

  1. ¿Está utilizando ID de usuario externos (es decir, usa mapUID para almacenar la asignación con Xandr)? Si usas identificadores de usuario externos de otro miembro, inclúyelos member_id también.
  2. ¿Necesita rellenar segmentos que pertenecen a otros miembros? Si es así, proporcione el member_idsarchivo .
  3. ¿Cuándo quieres que tus segmentos expiren de forma predeterminada (por ejemplo, nunca expirar, expirar dentro de 60 días, etc.)? Tenga en cuenta que si incluye EXPIRACIÓN en el bloque seg, no se usará la expiración predeterminada.
  4. Las siguientes preguntas son para nuestra planificación de capacidad interna:
    • ¿Cuál es el número de ID de usuario únicos por publicación?
    • ¿Cuál es el número de publicaciones esperadas por día?
    • ¿Cuál es el número de segmentos únicos por publicación?

Autenticar

Consulte el Servicio de autenticación para obtener una descripción general sobre cómo realizar llamadas a la API de Xandr. Al igual que cualquier otro servicio, debe autenticarse en https://api.appnexus.com. Sin embargo, las llamadas posteriores se realizarán al Servicio de Audiencia Instantánea en https://streaming-data.appnexus.com.

Nota:

En la respuesta de autenticación, anote el token, ya que será necesario para las llamadas posteriores al servicio de audiencia instantánea.

Ejemplo de respuesta del servicio de autenticación:

{
    "response": {
        "status": "OK",
        "token": "hbapi:123456:9876abcd54321:nym2",
        "dbg_info": {
            ...
        }
    }
} 

El token devuelto en la respuesta debe incluirse en llamadas posteriores al servicio de audiencia instantánea en el encabezado de autorización o como un access_token parámetro de cadena de consulta, como se muestra en los ejemplos siguientes:

Encabezado Authorization

curl -X POST -H "Authorization: hbapi:123456:9876abcd54321:nym2" https://streaming-data.appnexus.com/rt-segment

Cadena de consulta

curl -X POST https://streaming-data.appnexus.com/rt-segment?access_token=hbapi:123456:9876abcd54321:nym2

Agregar o eliminar usuarios de segmentos

Tras la autenticación, ya está listo para agregar o quitar un usuario a o desde un segmento, mediante un archivo JSON.

Nota:

Asegúrese de esperar aproximadamente 20 minutos antes de intentar agregar usuarios a los segmentos recién creados (para permitir que estos segmentos se propaguen a todos los servidores). Como práctica recomendada, trate de minimizar la creación de nuevos segmentos, reutilizar los segmentos existentes cuando sea posible o utilizar segment valuespara subdividir aún más a los usuarios dentro de los segmentos existentes. Estas prácticas garantizarán el éxito del usuario de agregar o eliminar a los segmentos. Para obtener más información sobre cómo crear segmentos values, consulte Píxeles de segmento: segmentación avanzada y segmentación en la documentación de la interfaz de usuario.

En el ejemplo siguiente se muestra cómo asignar un usuario a dos segmentos. En este ejemplo, el miembro agrega el ID de usuario 12345678900987654321 (este es un ID de usuario de Xandr) a los segmentos 10001 y 10002, estableciendo ambas asociaciones con valor = 1 y expiración en 1440 minutos.

Ejemplo de cómo asignar un usuario a dos segmentos

Llamada API

curl -X POST-H "Authorization: hbapi:123456:9876abcd54321:nym2"-d @json/segment.json "https://streaming-data.appnexus.com/rt-segment"

Carga útil de JSON

{
"rt_segment":
[
{
"user_id":"12345678900987654321",
"seg_block":[
{
"seg_id":10001,
"seg_code":null,"value":1,
"expiration":1440,
"member_id":null
},
{
"seg_id":10002,
"seg_code":null,
"value":1,
"expiration":1440,
"member_id":null
}
],
"domain":null
}
]
}

Respuesta

{
"response":{
"status":"OK",
"message":{
"users_in_request":1,
"segments_in_request":2
},
"warnings":[
]
}
}

Campos JSON

rt_segment array

Campo Tipo Descripción
user_id string Este sería el Xandr user_id o un identificador basado en el dominio, como "AEBE52E7-03EE-455A-B3C4-E57283966239", como ejemplo de un identificador de dispositivo.
Necesario: Al menos uno.
seg_block matriz Matriz de bloques de segmentos para que los segmentos se asocien con el usuario (consulte la estructura de bloques de segmentos a continuación).
Necesario: Al menos uno.
domain string Tipo de identificador que se usa en la solicitud, como el id. de usuario de Xandr (representado con null) o el identificador de dispositivo (idfa, sha1udid, md5udid, openudidy ).aaid

Nota:
No usar sha1mac, que quedó en desuso en 2019.

seg_block array

Campo Tipo Descripción
seg_id Entero El identificador de segmento de Xandr.
Necesario: Si no se utiliza seg_code y member_id para identificar el segmento.
seg_code string Un nombre definido por el usuario para el segmento.

Nota: Puede incluir SEG_CODE AND member_id o SEG_ID, pero no ambos.

Necesario: Si no se utiliza seg_ID para identificar el segmento.
value Entero Un valor numérico que le gustaría asignar a un segmento.
expiration Entero La duración de la asociación usuario-segmento en minutos, a partir de cuando la leemos. Un valor de 0 significa que el segmento nunca expirará; -1 significa que el usuario se quitará de este segmento.
member_id Entero El identificador de miembro del propietario del segmento para el seg_block.
Necesario: Si usa seg_code.

Response

Campo Tipo Descripción
status string Describe si agregar y quitar se realizó o produjo un error.
users_in_request Entero El número de usuarios leídos en la solicitud.

Nota: Esto simplemente mostrará el número de usuarios detectados inicialmente en la solicitud, independientemente de si son válidos.
segments_in_request Entero El número de segmentos leídos en la solicitud.

Nota:
Esto simplemente mostrará el número de segmentos detectados inicialmente en la solicitud independientemente de si son válidos en nuestro sistema y sin importar con qué usuarios se les asocie en la llamada.

Escenarios adicionales POST

Usar el id. de dispositivo (IDFA)

Llamada API de REST (IDFA)
curl -X POST-H "Authorization: hbapi:123456:9876abcd54321:nym2"-d @json/segment.json "https://streaming-data.appnexus.com/rt-segment"
Carga útil JSON (IDFA)
{
"rt_segment":[
{
"user_id":"1ba98a6c-d1a5-49ef-ad1c-2d9230ebcd13",
"seg_block":[
{
"seg_id":12,
"seg_code":null,
"value":1,
"expiration":1440,
"member_id":null
},
{
"seg_id":23784,
"seg_code":null,
"value":1,
"expiration":0,
"member_id":null
}
],
"domain":"idfa"
}
]
}
Respuesta (IDFA)
{
"response":{
"status":"OK",
"message":{
"users_in_request":1,
"segments_in_request":2
},
"warnings":
[
]
}

Uso de códigos para otros miembros

Llamada a la API de REST
curl -X POST-H "Authorization: hbapi:123456:9876abcd54321:nym2"-d @json/segment.json "https://streaming-data.appnexus.com/rt-segment"
Códigos de carga útil JSON para otros miembros
{
"rt_segment":[
{
"user_id":"12345678900987654321",
"seg_block":[{"seg_code":"abcd",
"value":1,
"expiration":1440,
"member_id":1661
},
{
"seg_code":"zywx",
"value":1,
"expiration":1440,
"member_id":1262
}
],
- "domain":null
}
]
}
Códigos de respuesta para otros miembros
{
"response":{
"status":"OK",
“users_in_request”:1,
"segments_in_request":2
}
}

Límites del servicio

Nota:

Los límites del servicio pueden cambiar durante las pruebas alfa y beta de este servicio.

Para cumplir con un tiempo máximo de activación de dos minutos, el servicio de audiencia instantánea tiene actualmente los siguientes límites:

Tipo de límite Descripción
Frecuencia de llamadas Hasta 100 POST llamadas por segundo (por miembro) y hasta 1000 GET llamadas por segundo (por miembro). Si superas este límite de frecuencia, se devolverá el siguiente mensaje: "Límite de frecuencia superado. Ha superado el límite de solicitudes de 1000 lecturas por 1 segundo para rt-segment-processed, espere e inténtelo de nuevo o póngase en contacto con Xandr para obtener límites más altos".
Objetos - Hasta 1000 usuarios por segundo.
- Hasta 100 segmentos por usuario por llamada.
Tamaño de la carga útil La carga útil de JSON no debe superar 1 MB.

Ejemplos de escenarios de error

Agregar o quitar más de 1000 usuarios en una solicitud

Llamada API para agregar o quitar más de 1000 usuarios en una solicitud

curl -X POST-H "Authorization: hbapi:123456:9876abcd54321:nym2"-d @json/1002_users.json "https://streaming-data.appnexus.com/rt-segment"

Carga útil JSON para 1000 usuarios en una solicitud

{
"rt_segment":[
{
"user_id":"12345678900987654321",
"seg_block":[
{
"seg_id":10001,
"seg_code":null,
"value":1,
"expiration":1440,
"member_id":null
},
{
"seg_id":10002,
"seg_code":null,
"value":1,
"expiration":1440,
"member_id":null
}
],"domain":"domain"
},
#... assume there are additional 1000 users inthisarray(1002in total)
]
}

Respuesta para 1000 usuarios en una solicitud

{
"response":{
"status":"OK",
"message":{
"users_in_request":1000,
"segments_in_request":2000
},
"warnings":[
{
"message":"Too many user_ids in request.",
"entity":{
"user_id":"23456789009876543211",
"seg_block":[
{
"seg_id":10001,
"seg_code":null,
"value":1,
"expiration":1440,
"member_id":null
},
{
"seg_id":10002,
"seg_code":null,
"value":1,
"expiration":1440,
"member_id":null
}
]
}
},
#... similar error will be sent for each user over 1000
]
}
}

seg_id o seg_code y member_id no se proporcionan

Carga útil de JSON (seg_id/seg_code y member_id escenario de error)

{
"rt_segment": [
{
"user_id":"1",
"seg_block":
[
{
"seg_id":null,
"seg_code":"abc",
"value":1,
"expiration":1,
"member_id":null
}
]
}
]
}

Escenario de respuesta (seg_id/seg_code y member_id error)

{
"status":"OK",
"message":{
"users_in_request":0,
"segments_in_request":0},
"warnings":[
{
"message":"'seg_id' or 'seg_code' and 'member_id' are required",
"entity":{
"seg_code":"abc",
"value":1,
"expiration":1
}
},
{
"message":"No valid segments for user_id: 1.",
"entity":{
"user_id":"1",
"seg_block":[
{
"seg_code":"abc",
"value":1,
"expiration":1
}
]
}
},
{
"message":"No valid rt_segment in request.",
"entity":{
"rt_segment":[
{
"user_id":"1",
"seg_block":[
{
"seg_code":"abc",
"value":1,"expiration":1
}
]
}
]
}
}
]
}

seg_block No se proporciona

Carga útil de JSON (seg_block escenario de error)

{
"rt_segment":[
{
"user_id":"asdf"
}
],
"domain":"domain"
}

Respuesta (seg_block escenario de error)

{
"status":"OK",
"message":{
"users_in_request":0,
"segments_in_request":0
},
"warnings":[
{
"message":"'seg_block' is required",
"entity":{
"user_id":"asdf"
}
},
{
"message":"No valid rt_segment in request.",
"entity":{
"rt_segment":[
{
"user_id":"asdf"
}
]
}
}
]
}

user_id está vacío

Carga útil de JSON (user_id escenario de error)

{
"rt_segment":[
{
"seg_block":[
{
"seg_id":1,
"seg_code":null,
"value":1,
"expiration":1,
"member_id":null
}
]
}
],
"domain":"domain"
}

Respuesta (user_id escenario de error)

{
"status":"OK",
"message":{
"users_in_request":0,
"segments_in_request":0
},
"warnings":[
{
"message":"'user_id' is required and cannot be empty",
"entity":{
"seg_block":[
{
"seg_id":1,
"seg_code":null,
"value":1,
"expiration":1
}
]
}
},
{
"message":"No valid rt_segment in request.",
"entity":{
"rt_segment":[
{
"seg_block":[
{
"seg_id":1,
"seg_code":null,
"value":1,
"expiration":1
}
]
}
]
}
}
]
}