Vous pouvez utiliser l’API pour envoyer les types de messages suivants :
Tous ces types, à l’exception des messages de réaction, peuvent être désignés comme une réponse.
Utilisez le point de terminaison POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages pour envoyer des messages aux personnes utilisant WhatsApp :
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages
Toutes les requêtes d’envoi de messages utilisent le format objet parent générique suivant.
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<TO>", "type": "<TYPE>", /* TEXT MESSAGES ONLY */ "text": {<TEXT>} /* REACTION MESSAGES ONLY */ "reaction": {<REACTION>} /* MEDIA MESSAGES ONLY. FOR EXAMPLE, FOR IMAGE MEDIA: */ "image": {<IMAGE>} /* LOCATION MESSAGES ONLY */ "location": {<LOCATION>} /* CONTACTS MESSAGES ONLY */ "contacts": {<CONTACTS>} /* INTERACTIVE MESSAGES ONLY */ "interactive": {<INTERACTIVE>} /* TEMPLATE MESSAGES ONLY */ "template": {<TEMPLATE>} }
Espace réservé | Description | Exemple de valeur |
---|---|---|
Chaîne | L’ID WhatsApp ou le numéro de téléphone du client ou de la cliente à qui envoyer le message. Voir Formats d’affichage des numéros de téléphone |
|
Chaîne | Indique le type de message. |
|
Objet | Contenu des textos. | Voir Textos. |
Objet | Contenu des messages de réaction. | Voir Messages de réaction |
Objet | Contenu des messages multimédias. Le nom de la propriété doit correspondre au type de message multimédia que vous envoyez ( | Voir Messages multimédias. |
Objet | Contenu des messages de lieu. | Voir Messages de lieu |
Objet | Contenu des messages de type contact. | Voir Messages de type contact. |
Objet | Contenu des messages interactifs. | Voir Messages interactifs. |
Les exemples de ce document décrivent les exigences de charge utile de la publication pour chacun des types de messages.
En cas de réussite, l’API répond avec :
{ "messaging_product": "whatsapp", "contacts": [ { "input": "<WHATSAPP_USER_PHONE_NUMBER>", "wa_id": "<WHATSAPP_USER_ID>" } ], "messages": [ { "id": "<WHATSAPP_MESSAGE_ID>" } ] }
Placeholder | Description | Sample Value |
---|---|---|
String | WhatsApp user's WhatsApp phone number. May not match |
|
String | WhatsApp user's WhatsApp ID. May not match |
|
String | WhatsApp Message ID. This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks. |
|
Plus signs (+
), hyphens (-
), parenthesis ((
,)
), and spaces are supported in send message requests.
We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.
For example, if your business is in India (country calling code 91
) and you send a message to the following customer phone number in various formats:
Number In Send Message Request | Number Message Delivered To | Outcome |
---|---|---|
|
| Correct number |
|
| Correct number |
|
| Potentially wrong number |
|
| Potentially wrong number |
Les textos sont des messages contenant uniquement un corps de texte et un aperçu de lien facultatif.
Les messages de réaction sont des réactions sous forme d’emoji que vous pouvez appliquer à un message envoyé précédemment par une personne utilisant WhatsApp.
Vous pouvez envoyer un message vocal, un document, une image, un sticker et une vidéo aux personnes utilisant WhatsApp.
Les messages vocaux affichent une icône audio et un lien vers un fichier audio. Lorsque la personne utilisant WhatsApp appuie sur l’icône, le client WhatsApp charge et lit le fichier audio.
Les messages incluant un document affichent une icône de document, liée à un document, sur laquelle une personne utilisant WhatsApp appuie pour télécharger le document.
Les messages incluant une image affichent une seule image et une légende en option.
Les messages incluant un sticker sont des messages WhatsApp affichant des images de stickers animés ou statiques.
Les messages vidéo affichent un aperçu miniature d’une image vidéo avec une légende en option. Lorsque la personne utilisant WhatsApp appuie sur l’aperçu, la vidéo se charge et se lance.
Les contenus multimédias doivent être importés sur le numéro de téléphone professionnel qui enverra le message, ou vous devez héberger l’élément de contenu sur un serveur public et inclure son URL dans la requête d’envoi de message.
Pour réduire la probabilité d’erreurs et éviter les requêtes inutiles à votre serveur public, nous recommandons d’importer vos éléments de contenu multimédia et d’utiliser leur ID lors de l’envoi de messages.
L’API Cloud WhatsApp prend en charge la mise en cache HTTP de contenus multimédias. Si vous utilisez un lien (link
) vers un élément de contenu multimédia sur votre serveur (plutôt que l’id
d’un élément que vous avez importé sur nos serveurs), vous pouvez nous demander de mettre votre élément en cache pour le réutiliser dans de futurs messages, en incluant les en-têtes ci-dessous dans la réponse de votre serveur lorsque nous demandons l’élément. Si aucun de ces en-têtes n’est inclus, nous ne mettrons pas votre élément en cache.
Cache-Control: <CACHE_CONTROL> Last-Modified: <LAST_MODIFIED> ETag: <ETAG>
L’en-tête Cache-Control
nous indique comment gérer la mise en cache des éléments. Nous prenons en charge les directives suivantes :
max-age=n
: indique pendant combien de secondes (n
) l’élément doit être mis en cache. Nous réutiliserons l’élément mis en cache dans les messages suivants jusqu’à ce que ce délai soit dépassé, après quoi nous demanderons à nouveau l’élément, si nécessaire. Exemple : Cache-Control: max-age=604800
.no-cache
: indique que l’élément peut être mis en cache, mais devrait être mis à jour si la valeur de l’en-tête Last-Modified
est différente de celle de la réponse précédente. Nécessite l’en-tête Last-Modified
. Exemple : Cache-Control: no-cache
.no-store
: indique que l’élément ne devrait pas être mis en cache. Exemple : Cache-Control: no-store
.private
: indique que l’élément est personnalisé pour le ou la destinataire et ne devrait pas être mis en cache.Indique la date de dernière modification de l’élément. Cet en-tête est utilisé avec Cache-Control: no-cache
. Si la valeur de Last-Modified
est différente de celle de la réponse précédente, et si Cache-Control: no-cache
est inclus dans la réponse, nous mettrons à jour notre version en cache de l’élément en ajoutant l’élément dans la réponse. Exemple : Date: Tue, 22 Feb 2022 22:22:22 GMT
.
L’en-tête ETag
est une chaîne unique qui identifie une version spécifique d’un élément. Exemple : ETag: "33a64df5"
. Cet en-tête est ignoré à moins que les en-têtes Cache-Control
et Last-Modified
ne figurent pas dans la réponse. Dans ce cas, nous mettons l’élément en cache selon notre propre logique interne (que nous ne divulguons pas).
HTTP/1.1 200 OK Content-Type: image/png Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT ETag: "33a64df5" Cache-Control: max-age=604800 <IMAGE_PAYLOAD>
Les messages de lieu vous permettent d’envoyer les coordonnées de latitude et de longitude d’un lieu à une personne utilisant WhatsApp.
Pour envoyer des messages de type contact, envoyez un appel POST
à /PHONE_NUMBER_ID/messages
et joignez un objet message
avec type=contact
. Ajoutez ensuite un objet contacts
.
Exemple de requête
curl -X POST \
'https://graph.facebook.com/v19.0
/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"messaging_product": "whatsapp",
"to": "PHONE_NUMBER",
"type": "contacts",
"contacts": [{
"addresses": [{
"street": "STREET",
"city": "CITY",
"state": "STATE",
"zip": "ZIP",
"country": "COUNTRY",
"country_code": "COUNTRY_CODE",
"type": "HOME"
},
{
"street": "STREET",
"city": "CITY",
"state": "STATE",
"zip": "ZIP",
"country": "COUNTRY",
"country_code": "COUNTRY_CODE",
"type": "WORK"
}],
"birthday": "YEAR_MONTH_DAY",
"emails": [{
"email": "EMAIL",
"type": "WORK"
},
{
"email": "EMAIL",
"type": "HOME"
}],
"name": {
"formatted_name": "NAME",
"first_name": "FIRST_NAME",
"last_name": "LAST_NAME",
"middle_name": "MIDDLE_NAME",
"suffix": "SUFFIX",
"prefix": "PREFIX"
},
"org": {
"company": "COMPANY",
"department": "DEPARTMENT",
"title": "TITLE"
},
"phones": [{
"phone": "PHONE_NUMBER",
"type": "HOME"
},
{
"phone": "PHONE_NUMBER",
"type": "WORK",
"wa_id": "PHONE_OR_WA_ID"
}],
"urls": [{
"url": "URL",
"type": "WORK"
},
{
"url": "URL",
"type": "HOME"
}]
}]
}'
Une réponse positive inclut un objet avec un identifiant associé au préfixe wamid. Utilisez l’ID affiché après wamid pour suivre le statut de votre message.
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
Les messages interactifs incluent des boutons et d’autres composants UI permettant aux utilisateur·ices d’interagir avec le message dans le client WhatsApp.
Voir Partager des produits avec la clientèle
Les messages de liste interactifs vous permettent d’afficher aux personnes utilisant WhatsApp une liste d’options parmi lesquelles choisir.
Les messages de demande de localisation contiennent un corps de texte et un bouton d’envoi de la localisation. Le fait d’appuyer sur ce bouton affiche un écran de partage qui permet à la personne utilisant WhatsApp de partager sa localisation.
Les messages avec boutons de réponse interactifs vous permettent d’envoyer jusqu’ à trois réponses prédéfinies parmi lesquelles le destinataire du message peut choisir.
Vos client·es peuvent hésiter à appuyer sur des URL brutes contenant des chaînes longues ou obscures dans des textos. Dans ces situations, il peut être souhaitable d’envoyer un message interactif avec corps de texte et bouton d’URL call-to-action (CTA).
Les boutons d’URL CTA vous permettent de mapper une URL sur un bouton et vous évitent d’inclure l’URL brute dans le corps du message interactif.
POST /<BUSINESS_PHONE_NUMBER_ID>/messages
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<CUSTOMER_PHONE_NUMBER>", "type": "interactive", "interactive": { "type": "cta_url", /* Header optional */ "header": { "type": "text", "text": "<HEADER_TEXT>" }, /* Body optional */ "body": { "text": "<BODY_TEXT>" }, /* Footer optional */ "footer": { "text": "<FOOTER_TEXT>" }, "action": { "name": "cta_url", "parameters": { "display_text": "<BUTTON_TEXT>", "url": "<BUTTON_URL>" } } } }
Espace réservé | Description | Exemple de valeur |
---|---|---|
Chaîne | Obligatoire. L’ID WhatsApp ou le numéro de téléphone du client ou de la cliente à qui le message est envoyé. Voir Formats d’affichage des numéros de téléphone. |
|
Chaîne | Facultatif. Texte de l’en-tête. |
|
Chaîne | Obligatoire. Texte du corps du message. |
|
Chaîne | Facultatif. Texte du pied du message. |
|
Chaîne | Obligatoire. Texte du bouton. |
|
Chaîne | Obligatoire. URL à charger dans le navigateur Web par défaut de l’appareil lorsque l’utilisateur·ice WhatsApp appuie sur le bouton. |
|
curl 'https://graph.facebook.com/v19.0
/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "+16505555555",
"type": "interactive",
"interactive": {
"type": "cta_url",
"header": {
"text": "Available Dates"
},
"body": {
"text": "Tap the button below to see available dates."
},
"footer": {
"text": "Dates subject to change."
},
"action": {
"name": "cta_url",
"parameters": {
"display_text": "See Dates",
"url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
}
}
}
}'
{ "messaging_product": "whatsapp", "contacts": [ { "input": "+16505555555", "wa_id": "+16505555555" } ], "messages": [ { "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA" } ] }
Une fois le WhatsApp Flow créé, vous pouvez l’envoyer. Pour envoyer un message avec un flux, vous disposez désormais d’un nouveau type d’objet interactif appelé flow
. L’objet interactif spécifique aux flux présente les propriétés suivantes :
Propriété | Type | Description |
---|---|---|
| Chaîne | La valeur doit être |
| Chaîne | La valeur doit être |
| Chaîne | Le Flow peut être en mode |
| Chaîne | La valeur doit être |
| Chaîne | Token Flow généré par l’entreprise pour servir d’identifiant. |
| Chaîne | ID unique du Flow fourni par WhatsApp. |
| Chaîne | Texte sur le bouton CTA. Par exemple : « Inscrivez-vous » Limité à 20 caractères (pas d’emoji). |
| Chaîne |
|
| Chaîne | Obligatoire si |
| Chaîne |
|
| Chaîne | Facultatif. Données saisies pour le premier écran du parcours Flows. L’objet ne peut pas être vide. |
Exemple de requête
curl -X POST \ 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "recipient_type": "individual", "messaging_product": "whatsapp", "to": "PHONE_NUMBER", "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": "1", "flow_cta": "Book!", "flow_action": "navigate", "flow_action_payload": { "screen": "<SCREEN_NAME>", "data": { "product_name": "name", "product_description": "description", "product_price": 100 } } } } } }'
Exemple de réponse
{ "messaging_product": "whatsapp", "contacts": [ { "Input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID" } ], "messages": [ { "id": "wamid.ID" } ] }
Vous pouvez envoyer tout type de message en réponse à un message précédent. Le message précédent apparaîtra en haut du nouveau message, cité dans une bulle contextuelle.
La bulle contextuelle n’apparaîtra pas en haut du message réponse distribué dans les cas suivants :
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<WHATSAPP_USER_PHONE_NUMBER>", "context": { "message_id": "WAMID_TO_REPLY_TO" }, /* Message type and type contents goes here */ }
Espace réservé | Description | Exemple de valeur |
---|---|---|
Chaîne | Obligatoire. ID de message WhatsApp (wamid) du message précédent auquel vous souhaitez répondre. |
|
String | Required. WhatsApp user phone number. |
|
curl 'https://graph.facebook.com/v19.0/106540352242922/messages' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+16505551234", "context": { "message_id": "wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=" }, "type": "text", "text": { "body": "You'\''re welcome, Pablo!" } }'
Cette fonctionnalité est disponible uniquement pour les entreprises situées à Singapour et leur clientèle de Singapour, et pour les entreprises situées en Inde et leur clientèle en Inde.
Les messages de type adresse permettent aux utilisateur·ices de partager plus facilement leur adresse d’expédition avec l’entreprise sur WhatsApp.
Ce sont des messages interactifs qui contiennent les quatre sections principales suivantes : header
, body
, footer
et action
. Dans le composant action, l’entreprise spécifie le nom address_message et les paramètres adéquats.
Pour l’instant, les messages de type adresse sont pris en charge dans les deux pays suivants : Inde et Singapour. Le tableau ci-dessous indique quels sont les champs pris en charge selon le pays.
Nom du champ | Libellé affiché | Type d’entrée | Pays pris en charge | Limites |
---|---|---|---|---|
| Nom | texte | Inde, Singapour | Aucune |
| Numéro de téléphone | téléphone | Inde, Singapour | Numéros de téléphone valides uniquement |
| Code PIN | texte | Inde | Longueur max. : 6 |
| Code postal | nombre | Singapour | Longueur max. : 6 |
| Numéro d’appartement/maison | texte | Inde | Aucune |
| Numéro d’étage | texte | Inde | Aucune |
| Numéro d’immeuble | texte | Inde | Aucune |
| Nom de bâtiment/appartement | texte | Inde | Aucune |
| Adresse | texte | Inde, Singapour | Aucune |
| Repère/Région | texte | Inde | Aucune |
| Numéro d’unité | texte | Singapour | Aucune |
| Ville | texte | Inde, Singapour | Aucune |
| État | texte | Inde | Aucune |
Ceci est un exemple d’appel d’API pour le message de type adresse. L’attribut country
est un champ obligatoire dans les paramètres d’action. S’il n’est pas inclus, une erreur de validation se produit.
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "PHONE_NUMBER", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country" :"COUNTRY_ISO_CODE" } } } }'
Si l’indicatif régional du numéro de téléphone n’est pas correct pour le pays indiqué, les entreprises ne pourront pas demander le message de type adresse au ou à la destinataire. Par exemple, les entreprises ne pourront pas demander un message de type adresse à un ou une destinataire dont le pays est Singapour avec un numéro de téléphone associé à l’indicatif régional 91.
Les messages de type adresse ne permettent pas la transmission simultanée de champs contradictoires. Par exemple, vous ne pouvez pas transmettre un sg_post_code
lorsque country
est défini sur IN.
Une fois le message de type adresse envoyé, l’entreprise attend que l’utilisateur·ice renseigne l’adresse et la renvoie. L’adresse saisie par l’utilisateur·ice est partagée par le biais du webhook enregistré durant le processus de configuration.
La procédure à suivre pour les messages de type adresse est la suivante :
address_message
.Le diagramme suivant montre le processus d’intégration habituel d’un message de type adresse.
L’entreprise peut transmettre des attributs supplémentaires tels que values
, validation_errors
ou saved_addresses
par le biais des paramètres d’action supplémentaires. Vous trouverez ci-dessous des informations sur l’utilisation de chacun d’eux.
Paramètre d’action | Utilisation |
---|---|
| Permet aux entreprises de préremplir des champs d’adresse (par exemple, pour préremplir le champ city avec Singapour). |
| Permet aux entreprises de transmettre une adresse enregistrée précédemment associée à l’utilisateur·ice. Les utilisateur·ices ont la possibilité de choisir l’adresse enregistrée plutôt que de la saisir manuellement. |
| Les entreprises peuvent associer des erreurs aux champs d’adresse afin que WhatsApp empêche l’utilisateur·ice d’envoyer son adresse tant que le ou les problèmes signalés ne sont pas résolus. |
Envoyez un appel POST
à /PHONE_NUMBER_ID/messages
avec l’API WhatsApp afin d’envoyer un message de type adresse chiffré de bout en bout à l’utilisateur·ice :
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d ' { "messaging_product": "whatsapp", "recipient_type": "individual", "to": "PHONE_NUMBER", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": "JSON Payload" } } }'
Si le message de type adresse est envoyé sans adresse enregistrée, WhatsApp invite le particulier ou l’entreprise à saisir une nouvelle adresse dans un formulaire.
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+91xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "IN", "values": { "name": "CUSTOMER_NAME", "phone_number": "+91xxxxxxxxxx" } } } } }'
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+65xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "SG", "values": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx" } } } } }'
Si le message de type adresse est envoyé avec des adresses enregistrées, WhatsApp invite le particulier ou l’entreprise à sélectionner une des adresses enregistrées ou à en ajouter une. Les utilisateur·ices peuvent ignorer l’adresse enregistrée et en saisir une nouvelle.
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "91xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "IN", "saved_addresses": [ { "id": "address1", "value": { "name": "CUSTOMER_NAME", "phone_number": "+91xxxxxxxxxx", "in_pin_code": "400063", "floor_number": "8", "building_name": "", "address": "Wing A, Cello Triumph,IB Patel Rd", "landmark_area": "Goregaon", "city": "Mumbai" } } ] } } } }'
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+65xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "SG", "values": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx" }, "saved_addresses": [ { "id": "address1", "value": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx", "sg_post_code": "018937", "address": "9 Straits View, Marina One West Tower", "unit_number": "Suite 29-00", "city": "Singapore" } } ] } } } }'
Une réponse positive comprend un objet messages
avec un ID pour le message nouvellement créé.
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
En cas d’échec, la réponse renvoyée contient un message d’erreur. Pour plus d’informations, consultez Messages d’erreur et d’état.
Un message de type adresse doit être renvoyé à l’utilisateur·ice en cas d’erreur de validation sur le serveur de l’entreprise. L’entreprise devrait renvoyer l’ensemble de valeurs saisies précédemment par l’utilisateur·ice, ainsi que les erreurs de validation respectives de chaque champ non valide, comme indiqué dans les exemples de charges utiles ci-dessous.
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "91xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "IN", "values": { "name": "CUSTOMER_NAME", "phone_number": "+91xxxxxxxxxx", "in_pin_code": "666666", "address": "Some other location", "city": "Delhi" }, "validation_errors": { "in_pin_code": "We could not locate this pin code." } } } } }'
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "12065550107", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "SG", "values": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx", "sg_post_code": "666666", "address": "Some other location", "city": "Singapore" }, "validation_errors": { "sg_post_code": "We could not locate this pin code." } } } } }'
Les entreprises recevront des notifications d’envoi d’adresse via les webhooks, semblables à celle présentée ci-dessous.
{ "messages": [ { "id": "gBGGFlAwCWFvAgmrzrKijase8yA", "from": "PHONE_NUMBER", "Interactive": { "type": "nfm_reply", "action": "address_message", "nfm_reply": { "name": "address_message", "response_json": “<response_json from client>”, "body": “<body text from client>”, } "timestamp": "1670394125", "type": "interactive" } ] }
La notification webhook est associée aux valeurs suivantes.
Nom du champ | Type | Description |
---|---|---|
| Objet | Contient la réponse du client ou de la cliente |
| Chaîne | Doit être |
| Objet | Contient les données reçues de la part du client ou de la cliente |
| Chaîne | Valeurs des champs d’adresse renseignées par l’utilisateur·ice au format JSON, qui sont toujours présents |
| Chaîne | Corps du texte provenant du client ou de la cliente, ce que l’utilisateur·ice voit |
| Chaîne | Doit être |
Vous voyez ci-dessous une réponse de type NFM à un message de type adresse pour une demande d’adresse en Inde.
{ "messages": [ { "context": { "from": "FROM_PHONE_NUMBER_ID", "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgARGBI3NjNFN0U5QzMzNDlCQjY0M0QA" }, "from": "PHONE_NUMBER", "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgASGCA5RDhBNENEMEQ3RENEOEEzMEI0RUExRDczN0I1NThFQwA=", "timestamp": "1671498855", "type": "interactive", "interactive": { "type": "nfm_reply", "nfm_reply": { "response_json": "{\"saved_address_id\":\"address1\",\"values\":{\"in_pin_code\":\"400063\",\"building_name\":\"\",\"landmark_area\":\"Goregaon\",\"address\":\"Wing A, Cello Triumph, IB Patel Rd\",\"city\":\"Mumbai\",\"name\":\"CUSTOMER_NAME\",\"phone_number\":\"+91xxxxxxxxxx\",\"floor_number\":\"8\"}}", "body": "CUSTOMER_NAME\n +91xxxxxxxxxx\n 400063, Goregaon, Wing A, Cello Triumph,IB Patel Rd, Mumbai, 8", "name": "address_message" } } } ] }
Si le client ou la cliente ne prend pas en charge address_message
, les messages sont annulés de façon silencieuse et un message d’erreur est renvoyé à l’entreprise dans un webhook. Voici un exemple de notification webhook qui serait renvoyée dans un tel cas :
{ "statuses": [ { "errors": [ { "code": 1026, "href": "https://developers.facebook.com/docs/whatsapp/api/errors/", "title": "Receiver Incapable" } ], "id": "gBGGFlAwCWFvAgkyHMGKnRu4JeA", "message": { "recipient_id": "+91xxxxxxxxxx" }, "recipient_id": "91xxxxxxxxxx", "status": "failed", "timestamp": "1670394125", "type": "message" } ] }
Lorsque vous envoyez une série de messages, leur ordre de diffusion ne correspond pas forcément à celui de vos requêtes d’API. Pour garantir l’ordre de diffusion de vos messages, confirmez la réception d’un statut delivered
dans un webhook de messages avant d’envoyer le message suivant de votre liste.
Si vous rencontrez des problèmes de distribution des messages, consultez Message non distribué.