Stiamo disattivando l'API On-Premises. Consulta il nostro documento Disattivazione API On-Premises per i dettagli e per scoprire come eseguire la migrazione alla nostra API Cloud di nuova generazione.
We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
/v1/messages
Usa il nodo messages
per inviare messaggi di testo, con contenuto multimediale, contatti o luoghi, interattivi e modelli di messaggi ai tuoi clienti.
Consulta le seguenti guide per informazioni relative ai tipi di messaggi che puoi inviare: messaggi di testo, messaggi multimediali, messaggi con contatti e luoghi, messaggi interattivi, modelli di messaggi, modelli di messaggi con contenuto multimediale e modelli di messaggi interattivi.
Devi:
A partire dalla versione 2.39 e successive, non devi chiamare il nodo contacts prima dell'invio di un messaggio.
Per inviare i messaggi devi effettuare una chiamata POST
al nodo /messages
indipendentemente dal tipo di messaggio. Il contenuto del corpo del messaggio JSON cambia per ogni tipo di messaggio (testo, immagine, ecc.).
Questi sono i parametri principali utilizzati nelle richieste POST /messages
:
Nome | Descrizione (clicca sulla freccia nella colonna di sinistra per le opzioni supportate). |
---|---|
| Obbligatorio quando Un oggetto |
| Facoltativo. Una stringa arbitraria, utile per il monitoraggio. Per esempio, puoi passare l'ID del modello di messaggio in questo campo per monitorare il percorso del cliente a partire dal primo messaggio che invii. Puoi poi monitorare il ROI di diversi tipi di modelli di messaggi per determinare il più efficace. Qualsiasi app iscritta al campo del webhook L'API Cloud non elabora questo campo, lo restituisce semplicemente come parte dei webhook di messaggio inviato/recapitato/letto. Massimo 512 caratteri. Solo API Cloud. |
| Obbligatorio quando Un oggetto |
| Obbligatorio se si risponde a qualsiasi messaggio nella conversazione. Un oggetto contenente l'ID di un messaggio precedente a cui si sta rispondendo. Ad esempio:
Solo API Cloud. |
| Obbligatorio quando Un oggetto |
| Contiene un oggetto Solo API On-Premises. |
| Obbligatorio quando Un oggetto |
| Obbligatorio quando Un oggetto |
| Obbligatorio quando Un oggetto |
| Obbligatorio Servizio di messaggistica utilizzato per la richiesta. Utilizza Solo API Cloud. |
| Obbligatorio se Consente anteprime URL nei messaggi di testo - Consulta Invio di URL nei messaggi di testo. Questo campo è facoltativo se non includi un URL nel tuo messaggio. Valori: Solo API On-Premises. Gli utenti dell'API Cloud possono utilizzare la stessa funzionalità con il campo |
| Facoltativo. Attualmente, puoi solo inviare messaggi a persone singole. Impostalo come Predefinito: |
| Stato del messaggio. Puoi usare questo campo per contrassegnare un messaggio come
|
| Obbligatorio quando Un oggetto API Cloud: sono supportati adesivi animati e statici di terze parti in uscita e tutti i tipi di adesivi in entrata. Un adesivo statico deve essere di 512x512 pixel e non può superare 100 KB. Un adesivo animato deve essere di 512x512 pixel e non può superare 500 KB. API On-Premises: sono supportati solo adesivi statici di terze parti in uscita e tutti i tipi di adesivi in entrata. Un adesivo statico deve essere di 512x512 pixel e non può superare 100 KB. Gli adesivi animati non sono supportati. |
| Obbligatorio quando Un oggetto |
| Obbligatorio per i messaggi di testo. Un oggetto |
| Obbligatorio. ID di WhatsApp o numero di telefono del cliente a cui si desidera inviare un messaggio. Consulta Formati dei numero di telefono. Se necessario, gli utenti dell'API On-Premises possono ottenere questo numero chiamando l'endpoint |
| Facoltativo. Il tipo di messaggio che desideri inviare. Se omesso, il valore predefinito è |
Nome | Descrizione |
---|---|
| Obbligatorio. Contiene il testo del messaggio, che può includere URL e formattazione. |
Per l'API On-Premises, l'ID dell'oggetto media viene restituito quando il contenuto multimediale viene caricato correttamente nel client on-premises/reference di WhatsApp Business tramite l'endpoint media
.
Name | Description |
---|---|
| Required when The media object ID. Do not use this field when message |
| Required when The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs. Do not use this field when message Cloud API users only:
|
| Optional. Media asset caption. Do not use with On-Premises API users:
|
| Optional. Describes the filename for the specific document. Use only with The extension of the filename will specify what format the document is displayed as in WhatsApp. |
| Optional. On-Premises API only. This path is optionally used with a |
In contacts
, puoi nidificare i seguenti oggetti: addresses
, emails
, name
, org
, phone
e urls
. Gli oggetti pluralizzati devono essere nidificati in un array come mostrato nell'esempio seguente.
Name | Description |
---|---|
| Optional. Full contact address(es) formatted as an
|
| Optional.
|
| Optional. Contact email address(es) formatted as an
|
| Required. Full contact name formatted as a
*At least one of the optional parameters needs to be included along with the |
| Optional. Contact organization information formatted as an
|
| Optional. Contact phone number(s) formatted as a
|
| Optional. Contact URL(s) formatted as a
|
Esempio di un oggetto contacts
con oggetti pluralizzati nidificati al suo interno:
"contacts": [ { "addresses": [ { "city": "city name", "country": "country name", "country_code": "code", "state": "Contact's State", "street": "Contact's Street", "type": "Contact's Address Type", "zip": "Contact's Zip Code" } ], "birthday": "birthday", "emails": [ { "email": "email", "type": "HOME" }, { "email": "email", "type": "WORK" } ], "name": { "first_name": "first name value", "formatted_name": "formatted name value", "last_name": "last name value", "suffix": "suffix value" }, "org": { "company": "company name", "department": "dep name", "title": "title" }, "phones": [ { "phone": "Phone number", "wa-id": "WA-ID value", "type": "MAIN" }, { "phone": "Phone number", "type": "HOME" }, { "phone": "Phone number", "type": "WORK" } ], "urls": [{ "url": "some url", "type": "WORK" }] } ]
Name | Description |
---|---|
| Required. Location latitude in decimal degrees. |
| Required. Location longitude in decimal degrees. |
| Required. Name of the location. |
| Required. Address of the location. |
In template
, puoi nidificare gli oggetti components
e language
.
A partire dalla v2.27.8
, l'elemento namespace
di un modello deve essere lo spazio dei nomi associato all'account WhatsApp Business che possiede il numero di telefono nell'attuale client on-premises di WhatsApp Business. In caso contrario, il messaggio non verrà inviato.
In aggiunta, dalla v2.41
in poi l'elemento namespace
sarà un campo facoltativo.
Nome | Descrizione |
---|---|
| Obbligatorio. Spazio dei nomi del modello. A partire dalla |
| Obbligatorio. Nome del modello. |
| Obbligatorio. Specifica la lingua in cui il modello può essere visualizzato. Con i modelli di messaggio con contenuti multimediali funziona solo il criterio di lingua |
| Facoltativo. Array contenente i parametri del messaggio. |
In components
, puoi nidificare l'oggetto parameters
. Inoltre, puoi impostare type
su button
.
Nome | Descrizione |
---|---|
| Obbligatorio. Descrive il tipo di |
| Facoltativo. Array contenente il contenuto del messaggio. |
Nome | Descrizione |
---|---|
| Obbligatorio. Descrive il tipo I tipi di contenuto multimediale ( Per maggiori informazioni su |
Nell'oggetto components
, puoi impostare type
su button
. Questi sono i parametri del tipo button:
Nome | Descrizione |
---|---|
| Obbligatorio. Tipo di pulsante in fase di creazione. |
| Obbligatorio. Indice della posizione del pulsante. Puoi avere fino a 3 pulsanti usando i valori di indice di |
| Obbligatorio. I parametri per il pulsante, che sono impostati al momento della creazione nel Business Manager. Includi i seguenti parametri:
|
Esempio di tipo button
con sottotipo quick_reply
:
{ "type": "button", "sub_type": "quick_reply", "index": 0, "parameters": [{ "type": "payload", "payload": "Yes-Button-Payload" }] }
Esempio di tipo button
con sottotipo copy_code
:
{ "type": "button", "sub_type": "copy_code", "index": 0, "parameters": [{ "type": "coupon_code", "coupon_code": "DISCOUNT20" }] }
L'oggetto hsm
è stato dichiarato obsoleto con on-premises/reference di WhatsApp Business v2.39
. Al suo posto usa l'oggetto template
.
Nome | Descrizione |
---|---|
| Obbligatorio. Lo spazio dei nomi che verrà utilizzato. A partire dalla |
| Obbligatorio. Il nome dell'elemento che indica il modello da utilizzare nello spazio dei nomi. A partire dalla |
| Obbligatorio. Consente di specificare un criterio di lingua deterministico. Consulta la sezione relativa alla lingua per maggiori informazioni. Questo campo aveva un'opzione |
| Obbligatorio. Questo campo è un array di valori da applicare alle variabili nel modello. Consulta la sezione Parametri localizzabili per maggiori informazioni. |
The interactive
object generally contains 4 main components: header
, body
, footer
, and action
. Additionally, some of those components can contain one or more different objects:
header
, you can nest media
objects.action
, you can nest section
and button
objects.Name | Description |
---|---|
| Required. The type of interactive message you want to send. Supported values:
|
| Required for type Header content displayed on top of a message. You cannot set a The
|
| Optional for type An object with the body of the message. The
|
| Optional. An object with the footer of the message. The
|
| Required. An |
Name | Description |
---|---|
| Required for List Messages. Button content. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters. |
| Required for Reply Button Messages. A
Non ci possono essere spazi iniziali o finali quando si imposta l'ID. |
| Required for List Messages and Multi-Product Messages. Array of |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the Facebook catalog linked to your WhatsApp Business Account. This ID can be retrieved via Commerce Manager. |
| Required for Single-Product Messages and Multi-Product Messages. Unique identifier of the product in a catalog. Maximum 100 characters for both Single-Product and Multi-Product messages. To get this ID, go to Commerce Manager, select your Facebook Business account, and you will see a list of shops connected to your account. Click the shop you want to use. On the left-side panel, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name. |
| Optional for Flows Messages. The current mode of the Flow, either Default: |
| Required for Flows Messages. Must be |
| Required for Flows Messages. A token that is generated by the business to serve as an identifier. |
| Required for Flows Messages. Unique identifier of the Flow provided by WhatsApp. |
| Required for Flows Messages. Text on the CTA button, eg. "Signup". Maximum length: 20 characters (no emoji). |
| Optional for Flows Messages.
Default: |
| Optional for Flows Messages. Required only if
|
Name | Description |
---|---|
| Required if the message has more than one Title of the section. Maximum length: 24 characters. |
| Required for List Messages. Contains a list of row objects. Limited to 10 rows across all sections. Each
|
| Required for Multi-Product Messages. Array of Each
|
Messaggi audio:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "audio", "audio": { "id": "your-media-id", } }
Messaggi con documento che utilizzano filename
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "id": "your-media-id", "filename": "your-document-filename" } }
Messaggi con documento che utilizzano link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "document", "document": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } }
Videomessaggi che utilizzano link
:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "video", "video": { "link": "http(s)://the-url" "provider": { "name" : "provider-name" } } } }
SMS:
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "text", "text": { "body": "your-message-content" } }
Messaggi interattivi (liste):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive":{ "type": "list", "header": { "type": "text", "text": "your-header-content-here" }, "body": { "text": "your-text-message-content-here" }, "footer": { "text": "your-footer-content-here" }, "action": { "button": "cta-button-content-here", "sections":[ { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, { "title":"your-section-title-content-here", "rows": [ { "id":"unique-row-identifier-here", "title": "row-title-content-here", "description": "row-description-content-here", } ] }, ... ] } } }
Messaggi interattivi (pulsanti di risposta):
POST /v1/messages { "recipient_type": "individual", "to": "whatsapp-id", "type": "interactive", "interactive": { "type": "button", "header": { # optional "type": "text" | "image" | "video" | "document", "text": "your text" # OR "document": { "id": "your-media-id", "filename": "some-file-name" } # OR "document": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name", }, "filename": "some-file-name" }, # OR "video": { "id": "your-media-id" } # OR "video": { "link": "the-provider-name/protocol://the-url", "provider": { "name": "provider-name" } } # OR "image": { "id": "your-media-id" } # OR "image": { "link": "http(s)://the-url", "provider": { "name": "provider-name" } } }, # end header "body": { "text": "your-text-body-content" }, "footer": { # optional "text": "your-text-footer-content" }, "action": { "buttons": [ { "type": "reply", "reply": { "id": "unique-postback-id", "title": "First Button’s Title" } }, { "type": "reply", "reply": { "id": "unique-postback-id", "title": "Second Button’s Title" } } ] } # end action } # end interactive }
Messaggi interattivi (messaggi con un singolo prodotto e più prodotti):
{ "recipient_type": "individual", "to" : "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "product", "body": { "text": "body text" }, "footer": { "text": "footer text" }, "action": { " _id": "catalog-ID", "product_retailer_id": "product-ID" } } }
Messaggi interattivi (messaggi con più prodotti):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "product_list", "Header":{ "type": "text", "text": "text-header-content" }, "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "catalog_id":"catalog-id", "sections": [ { "title": "section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" }, { "product_retailer_id": "product-SKU-in-catalog" }, ... ]}, { "title": "the-section-title", "product_items": [ { "product_retailer_id": "product-SKU-in-catalog" } ... ]}, ... ] }, } }
Messaggi interattivi (messaggi con catalogo):
{ "recipient_type": "individual", "to" : "whatsapp-id", "type": "interactive", "interactive": { "type": "catalog_message", "body":{ "text": "text-body-content" }, "footer":{ "text":"text-footer-content" }, "action":{ "name": "catalog_message", "parameters":{ "thumbnail_product_retailer_id": "product-SKU-in-catalog" } }, } }
Messaggi interattivi (flussi):
{ "recipient_type": "individual", "to": "{{Recipient-WA-ID}}", "type": "interactive", "interactive": { "type": "flow", "header": { "type": "text", "text": "Flow message header" }, "body": { "text": "Flow message body" }, "footer": { "text": "Flow message footer" }, "action": { "name": "flow", "parameters": { "flow_message_version": "3", "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s", "flow_id": "<FLOW_ID>", "flow_cta": "Book!", "flow_action": "navigate", "flow_action_payload": { "screen": "<SCREEN_ID>", "data": { # optional "user_name": "name", "user_age": 25 } } } } } }
Di seguito è riportato un esempio di payload
in una risposta; gli oggetti meta ed error sono omessi per brevità.
{ "messages": [{ "id": "message-id" }] }
Se la richiesta viene eseguita correttamente, riceverai una risposta con un ID del messaggio. Se la richiesta restituisce una sezione errors
, controlla il messaggio di origine e correggi gli errori prima di reinviare la richiesta. Per maggiori informazioni sugli errori, consulta Codici di errore del client on-premises/reference di WhatsApp Business e Codici di stato HTTP.
Si applica alle aziende in Brasile, Colombia e Singapore, a partire dal 12 settembre 2023. Si applica a tutte le aziende a partire dal 12 ottobre 2023.
Se la richiesta è sospesa per la valutazione della qualità, la risposta conterrà una proprietà message_status
con un messaggio indicante che il messaggio non è stato inviato immediatamente e che verrà inviato o annullato dopo la convalida della qualità. Questa proprietà esisterà solo in caso di sospensione del messaggio.
{ "messages": [{ "id": "message-id", "message_status": "Message has been held because quality assessment is pending", }] }
WhatsApp consente alcune funzioni di formattazione nei messaggi. Per formattare tutto un messaggio o parte di esso, utilizza questi simboli di formattazione:
Formattazione | Simbolo | Esempio |
---|---|---|
Grassetto | Asterisco (*) | Il tuo totale è *$ 10,50*. |
Corsivo | Trattino basso (_) | Ti diamo il benvenuto su _WhatsApp_! |
Tilde (~) | Questo è ~meglio~ del meglio! | |
| Tre apici inversi (```) | ```print 'Hello World';``` |
In questo contesto, le prestazioni rappresentano il numero di messaggi che possono essere inviati ogni secondo mediante il client on-premises/reference di WhatsApp Business. Le massime prestazioni ottenibili dipendono da una serie di fattori; tra questi, il più importante è la configurazione del client scelta e se il messaggio viene inviato a un nuovo utente o un utente esistente; la configurazione delle sessioni di crittografia richiede infatti più tempo quando si invia un messaggio a un nuovo utente.
Configurazione del client | Messaggi supportati al secondo |
---|---|
Shard singolo | 70 |
Shard multipli (32 shard) | 250 |
Nota: non inviare più volte lo stesso messaggio allo stesso destinatario utilizzando l'API WhatsApp Business.
I motivi per cui le percentuali di consegna non sono del 100% possono essere molteplici. Alcuni casi comuni includono utenti con accesso sporadico alla rete o inattivi per un certo periodo di tempo, oppure uno stimolo a creare un' esperienza utente di più alta qualità.
I messaggi che possono essere consegnati con WhatsApp avranno una percentuale di consegna molto elevata. Tuttavia, ci sono molte ragioni per cui un messaggio potrebbe non essere recapitato. Avrai accesso allo stato esatto di un messaggio monitorando le tue callback. Questo non vale nel caso di invio di messaggi con SMS, ad esempio, dove non hai accesso allo stato finale consegnato e reinviare il messaggio potrebbe in effetti produrre un risultato diverso.
I messaggi potrebbero non essere recapitati perché il telefono di un utente è fuori servizio, scarico oppure è stato smarrito e, in attesa di prenderne uno nuovo, ha disabilitato la scheda SIM. È possibile che ci siano errori nella capacità del client aziendale di connettersi alla rete. È anche possibile che le callback (webhook) non vengano consegnate. Puoi monitorare queste situazioni utilizzando il nodo health
. Puoi attivare le callback di ricezione del server per avere conferma che il messaggio sia arrivato nel cloud del server WhatsApp.
Se e quando un utente si riconnette alla rete, tutti i messaggi inviati verranno recapitati. La ricezione di più messaggi con lo stesso contenuto non sarebbe apprezzato dall'utente. Potrebbe bloccarti o inviare un reclamo. Avrai maggiori probabilità di essere bannato.
Se invii un messaggio e ricevi un ID messaggio dall'API, hai fatto tutto il necessario per l'invio. Non inviare di nuovo lo stesso contenuto allo stesso destinatario.
Se riscontri basse percentuali di consegna per un periodo di tempo prolungato, invia un ticket di supporto all' Assistenza diretta.
Quando si invia un messaggio, non appena si ottiene un ID messaggio la richiesta del messaggio è stata memorizzata nel database. Il client API WhatsApp Business continuerà a tentare di inviare il messaggio fino a quando non verrà confermato dal server WhatsApp. Questo processo non ha una linea temporale stabilita. Il server WhatsApp tenterà quindi di consegnare il messaggio al telefono dell'utente. Se il telefono dell'utente non è online, il messaggio verrà archiviato per 30 giorni prima di essere eliminato dal server WhatsApp.
Sì. WhatsApp ti consente di formattare testo selezionato all'interno dei messaggi con grassetto, corsivo, barrato o spazio fisso.
Al momento, non è possibile vedere quanti o quali utenti hanno bloccato la tua azienda. L'indicatore migliore sarebbe mettersi in ascolto dei callback di stato e, se non ricevi lo stato delivered
, allora l'utente ha bloccato la tua azienda o non ha una connessione di rete. Consulta la documentazione sui Webhooks per maggiori dettagli.
Se un utente ha bloccato la tua azienda, l'API Contacts continuerà a restituire il numero di telefono come utente WhatsApp valido. Tuttavia, quando invii il messaggio, questo non verrà mai recapitato. Se si tratta di un messaggio a pagamento, non ti verrà addebitato alcun importo.
No, non è garantito che l'ordine in cui arrivano i messaggi sia lo stesso in cui sono stati inviati. Se l'ordine è fondamentale per il tuo caso d'uso, l'approccio suggerito è mettersi in ascolto del callback recapitato del primo messaggio prima di lanciare il secondo messaggio.
Quando utilizzi il nodo messages
, devi impostare l'intestazione Content-Type
su application/json
affinché il client API WhatsApp Business analizzi correttamente il corpo del messaggio. C'è anche l'intestazione Authorization
, che deve essere impostata e deve contenere un token di accesso non scaduto. Consulta la documentazione su accesso e autenticazione per informazioni su come ottenere il token e sulla sua scadenza.
In alcuni casi potrebbe essere necessario più tempo per gestire una richiesta del cliente e si potrebbe essere in grado di fornire una risposta solo dopo 24 ore. È consigliabile creare modelli di messaggio per:
In entrambi i casi, assicurati di fornire il maggior contesto possibile al modello di messaggio. Ad esempio: