We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
I modelli vengono utilizzati durante l'invio dei modelli di messaggi con l'API Cloud, ospitata da Meta, o l'API On-Premises. L'API Cloud controlla i modelli e i parametri delle variabili utilizzando l'apprendimento automatico per proteggere la sicurezza e l'integrità dei servizi dell'API Cloud. Quando l'API Cloud controlla i modelli e il testo delle variabili, nessuna informazione viene condivisa con WhatsApp.
I modelli possono essere creati usando l'API Business Management o WhatsApp Business Manager. Il numero di modelli che un account WhatsApp Business può avere è determinato dall'azienda madre. Se un'azienda madre non è verificata, ciascuno dei suoi account WhatsApp Business è limitato a 250 modelli. Tuttavia, se l'azienda madre è verificata e almeno uno dei suoi account WhatsApp Business dispone di un numero di telefono aziendale con un nome visualizzato approvato, ciascuno dei suoi account WhatsApp Business può avere fino a 6000 modelli.
Ecco cosa ti servirà:
Puoi aggiungere un modello di messaggio in una lingua specifica durante la creazione di un modello. Questi modelli vengono conteggiati ai fini del tuo limite. Sii coerente quando fornisci le traduzioni. Consulta l'articolo del Centro assistenza Perché visualizzo errori di "struttura non disponibile" nella callback? per ulteriori informazioni.
Invia una richiesta POST all'endpoint WhatsApp Business Account > Modelli di messaggi per creare un modello.
POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates
{ "name": "<NAME>", "category": "<CATEGORY>", "allow_category_change": <ALLOW_CATEGORY_CHANGE>, "language": "<LANGUAGE>", "components": [<COMPONENTS>] }
Segnaposto | Descrizione | Valore di esempio |
---|---|---|
Stringa | Obbligatorio. Nome del modello. Massimo 512 caratteri. |
|
Enum | Obbligatorio. Categoria del modello. Consulta Categorie dei modelli di seguito. |
|
Booleano | Facoltativo. Impostato su true per consentirci di assegnare automaticamente una categoria. Se omesso, il modello potrebbe essere rifiutato a causa di categoria errata. |
|
Enum | Obbligatorio. Codice della lingua e della relativa variante del modello. |
|
Stringa | Facoltativo. Il nome esatto del modello di libreria dei modelli di utility. Scopri come creare modelli usando la Libreria dei modelli di utility |
|
Array di oggetti | Obbligatorio. Componenti del modello. Consulta Componenti dei modelli di seguito. | Consulta Componenti dei modelli di seguito. |
Segnaposto | Descrizione | Valore di esempio |
---|---|---|
Oggetto JSON | Facoltativo. Dati facoltativi durante la creazione di un modello dalla Libreria di modelli. Questi sono campi facoltativi per il componente button. Nota: per i modelli di utility contenenti pulsanti, questa proprietà non è opzionale. |
|
enum | Il tipo di pulsante QUICK_REPLY, URL, PHONE_NUMBER, OTP, MPM, CATALOG, FLOW, VOICE_CALL, APP Obbligatorio |
|
Stringa | Numero di telefono per il pulsante. Facoltativo |
|
Oggetto JSON | Visualizza i parametri URL dell'oggetto JSON Facoltativo | |
booleano | Se le condizioni zero tocchi sono state accettate dall'utente o meno. Facoltativo |
|
enum | Il tipo OTP. COPY_CODE, ONE_TAP, ZERO_TAP Facoltativo |
|
Array di oggetto JSON | Visualizza i parametri dell'app supportati dell'oggetto JSON Facoltativo |
Segnaposto | Descrizione | Valore di esempio |
---|---|---|
Oggetto JSON | Facoltativo. Dati facoltativi durante la creazione di un modello dalla Libreria di modelli. Questi sono campi facoltativi per il componente button. | |
booleano | Valore booleano per aggiungere informazioni al modello su come contattare l'azienda sul proprio numero di telefono. Facoltativo |
|
booleano | Valore booleano per aggiungere informazioni al modello su come acquisire maggiori informazioni con un link URL. Non disponibile ovunque e verrà ignorato se non disponibile. Facoltativo |
|
booleano | Valore booleano per aggiungere informazioni al modello in merito al non condividere i codici di autenticazione con nessuno. Facoltativo |
|
booleano | Valore booleano per aggiungere informazioni al modello per monitorare le spedizioni. Non disponibile ovunque e verrà ignorato se non disponibile. Facoltativo |
|
int64 | Valore intero per aggiungere informazioni al modello in merito alla scadenza del codice. Facoltativo |
|
I modelli devono essere categorizzati usando una delle seguenti categorie: Le categorie sono un fattore tenuto in considerazione per i prezzi e la categoria che designi sarà validata al momento della creazione del modello.
AUTHENTICATION
MARKETING
UTILITY
Consulta il nostro documento Categorizzazione dei modelli per determinare quale categoria usare quando crei modelli.
I modelli sono composti da vari componenti di testo, multimediali e interattivi, in base alle esigenze dell'azienda. Consulta il documento Componenti dei modelli per una lista di tutti i componenti possibili e dei rispettivi requisiti, oltre agli esempi e alle query di esempio.
Durante la creazione di un modello, definisci i suoi componenti assegnando un array di oggetti component alla proprietà components nel corpo della richiesta.
Ad esempio, qui è riportato un array contenente un componente text body con due variabili e valori di esempio, un componente phone number button e un componente URL button:
[ { "type": "BODY", "text": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!", "example": { "body_text": [ [ "Pablo","860198-230332" ] ] } }, { "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }, { "type": "URL", "text": "Contact Support", "url": "https://www.luckyshrub.com/support" } ] } ]
Fai riferimento al documento Componenti dei modelli per una lista di tutti i componenti possibili e dei rispettivi requisiti, oltre agli esempi e alle query di esempio.
I modelli categorizzati come AUTHENTICATION
dispongono di requisiti unici per i componenti. Consulta Modelli di autenticazione.
Quando invii una richiesta di creazione di un modello, ne convalidiamo immediatamente la categoria usando le nostre linee guida di categorizzazione dei modelli.
status
su PENDING
. Quindi il modello viene sottoposto alla procedura di controllo.status
su REJECTED
e attiviamo un webhook di aggiornamento dello stato del modello di messaggio con reason
impostato su INCORRECT_CATEGORY
. Ti consigliamo di metterti in ascolto per questo webhook per identificare i modelli rifiutati oppure di richiedere il campo rejected_reason
sui modelli appena creati, che avrà il valore TAG_CONTENT_MISMATCH
.In entrambi i casi, lo stato iniziale del modello viene restituito come parte della risposta API.
Se lo stato del tuo modello è stato impostato su REJECTED
come parte della validazione della categoria, hai diverse opzioni:
Puoi includere la proprietà allow_category_change
nella tua richiesta affinché venga assegnata automaticamente una categoria in base ai contenuti del tuo modello e alle nostre linee guida di categorizzazione dei modelli. Questo può impedire che lo stato del modello venga immediatamente impostato su REJECTED
a causa di una categoria errata.
La categorizzazione automatica è possibile solo quando si crea un modello.
I modelli con stato PENDING
vengono sottoposti alla procedura di controllo. Controlliamo i contenuti di ogni modello appena creato o modificato per assicurarci che rispettino le nostre linee guida e normative sui contenuti. In base all'esito del controllo, cambiamo automaticamente lo stato su APPROVED
o REJECTED
, attivando un webhook di aggiornamento dello stato del modello di messaggio.
In base all'esito della convalida della categoria e del controllo del modello, impostiamo o modifichiamo lo status
del tuo modello in uno dei seguenti valori:
APPROVED
: il modello ha superato il controllo ed è stato approvato e ora può essere inviato nei messaggi con modelli.PENDING
: il modello ha superato la convalida della categoria ed è in fase di controllo.REJECTED
: il modello non ha superato la convalida della categoria o il controllo del modello. Puoi richiedere il campo rejected_reason sul modello per sapere il motivo.Con il riferimento all'endpoint Modello di messaggio WhatsApp per tutti i campi e gli stati possibili.
In caso di azione eseguita correttamente, l'API risponde con ID, stato e categoria del modello appena creato. Ci sono tre esiti possibili:
status
è PENDING
).status
è REJECTED
)status
è APPROVED
). Questo è possibile solo per modelli di autenticazione con pulsanti con password monouso.{ "id": "<ID>", "status": "<STATUS>", "category": "<CATEGORY>" }
Segnaposto | Descrizione | Valore di esempio |
---|---|---|
| ID modello. |
|
|
| |
| La categoria del modello che hai indicato o che abbiamo assegnato. |
|
Ecco un esempio di richiesta per la creazione di un modello di promozione stagionale composto dai seguenti componenti:
Per ulteriori esempi, consulta Esempi di richieste.
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates' \
-H 'Authorization: Bearer EAAJB...' \
-H 'Content-Type: application/json' \
-d '
{
"name": "seasonal_promotion",
"language": "en_US",
"category": "MARKETING",
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Summer Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of August","25OFF","25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from Promos"
},
{
"type":"QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
{ "id": "572279198452421", "status": "PENDING", "category": "MARKETING" }
Utilizza l'API Cloud o l'API On-Premises per inviare un modello in un modello di messaggio.
Qualora non riuscissimo a consegnare un messaggio a un utente WhatsApp, continueremo a tentare la consegna per un periodo di tempo noto come TTL (Time-To-Live) o periodo di validità dei messaggi.
Puoi personalizzare il TTL predefinito dei modelli di autenticazione, utility e marketing.
Ti invitiamo a impostare un TTL per tutti i tuoi modelli di autenticazione preferibilmente uguale o inferiore al tempo di scadenza del codice, per assicurarti che i tuoi clienti ricevano un messaggio solo quando un codice è ancora utilizzabile.
Autenticazione | Utility | Marketing | |
---|---|---|---|
TTL predefinito | 10 minuti | 30 giorni | 30 giorni |
Compatibilità | API Cloud + API On-Premise | Solo API Cloud | API Lite per messaggi di marketing (MM) |
Intervallo personalizzabile | Da 30 secondi a 15 minuti | Da 30 secondi a 12 ore | Da 12 ore a 30 giorni |
I modelli di autenticazione creati prima del 23 ottobre 2024 hanno un TTL predefinito di 30 giorni.
Per impostare un TTL personalizzato per un modello di autenticazione, utility o marketing includi e imposta il valore della proprietà message_send_ttl_seconds
nella chiamata POST /<PHONE_NUMBER_ID>/messages
.
Il TTL può essere personalizzato con incrementi di 1 secondo.
message_send_ttl_seconds
validi30
a 900
secondi (da 30 secondi a 15 minuti) 30
a 43200
secondi (da 30 secondi a 12 ore)43200
a 2592000
(da 12 ore a 30 giorni)Per i modelli di autenticazione e utility, puoi impostare il valore della proprietà message_send_ttl_seconds
a -1
, che imposterà un TTL personalizzato di 30 giorni.
I messaggi che non vengono consegnati entro il TTL predefinito o personalizzato vengono annullati.
Se non ricevi un webhook di messaggio consegnato prima del superamento del TTL, puoi desumere che la consegna del messaggio sia stata annullata.
Se invii un messaggio che non si riesce a consegnare, potrebbe verificarsi un lieve ritardo prima della ricezione del webhook, quindi è consigliabile prevedere un breve tempo di attesa prima di dedurre che la consegna del messaggio sia stata annullata.
Ti consigliamo di aggiungere un pulsante di risposta rapida ai modelli classificati come MARKETING
che semplifichi per i clienti la disattivazione dei messaggi di marketing. Così facendo, dai ai clienti la possibilità di rifiutare esplicitamente il consenso alla ricezione di messaggi di marketing senza dover bloccare la tua azienda. In questo modo, potresti ampliare più rapidamente il volume dei messaggi. Consulta questo articolo per maggiori informazioni sui benefici dell'aggiunta di un pulsante di disattivazione ai modelli di marketing.
La tua azienda deve seguire i passaggi necessari per interrompere l'invio di messaggi di marketing ai clienti che hanno rifiutato esplicitamente di fornire il consenso alla ricezione. La mancata esecuzione di tali passaggi avrà un impatto negativo sulle percentuali di contatti bloccati e sul punteggio sulla qualità.
Invia una richiesta GET all'endpoint WhatsApp Business Account > Message Templates per ottenere una lista dei modelli di proprietà di un account WhatsApp Business.
GET /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?fields=<FIELDS> &limit=<LIMIT>
Segnaposto | Descrizione | Valore di esempio |
---|---|---|
Lista separata da virgole | Facoltativo. Lista di campi del modello che desideri vengano restituiti. |
|
Numero intero | Facoltativo. Il numero massimo di modelli che desideri vengano restituiti in ogni pagina di risultati. |
|
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates?fields=name,status&limit=3' \
-H 'Authorization: Bearer EAAJB...'
{
"data": [
{
"name": "seasonal_promotion_text_only",
"status": "APPROVED",
"id": "564750795574598"
},
{
"name": "seasonal_promotion_video",
"status": "PENDING",
"id": "1252715608684590"
},
{
"name": "seasonal_promotion_image_header",
"status": "PENDING",
"id": "1372429296936443"
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MgZDZD"
},
"next": "https://graph.facebook.com/v21.0
/102290129340398/message_templates?fields=name%2Cstatus&limit=3&after=MgZDZD"
}
}
Puoi restituire solo i modelli con valori del campo specifici includendo il campo e il valore desiderato nella richiesta. Ad esempio, includi status=REJECTED
per ottenere solo i modelli che sono stati rifiutati.
curl 'https://graph.facebook.com/v21.0
/104996122399160/message_templates?fields=name,status&status=REJECTED' \
-H 'Authorization: Bearer EAAJB...'
{ "data": [ { "name": "seasonal_promotion_text_only_v4", "status": "REJECTED", "id": "564750795574598" }, { "name": "discount_qualifier", "status": "REJECTED", "id": "163917509772674" }, { "name": "limited_time_offer_tuscan_getaway_2023", "status": "REJECTED", "id": "202389039167147" }, { "name": "2023_mar_promo_2", "status": "REJECTED", "id": "1116034925734553" }, { "name": "2023_mar_promo", "status": "REJECTED", "id": "952600926095321" } ] }
Lo spazio dei nomi di un modello di messaggio è necessario per inviare messaggi con quel modello.
Per ottenere lo spazio dei nomi di un modello, invia una richiesta GET
all'endpoint /{whatsapp-business-account-ID}
e includi il campo message_template_namespace
.
curl -i -X GET "https://graph.facebook.com/v21.0
/{whatsapp-business-account-ID}
?fields=message_template_namespace
&access_token={system-user-access-token}"
In caso di azione eseguita correttamente, viene restituito un oggetto JSON con l'ID dell'account WhatsApp Business e lo spazio dei nomi:
{ "id": "1972385232742141", "message_template_namespace": "12abcdefghijk_34lmnop" }
Invia una richiesta POST all'endpoint WhatsApp Message Template per modificare un modello. Puoi anche modificare un modello manualmente utilizzando la scheda WhatsApp Manager > Strumenti per l'account > Modelli di messaggi.
APPROVED
, REJECTED
o PAUSED
.category
o components
di un modello.category
di un modello approvato.POST /<WHATSAPP_MESSAGE_TEMPLATE_ID>
{ "category": "<CATEGORY>", "components": [<COMPONENTS>] }
Segnaposto | Descrizione | Valore di esempio |
---|---|---|
Stringa | Obbligatorio se viene omessa la proprietà components. Categoria del modello. |
|
Array | Obbligatorio se viene omessa la proprietà category. Array di oggetti components del modello. | Consulta Esempio di richiesta (modifica di componenti) di seguito. |
Esempio di richiesta al testo del corpo di un modello che conteneva contenuti di marketing e utility affinché contenga solo quelli di marketing.
curl 'https://graph.facebook.com/v21.0
/564750795574598' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Spring Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of April",
"25OFF",
"25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubcribe from Promos"
},
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
Esempio di richiesta per modificare la categoria del modello da UTILITY
a MARKETING
.
curl 'https://graph.facebook.com/v21.0
/1252715608684590' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"category": "MARKETING"
}'
Esempio di risposta in caso di azione eseguita correttamente.
{ "success": true }
Usa l'endpoint WhatsApp Business Account > Message Templates per eliminare un modello in base al nome o all'ID.
PENDING_DELETION
e cercheremo di consegnare il messaggio per 30 giorni. Trascorso questo periodo riceverai l'errore "Struttura non disponibile" e il cliente non riceverà il messaggio.L'eliminazione di un modello in base al nome elimina tutti i modelli che corrispondono a quel nome, ovvero i modelli con lo stesso nome anche in lingue diverse.
DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?name=<NAME>
curl -X DELETE 'https://graph.facebook.com/v16.0/102290129340398/message_templates?name=order_confirmation' \ -H 'Authorization: Bearer EAAJB...'
{ "success": true }
Per eliminare un modello in base all'ID, includi l'ID del modello insieme al suo nome nella richiesta; solo il modello con l'ID corrispondente sarà eliminato.
DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?hsm_id=<HSM_ID>, &name=<NAME>
curl -X DELETE 'https://graph.facebook.com/v21.0
/102290129340398/message_templates?hsm_id=1407680676729941&name=order_confirmation' \
-H 'Authorization: Bearer EAAJB...'
{ "success": true }