Cuando las tecnologías publicitarias activan las APIs de medición (API de Attribution Reporting o API de Private Aggregation), los informes encriptados se envían desde el navegador Chrome o el cliente al extremo de informes de la tecnología publicitaria, que es una URL de .well-known con el origen de informes de la tecnología publicitaria. La tecnología publicitaria aloja el extremo de informes para recopilar los informes encriptados.
A continuación, se indican los extremos por API:
Private Aggregation
- Depura
[reporting-origin]/.well-known/private-aggregation/debug/report-shared-storage [reporting-origin]/.well-known/private-aggregation/report-shared-storageo/.well-known/private-aggregation/report-protected-audienceen vivo
- Depura
Informes de atribución
- Depura
[reporting-origin]/.well-known/attribution-reporting/debug/report-aggregate-attribution - En vivo
[reporting-origin]/.well-known/attribution-reporting/report-aggregate-attribution
- Depura
Las tecnologías publicitarias recibirán los informes en formato JSON a través de una llamada POST. Las tecnologías publicitarias recopilarán estos informes en formato JSON y, luego, los convertirán al formato AVRO que se usa en el Servicio de agregación. Una vez convertidos, los informes AVRO se almacenan en el almacenamiento en la nube de la tecnología publicitaria para su procesamiento por lotes posterior.
Una vez que la tecnología publicitaria esté lista para el procesamiento por lotes, activará una solicitud de trabajo de agregación a través del servicio de agregación, en la que los informes se recuperarán del almacenamiento en la nube de la tecnología publicitaria. El Servicio de agregación se aloja en el almacenamiento en la nube de la tecnología publicitaria y debe tener una imagen incluida en la lista de entidades permitidas.
Los informes recibidos son similares a los siguientes:
API de Private Aggregation
{
"aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com",
"aggregation_service_payloads": [ {
"key_id": "1a2baa3f-5d48-46cf-91f0-772633c12640",
"payload": "8Cjr1s3FVkCYkjzBvyzJn14yardVjd5N4vLCA69LQAPbIkJ0B58hAqUGBCNXpvTjW9ZpIoZbCSiUOsUDuoA/S+tqVolLMkame6sWC07cfUmZcVsbU+La3pzTMtCgdtNc8MIWgD3C63CMw7rWroRlechewVUajvAYVK/0HJq0YyGrTiFZZm36zi0jjyHLAXKV8p1Lvy1d0o/wnBxC5oVo5BV6LPkxqQEcoYS2GyixUuht6wD0RzuH+BxxuH6vY/ynp2xDrnwftjvqwDUAxUWLFTunthM6BXZVxlrvOBim1h2dvPqWSyKZ5gafo+MgW9EM4SraavNM3XzZSCjdtAfSMJMrynSu2j0opyAq+9e1jq1xeYN00yZrJ0Y/GTI45IGjgCnVmvmuoI9ucW2SnXP31CQBwHqk4gtUgMsYGFSUYfhtnAQ/8TSbaXyS2LX+cQW87LqkvIraWw6o37O24VFBreFoFFXpu3IUeCZfji+Sr4/ykfZuHeMzQbBavyNnHKzPZlbLSXMiucx4/vWzYyOzHeIlbtupXVvbi40V2PieDShaSbjI266kGgFkeCk6z51AaAGebDPtRT1lhBpcoQ6JdF0Yp5VWSnyFARKFtCZ1aEBrlUlrEHLUQY/pFtmDxJQiicRz1YPjR8jRr3C7hlRhWwov0dMocqnMz5209hHGVZWSsaGc9kWjtxREW2ULXfoIwOGbX+WZsyFW2RhXksQPJ5fhyNc4ROkAzUthLb68gC5e0yZHvmLIAU4hcWe0UanJv+jRljn8PAPaJHKFUxQNJyBA7mTbn5mkpycxGrX6T3ZYdPHqvckqt9llJZWjr8NneizzZFRuJk423BDs38fXkvcTAsAckd2Zu0u2KC45WR93sN2/CWrqB7/QU9BsgNdonl/ehAWhU1LbcRRvBTcR9+0wL7vRL7cv5LG3+gRYRKsWI6U2nDSWp0cNpo9+HU0JNiifa5X0cguihqU2bSk6ABozgRtCZ7m+7eqWXMLSzBdmc1CPUoQppo6Wmf6ujdNqI6v2S6pDH781lph8Z2v7ZpxGdhVVPEL51cVn"
} ],
"debug_key": "1234",
"shared_info": "{\"api\":\"shared-storage\",\"report_id\":\"05e3b948-cb8d-4404-be29-bfeac7ad9710\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1707784729\",\"version\":\"0.1\"}"
}
API de Attribution Reporting
{
"aggregation_coordinator_origin": "https://publickeyservice.msmt.aws.privacysandboxservices.com",
"aggregation_service_payloads": [ {
"key_id": "2dee0f3f-2aee-4a4a-8238-9154ed3d6f72",
"payload": "pHvTHhcxvNKaCmnLpvYQsXlJpiNRuFO5Zj1QqUlqgWPOfuoHLfiXiFjmpvY8a53/OYnS4bKwHwJReFcofldsu8E9BzTTJ3CEk+B7vbEjnDPaljhpIBMTuQXy3QHGK4slWR/yNZVm2uXRWR/DVVzXziBoTDjN7qaPstRoLKUUMdfY2u8oq4tnLY00Y+NDZttZ4wJvC7hPmvY3lqHjdl14JPD2ytZZ4NViYzno3WKdH/oZc0jhGK4zI38lAM0qpahF/B9yb4zOu7IRIjQpNx73P8naDyddxLldoVlW/qHpO04FguWymscvI/8i6NwUR6Kj8seRlWS0iIUhETt/ai3lilKUHUb+uz0YG2kxjoXq7Ldk+MP56nNl67ZRNi2YZ7bOGI/okYWoT/wt2uWPe/5xAEMmadxl0hQQrG7YXHRSD8rDnaVPXo+AKIxdg727yJeB1ZENZvovl/kIevdRAmdBe2h1U3J6Uz6psly/46fvjgkj5QD+kO2uaYirzvmwS19luJsN/Qvh/R3ZO4qlJIQI0nDJPWwUJ4ODpyVmj4a0xQp3t2ESEnf4EmY7+khn3xpF5+MwEWKES2ZeDf7SHalR99pvZA8G3Fr8M0PWFmT00cmKCBwpQgZyd3Eay70UlqdkbFEedxiCVWKNNOUz41m5KG/7K3aR+dYx57l57Wct4gOFQg3jiUEBJWrFIVCXf12BT5iz5rBQh1N1CUt2oCOhYL/sPuBl6OV5GWHSIj8FUdpoDolqKXWINXfE88MUijE2ghNRpJN25BXIErUQtO9wFQv7zotC6d2BIaF0x8AkKg/7yzBQRySX/FZP3H3lMkpOz9rQMV8DjZ2lz7nV4k6CFo8qhT6cpYJD7GpYl81xJbglNqcJt5Pe5YUHrdBMyAFsTh3yoJvYnhQib/0xVN/a93lbYccxsd0yi375n4Xz0i1HUoe2ps+WlU8XysAUA1agG936eshaY1anTtbJbrcoaH+BNSacKiq4saprgUGl4eDjaR/uBhvUnO52WkmAGon8De3EFMZ/kwpPBNSXi7/MIAMjotsSKBc19bfg"
} ],
"shared_info": "{\"api\":\"attribution-reporting\",\"attribution_destination\":\"https://privacy-sandbox-demos-shop.dev\",\"report_id\":\"5b052748-f5fb-4f14-b291-de03484ed59e\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1707786751\",\"source_registration_time\":\"0\",\"version\":\"0.1\"}",
"source_debug_key": "123456789",
"trigger_debug_key": "123456789"
}
Convierte informes de JSON a AVRO
Cuando se agrupan, los informes agregables deben estar en formato AVRO. Para crear un informe AVRO, necesitarás el esquema AVRO del informe (AVSC).
Hay un código de JavaScript de ejemplo disponible en el repositorio de GitHub del Servicio de agregación.
A continuación, se muestra el esquema de AVRO para los informes agregables. Los diferentes campos de los informes son payload, key_id y shared_info.
{
"type": "record",
"name": "AggregatableReport",
"fields": [
{
"name": "payload",
"type": "bytes"
},
{
"name": "key_id",
"type": "string"
},
{
"name": "shared_info",
"type": "string"
}
]
}
| Parámetro | Tipo | Descripción |
|---|---|---|
payload |
Bytes |
La carga útil deberá decodificarse en base64 y convertirse en un array de bytes desde payload para los informes de producción o en vivo.
|
debug_cleartext_payload |
Bytes |
La carga útil deberá decodificarse en Base64 y convertirse en un array de bytes desde debug_cleartext_payload para los informes de depuración.
|
key_id |
String | Esta será la cadena key_id que se encuentra en el informe. El key_id será un identificador único universal de 128 bits similar. |
shared_info |
String | Será la cadena sin alteraciones que se encuentra en el campo shared_info del informe. |
Este es un ejemplo de informe en formato JSON:
{
"aggregation_coordinator_identifier": "aws-cloud",
"aggregation_service_payloads": [{
"debug_cleartext_payload": "omRkYXhgaJldmFsdWVEAAAAgGZidWNrZXRQAAAAAAAAAAAAAAAAAAAFWW1vcGVyYX",
"key_id": "3c6e2850-edf6-4886-eb70-eb3f2a7a7596",
"payload": "oapYz92Mb1yam9YQ2AnK8dduTt2RwFUSApGcKqXnG1q+aGXfJ5DGpSxMj0NxdZgp7Cq"
}],
"debug_key": "1234",
"shared_info":
"{\"api\":\"shared-storage\",\"debug_mode\":\"enabled\",\"report_id\":\"b029b922-93e9-4d66-a8c6-8cdeec762aed\",\"reporting_origin\":\"https://privacy-sandbox-demos-dsp.dev\",\"scheduled_report_time\":\"1719251997\",\"version\":\"0.1\"}"
}
AVRO de dominio de salida
Para generar informes de resumen con el Servicio de agregación, la tecnología publicitaria requiere los informes agregables y el archivo de dominio. Los informes agregables serán los informes JSON que se reciban en el origen de informes y se conviertan al formato AVRO. Los dominios de salida contendrán las claves declaradas previamente que se recopilarán de tus informes agregables y se escribirán en los informes de resumen. Obtén más información sobre estas claves en Attribution Reporting y las claves en Private Aggregation. El dominio de salida contendrá el bucket del campo y el valor del bucket será la clave del bucket.
El archivo de dominio también deberá estar en formato AVRO con el siguiente esquema:
{
"type": "record",
"name": "AggregationBucket",
"fields": [
{
"name": "bucket",
"type": "bytes",
"doc": "A single bucket that appears in the aggregation service output. 128-bit integer encoded as a 16-byte big-endian bytestring."
}
]
}
Clave del bucket
La clave del bucket debe ser una cadena de bytes hexadecimal de la clave del bucket. Un ejemplo de esto sería tener una clave de 1369 en decimal. Cuando se convierte a hexadecimal, es 559. Luego, deberás convertir 559 en una cadena de bytes para agregarla al AVRO del dominio de salida.
Informes por lotes
Para obtener más información sobre los presupuestos de privacidad y el procesamiento por lotes, consulta el documento sobre estrategias de procesamiento por lotes. Además, ten en cuenta que un informe agregable solo se puede procesar por lotes dentro de un período determinado. Un informe no debe exceder el valor de MAX_REPORT_AGE entre la fecha de scheduled_report_time y la fecha de ejecución del lote (actualmente, 90 días).
Informes de resumen
Después de agrupar los datos, el Servicio de agregación crea el informe de resumen en formato AVRO. El informe de resumen usa el esquema results.avsc.
El informe de resumen se ubicará en output_data_blob_prefix, en el bucket output_data_bucket_name que se indica en la solicitud createJob.
Para los lotes del Servicio de agregación en los que se habilita debug_run, se crean dos informes. El informe de resumen y el informe de resumen de depuración El informe de resumen de depuración se ubicará en la carpeta output_data_blob_prefix/debug.
El informe de depuración generado usa el esquema debug_results.avsc.
Tanto el informe de resumen como el de depuración se llamarán [output_data_blob_prefix]-1-of-1.avro. Si tu output_data_blob_prefix es summary/summary.avro, el informe estará en la carpeta de resumen con el nombre summary-1-of-1.avro.
results.avsc
{
"type": "record",
"name": "AggregatedFact",
"fields": [
{
"name": "bucket",
"type": "bytes",
"doc": "Histogram bucket used in aggregation. 128-bit integer encoded as a 16-byte big-endian bytestring. Leading 0-bits will be left out."
},
{
"name": "metric",
"type": "long",
"doc": "Metric associated with the bucket"
}
]
}
debug_results.avsc
{
"type": "record",
"name": "DebugAggregatedFact",
"fields": [
{
"name": "bucket",
"type": "bytes",
"doc": "Histogram bucket used in aggregation. 128-bit integer encoded as a 16-byte big-endian bytestring. Leading 0-bits will be left out."
},
{
"name": "unnoised_metric",
"type": "long",
"doc": "Unnoised metric associated with the bucket."
},
{
"name": "noise",
"type": "long",
"doc": "The noise applied to the metric in the regular result."
}
{
"name":"annotations",
"type": {
"type": "array",
"items": {
"type":"enum",
"name":"bucket_tags",
"symbols":["in_domain","in_reports"]
}
}
]
}
Una vez que se convierta, tu informe de resumen se verá como el ejemplo results.json. Cuando debug_run está habilitado, el informe de resumen de depuración devuelve algo similar al ejemplo debug_results.json.
results.json (ejemplo)
Los informes AVRO provenientes del Servicio de Agregación pueden parecer similares, ya que incluyen la clave del bucket y el valor de resumen o agregado con ruido adicional de los valores del bucket.
{
"bucket": "\u0005Y",
"metric": 26308
}
debug_results.json (ejemplo)
Los informes de AVRO de depuración provenientes del Servicio de agregación deberían ser similares a los siguientes, en los que recibes las claves de discretización, unnoised_metric (resumen de las claves de discretización sin ruido) y el ruido que se agrega a unnoised_metric.
{
"bucket": "\u0005Y",
"unnoised_metric": 128,
"noise": -17948,
"annotations": [
"in_reports",
"in_domain"
]
}
Las anotaciones también contendrán in_reports o in_domain, lo que significa lo siguiente:
in_reports: La clave del bucket está disponible en los informes agregables.in_domain: La clave del bucket está disponible dentro del archivo AVROoutput_domain.