Consent Actions
Metodi per scrivere il consenso (programmaticamente, oppure come reazione a UI custom esterne al banner).
| Method | Tier | Since |
|---|---|---|
acceptAll(options?) | 1 | 3.0 |
rejectAll(options?) | 1 | 3.0 |
updateConsent(patches) | 1 | 3.0 |
triggerConsent(payload) | 1 | 3.0 |
Per leggere il consenso vedi Consent query. Per cambiare lingua durante una sessione vedi
changeLanguage.
Tutte le chiamate via window.Avacy.* stampano screen: 'api' nel payload audit del core (vedi ConsentScreen sotto). Il banner UI e il CPC restano 'first' / 'second'.
Il
typesalvato può non essere quello chiesto. Dopo ogni scritturaPersonalizedil core confronta le scelte risultanti con quelle che darebberoAcceptAlleRejectAllsugli stessi framework: se coincidono, il consenso viene salvato (ed emesso inavacy:consent-saved) comeAcceptAlloRejectAll.
acceptAll
Zucchero per accettare tutti i purposes e vendors di tutti i framework configurati. Equivalente a triggerConsent({ type: 'AcceptAll', screen: 'api' }).
Accetta opzionalmente except per escludere selettivamente alcuni elementi (utile per casi tipo "accetta tutto tranne questo vendor", senza dover costruire un Personalized da zero).
window.Avacy.acceptAll(options?: { except?: PrivacySelector[] }): Promise<void>
type PrivacySelector =
| `${'tcf' | 'gcm' | 'acm'}:${'purpose' | 'vendor' | 'specialFeature' | 'customPurpose'}:${number}`
| `custom:${'purpose' | 'vendor' | 'specialFeature' | 'customPurpose'}:${string}`;
Parameters
| Name | Type | Description |
|---|---|---|
options.except | PrivacySelector[] (opzionale) | Lista di selettori framework:type:id da escludere dall'accept. Se omesso o vuoto, equivalente a chiamata senza argomenti. L'id è numerico per tcf, gcm e acm, testuale per custom, dove porta il prefisso dell'origine (es. custom:vendor:d116). Selettori malformati vengono ignorati. |
Returns
Promise<void> — risolta quando il consenso è scritto nello store e i framework hanno propagato (TCString aggiornato, __tcfapi ping consentente, Google CMode default→update, etc.).
Examples
<button onclick="window.Avacy.acceptAll()">Accetta tutto</button>
// Accetta tutto tranne TCF vendor 79, GCM purpose 4 (analytics_storage) e il fornitore custom d116:
await window.Avacy.acceptAll({
except: ['tcf:vendor:79', 'gcm:purpose:4', 'custom:vendor:d116'],
});
// Identità: except vuoto = nessuna eccezione
await window.Avacy.acceptAll({ except: [] });
await window.Avacy.acceptAll();
Side effects
- Senza
except(o conexcept: []): emetteavacy:consent-saved { type: 'AcceptAll', timestamp, gcm }. - Con
exceptnon vuoto: la scrittura parte comePersonalized, e di norma esceavacy:consent-saved { type: 'Personalized', … }. Se però le scelte risultanti coincidono con quelle di un AcceptAll (consenso e legittimo interesse, scelta per scelta), il core salvaAcceptAll(vedi la nota in cima).
rejectAll
Speculare a acceptAll. Rifiuta tutti i purposes e vendors di tutti i framework configurati, con opzionale except per consentire selettivamente.
window.Avacy.rejectAll(options?: { except?: PrivacySelector[] }): Promise<void>
Examples
<button onclick="window.Avacy.rejectAll()">Rifiuta tutto</button>
// Rifiuta tutto tranne TCF purpose 1 (cookie tecnici):
await window.Avacy.rejectAll({
except: ['tcf:purpose:1'],
});
Side effects
- Senza
except: emetteavacy:consent-saved { type: 'RejectAll', timestamp, gcm }. - Con
exceptnon vuoto: come peracceptAll, di normatype: 'Personalized', maRejectAllse le scelte risultanti coincidono con quelle di un rifiuto totale.
Comportamento legitimate interest: il default (
objectLegIntOnReject: true) cancella i LI su purposes/vendors quando si rifiuta. Per preservarli vedi config TCF/Custom frameworkobjectLegIntOnReject: false. Lo stesso comportamento si applica agli elementi non inexceptquando si usarejectAll({ except }).
updateConsent
Patch puntuale del consenso corrente: flippa solo i selettori elencati, gli altri restano allo stato corrente. La scrittura parte come Personalized; se il risultato coincide con un accetta/rifiuta tutto, il core la salva come AcceptAll/RejectAll (vedi la nota in cima).
window.Avacy.updateConsent(patches: ConsentPatches): Promise<void>
type ConsentPatches = Partial<Record<PrivacySelector, boolean>>;
Parameters
| Name | Type | Description |
|---|---|---|
patches | Record<PrivacySelector, boolean> | Mappa framework:type:id → next hasConsent. Stessa sintassi del campo except di acceptAll / rejectAll. Selettori malformati vengono droppati silenziosamente. Patch vuota è un no-op (nessun consent write dispatcato). |
Examples
// Toggle puntuale di 1-2 selettori senza modificare il resto del consenso corrente.
await window.Avacy.updateConsent({
'tcf:vendor:32': true,
'tcf:purpose:1': false,
});
// Caso d'uso: UI custom con switch per singolo vendor.
toggleEl.addEventListener('change', (e) => {
window.Avacy.updateConsent({
[`tcf:vendor:${vendorId}`]: e.target.checked,
});
});
// Patch vuota = no-op (nessun consent write, nessun avacy:consent-saved).
await window.Avacy.updateConsent({});
Side effects
Emette avacy:consent-saved { type, timestamp, gcm } quando almeno un selettore sintatticamente valido è presente nei patches. type è 'Personalized', oppure 'AcceptAll'/'RejectAll' se dopo la patch le scelte coincidono con quelle di un accetta/rifiuta tutto.
Garanzia di preservazione: il payload viene costruito a partire da
consent.choicescorrente. Per i framework che ricostruiscono le choices a partire dal templatecustomization.privacySettings(es. TCF), i selettori che non sono nel template potrebbero non essere preservati a runtime — è un comportamento del core TCF adapter, tracciato fuori da questa preview. Per i casi di test l'asserzione minimale è "il selettore patchato è applicato + consent.type passa a Personalized".
See also
acceptAll({ except })/rejectAll({ except })— sugar per "tutto sì/no tranne X"triggerConsent— passaggio raw del payload completo
triggerConsent
API raw per scrivere un payload di consenso arbitrario (AcceptAll, RejectAll, Personalized). Il tipo CloseBanner esiste nel payload ma non scrive nessun consenso: vedi sotto.
window.Avacy.triggerConsent(payload: OnConsentPayload): Promise<void>
Parameters
| Name | Type | Description |
|---|---|---|
payload | OnConsentPayload | Payload tipizzato. Forma dipende dal type (AcceptAll, RejectAll, Personalized, CloseBanner). screen può mancare: se è assente o non è 'first'/'second'/'api', viene registrato 'api'. |
Payload variants
Il type agisce da discriminator. Le shape:
type ConsentScreen = 'first' | 'second' | 'api';
type OnConsentPayload =
| { type: 'AcceptAll'; screen?: ConsentScreen }
| { type: 'RejectAll'; screen?: ConsentScreen }
| { type: 'CloseBanner'; screen?: ConsentScreen }
| { type: 'Personalized'; screen?: ConsentScreen; privacyChoices: PrivacyChoice[] };
Nel tipo TypeScript screen è obbligatorio; a runtime window.Avacy.triggerConsent lo completa con 'api' quando manca o non è valido.
PrivacyChoice — vedi Tier 2. L'id è un numero per tcf, gcm e acm e una stringa per i fornitori custom (es. 'd116').
Example: AcceptAll
await window.Avacy.triggerConsent({ type: 'AcceptAll', screen: 'api' });
Example: Personalized
await window.Avacy.triggerConsent({
type: 'Personalized',
screen: 'api',
privacyChoices: [
{ framework: 'tcf', type: 'purpose', id: 1, hasConsent: true, hasLegitimateInterest: false },
{ framework: 'tcf', type: 'purpose', id: 2, hasConsent: false, hasLegitimateInterest: true },
{ framework: 'tcf', type: 'vendor', id: 755, hasConsent: true, hasLegitimateInterest: false },
],
});
CloseBanner: nessun consenso scritto
await window.Avacy.triggerConsent({ type: 'CloseBanner', screen: 'api' });
// → nessuna scrittura nello store, nessun avacy:consent-saved, il banner resta
Il listener del consenso del core esce subito su CloseBanner, senza salvare niente: non equivale a RejectAll. Il payload arriva solo agli add-on. Il bottone "Continua senza accettare" del banner non usa CloseBanner: salva un RejectAll.
Side effects
Per AcceptAll, RejectAll e Personalized emette avacy:consent-saved { type, timestamp, gcm }. type è quello salvato, che per un Personalized può diventare AcceptAll o RejectAll (vedi la nota in cima). CloseBanner non emette nulla.
ConsentScreen
Audit field stampato su ogni consent write, drive consentScreen nel TCString:
| Valore | Significato | TCString consentScreen |
|---|---|---|
'first' | Banner UI / first layer | 1 |
'second' | Preference Center / second layer | 2 |
'api' | Programmatic via window.Avacy.* | 2 (una scrittura via API è un cambio di preferenze) |
Il campo ConsentScreen del TC String è un intero a 6 bit, non una stringa. Ogni
consenso che il CMP scrive registra 1 o 2.
Banner e CPC components passano direttamente 'first' / 'second' al core. acceptAll, rejectAll e updateConsent stampano sempre 'api'; triggerConsent usa lo screen del payload se è uno dei tre valori, altrimenti 'api'.
See also
acceptAll,rejectAll,updateConsent— sugar per i casi più comuniOnConsentPayload— shape completa dei payloadPrivacyChoice— elemento dell'arrayprivacyChoicesinPersonalized