Ce document a été mis à jour.
La traduction en Français (France) n’est pas encore terminée.
Anglais mis à jour : 16 mai

Envoi de messages

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.

Syntaxe de la requête

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

Corps de la requête POST

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>}

}

Paramètres du corps de la publication

Espace réservéDescriptionExemple de valeur

<TO>

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

+16315551234

<TYPE>

Chaîne

Indique le type de message.

text

<TEXT>

Objet

Contenu des textos.

Voir Textos.

<REACTION>

Objet

Contenu des messages de réaction.

Voir Messages de réaction

<IMAGE>

Objet

Contenu des messages multimédias. Le nom de la propriété doit correspondre au type de message multimédia que vous envoyez (image pour un message en image, video pour un message vidéo, etc.).

Voir Messages multimédias.

<LOCATION>

Objet

Contenu des messages de lieu.

Voir Messages de lieu

<CONTACTS>

Objet

Contenu des messages de type contact.

Voir Messages de type contact.

<INTERACTIVE>

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.

Syntaxe de la réponse

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>"
    }
  ]
}

Paramètres de la réponse

PlaceholderDescriptionSample Value

<WHATSAPP_USER_PHONE_NUMBER>

String

WhatsApp user's WhatsApp phone number. May not match wa_id value.

+16505551234

<WHATSAPP_USER_ID>

String

WhatsApp user's WhatsApp ID. May not match input value.

16505551234

<WHATSAPP_MESSAGE_ID>

String

WhatsApp Message ID.


This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks.

wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA

Phone Number Formats

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 RequestNumber Message Delivered ToOutcome

+16315551234

+16315551234

Correct number

+1 (631) 555-1234

+16315551234

Correct number

(631) 555-1234

+916315551234

Potentially wrong number

1 (631) 555-1234

+9116315551234

Potentially wrong number

Textos

Les textos sont des messages contenant uniquement un corps de texte et un aperçu de lien facultatif.

Messages de réaction

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.

Messages multimédias

Vous pouvez envoyer un message vocal, un document, une image, un sticker et une vidéo aux personnes utilisant WhatsApp.

Messages vocaux

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.

Messages incluant un document

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.

Messages incluant une image

Les messages incluant une image affichent une seule image et une légende en option.

Messages incluant un sticker

Les messages incluant un sticker sont des messages WhatsApp affichant des images de stickers animés ou statiques.

Messages vidéo

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.

Contenus multimédias

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.

Mise en cache de contenus multimédias HTTP

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>

Cache-Control

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.

Last-Modified

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.

ETag

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).

Exemple de réponse avec des en-têtes

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>

Messages de lieu

Les messages de lieu vous permettent d’envoyer les coordonnées de latitude et de longitude d’un lieu à une personne utilisant WhatsApp.

Messages de type contact

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",
    }]
}

Messages interactifs

Les messages interactifs incluent des boutons et d’autres composants UI permettant aux utilisateur·ices d’interagir avec le message dans le client WhatsApp.

Messages commerciaux interactifs

Voir Partager des produits avec la clientèle

Messages de liste interactifs

Les messages de liste interactifs vous permettent d’afficher aux personnes utilisant WhatsApp une liste d’options parmi lesquelles choisir.

Messages de demande de localisation interactifs

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.

Messages avec boutons de réponse interactifs

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.

Boutons d’URL call-to-action interactifs

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.

Syntaxe de la requête

POST /<BUSINESS_PHONE_NUMBER_ID>/messages

Corps de la requête POST

{
  "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>"
      }
    }
  }
}

Propriétés du corps


Espace réservéDescriptionExemple de valeur

<CUSTOMER_PHONE_NUMBER>

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.

+15558543153

<HEADER_TEXT>

Chaîne

Facultatif.


Texte de l’en-tête.

Available Dates

<BODY_TEXT>

Chaîne

Obligatoire.


Texte du corps du message.

Tap the button below to see available dates.

<FOOTER_TEXT>

Chaîne

Facultatif.


Texte du pied du message.

Dates subject to change.

<BUTTON_TEXT>

Chaîne

Obligatoire.


Texte du bouton.

See Dates

<BUTTON_URL>

Chaîne

Obligatoire.


URL à charger dans le navigateur Web par défaut de l’appareil lorsque l’utilisateur·ice WhatsApp appuie sur le bouton.

https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4

Exemple de requête

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"
            }
        }
    }
}'

Exemple de réponse

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "+16505555555",
      "wa_id": "+16505555555"
    }
  ],
  "messages": [
    {
      "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
    }
  ]
}

Messages Flows

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

interactive.type

Chaîne

La valeur doit être flow.

interactive.action.name

Chaîne

La valeur doit être flow.

interactive.action.parameters.mode

Chaîne

Le Flow peut être en mode draft ou published. published est la valeur par défaut pour ce champ.

interactive.action.parameters.flow_message_version

Chaîne

La valeur doit être 3.

interactive.action.parameters.flow_token

Chaîne

Token Flow généré par l’entreprise pour servir d’identifiant.

interactive.action.parameters.flow_id

Chaîne

ID unique du Flow fourni par WhatsApp.

interactive.action.parameters.flow_cta

Chaîne

Texte sur le bouton CTA. Par exemple : « Inscrivez-vous »

Limité à 20 caractères (pas d’emoji).

interactive.action.parameters.flow_action

Chaîne

navigate ou data_exchange. La valeur par défaut est navigate.

interactive.action.parameters.flow_action_payload

Chaîne

Obligatoire si flow_action est navigate. Sinon, il doit être omis.

interactive.action.parameters.flow_action_payload.screen

Chaîne

id du premier écran.

interactive.action.parameters.flow_action_payload.data

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"
    }
  ]
}

Réponses

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.

Limites

La bulle contextuelle n’apparaîtra pas en haut du message réponse distribué dans les cas suivants :

Syntaxe de la requête

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages

Corps de la requête POST

{
  "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 */

}

Paramètres du corps de la publication

Espace réservéDescriptionExemple de valeur

<WAMID_TO_REPLY_TO>

Chaîne

Obligatoire.

ID de message WhatsApp (wamid) du message précédent auquel vous souhaitez répondre.

wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=

<WHATSAPP_USER_PHONE_NUMBER>

String

Required.

WhatsApp user phone number.

+16505551234

Exemple de requête

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!"
  }
}'

Messages de type adresse

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

name

Nom

texte

Inde, Singapour

Aucune

phone_number

Numéro de téléphone

téléphone

Inde, Singapour

Numéros de téléphone valides uniquement

in_pin_code

Code PIN

texte

Inde

Longueur max. : 6

sg_post_code

Code postal

nombre

Singapour

Longueur max. : 6

house_number

Numéro d’appartement/maison

texte

Inde

Aucune

floor_number

Numéro d’étage

texte

Inde

Aucune

tower_number

Numéro d’immeuble

texte

Inde

Aucune

building_name

Nom de bâtiment/appartement

texte

Inde

Aucune

address

Adresse

texte

Inde, Singapour

Aucune

landmark_area

Repère/Région

texte

Inde

Aucune

unit_number

Numéro d’unité

texte

Singapour

Aucune

city

Ville

texte

Inde, Singapour

Aucune

state

État

texte

Inde

Aucune

Exemple d’appel d’API

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"
                   }
              }
          }
    }' 

Gestion des erreurs

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.

Étapes d’un message de type adresse

La procédure à suivre pour les messages de type adresse est la suivante :

  1. L’entreprise envoie à l’utilisateur·ice un message de type adresse associé au nom d’action address_message.
  2. L’utilisateur·ice interagit avec le message en cliquant sur le CTA, et affiche ainsi l’écran Message de type adresse. L’utilisateur·ice renseigne son adresse et envoie le formulaire.
  3. Une fois que l’utilisateur·ice a envoyé le message de type adresse, le ou la partenaire reçoit une notification webhook contenant les détails de l’adresse envoyée.
Exemple de message de type adresse en Inde
Exemple de message de type adresse à Singapour

Le diagramme suivant montre le processus d’intégration habituel d’un message de type adresse.

Paramètres d’action supplémentaires

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

values

Permet aux entreprises de préremplir des champs d’adresse (par exemple, pour préremplir le champ city avec Singapour).

saved_addresses

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.

validation_errors

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.

Envoyer un message de type adresse à un utilisateur ou une utilisatrice

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.

Inde

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"
              }
           }
        }
      }
   }'

Singapour

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.

Inde

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"
                 }
             }
          ]
       }
    }
  }
}'

Singapour

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"
                }
            }
         ]
      }
    }
  }
}'

Vérifier votre réponse

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.

Envoyer un message de type adresse avec erreurs de validation

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.

Inde

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."
          }
       }
    }
  }
}'

Singapour

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."
           }
        }
     }
  }
}'

Recevoir des notifications pour les envois d’adresse

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

interactive

Objet

Contient la réponse du client ou de la cliente

type

Chaîne

Doit être nfm_reply pour indiquer qu’il s’agit d’une réponse de flux natif (NFM, Native Flow Response) du client ou de la cliente

nfm_reply

Objet

Contient les données reçues de la part du client ou de la cliente

response_json

Chaîne

Valeurs des champs d’adresse renseignées par l’utilisateur·ice au format JSON, qui sont toujours présents

body (facultatif)

Chaîne

Corps du texte provenant du client ou de la cliente, ce que l’utilisateur·ice voit

name (facultatif)

Chaîne

Doit être address_message pour indiquer le type de la réponse d’action NFM de la part du client ou de la cliente

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"
                }
            }
        }
    ]
}

Fonctionnalité non prise en charge

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"
    }
  ]
}

Messages basés sur des modèles

Voir Messages basés sur des modèles.

Ordre de diffusion lorsqu’il y a plusieurs messages

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.

Résolution des problèmes

Si vous rencontrez des problèmes de distribution des messages, consultez Message non distribué.