We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.

Messages

Utilisez le point de terminaison /PHONE_NUMBER_ID/messages pour envoyer du texte, du contenu multimédia, des contacts, des lieux, des messages interactifs, ainsi que des modèles de message à votre clientèle. En savoir plus sur les messages que vous pouvez envoyer.

Point de terminaisonAuthentification

/PHONE_NUMBER_ID/messages

Developers can authenticate their API calls with the access token generated in the App Dashboard > WhatsApp > API Setup.


Solution Partners must authenticate themselves with an access token with the whatsapp_business_messaging permission.

Les messages sont identifiés par un ID unique (WAMID). Vous pouvez suivre le statut des messages dans les webhooks grâce à leur WAMID. Vous pouvez également marquer un message entrant comme lu grâce au point de terminaison « messages ». Ce WAMID peut contenir jusqu’à 128 caractères.

Avec l’API Cloud, il n’est plus possible de vérifier de manière explicite si un numéro de téléphone possède un ID WhatsApp. Pour envoyer un message à un client ou une cliente avec l’API Cloud, envoyez-le directement au numéro de téléphone de cette personne après qu’elle a choisi de recevoir des messages. Pour des exemples, consultez la section Référence, Messages.

Objet « message »

Pour envoyer un message, vous devez d’abord composer l’objet du message avec le contenu que vous souhaitez envoyer. Voici les paramètres que vous pouvez utiliser dans un objet message :

NomDescription (Cliquez sur la flèche de la colonne de gauche pour connaître les options prises en charge.)

audio

objet

Obligatoire quand type=audio.

Objet media contenant de l’audio.

biz_opaque_callback_data

chaîne

Facultatif.

Chaîne de caractères arbitraire, utile pour le suivi.


Par exemple, vous pouvez passer l’ID du modèle de message dans ce champ pour suivre le parcours du client ou de la cliente à partir du premier message que vous envoyez. Vous pouvez ensuite suivre le ROI de différents types de modèles de message pour déterminer le plus efficace.


Les applications abonnées à ce champ de webhook messages sur le compte WhatsApp Business peuvent obtenir cette chaîne, car elle est incluse dans l’objet statuses dans les charges utiles du webhook.


L’API Cloud ne traite pas ce champ, elle le renvoie simplement dans le cadre des webhooks de messages envoyés/livrés/lus.


512 caractères maximum.


API Cloud uniquement.

contacts

objet

Obligatoire quand type=contacts.

Objet contacts.

context

objet

Obligatoire en cas de réponse à un message de la conversation.

Objet contenant l’ID d’un message précédent auquel vous répondez. Par exemple :


{"message_id":"MESSAGE_ID"}


API Cloud uniquement.

document

objet

Obligatoire quand type=document.

Objet media contenant un document.

hsm

objet

Contient un objet hsm. Cette option a été abandonnée avec l’API On-Premises v2.39. Utilisez l’objet template à la place.


API On-Premises uniquement.

image

objet

Obligatoire quand type=image.

Objet media contenant une image.

interactive

objet

Obligatoire quand type=interactive.

Objet interactive. Les composants de chaque objet interactive suivent généralement un modèle cohérent : header, body, footer et action.

location

objet

Obligatoire quand type=location.

Objet location.

messaging_product

chaîne

Obligatoire

Service de messagerie utilisé pour la requête. Utilisez "whatsapp".


API Cloud uniquement.

preview_url

booléen

Obligatoire si type=text.

Autorise les aperçus d’URL dans les textos : voir Envoi d’URL dans les textos. Ce champ est facultatif si vous n’incluez pas d’URL dans votre message. Valeurs : false (par défaut), true.


API On-Premises uniquement. Les utilisateur·ices de l’API Cloud peuvent utiliser la même fonctionnalité avec le champ preview_url dans un objet texte.

recipient_type

chaîne

Facultatif.

Actuellement, vous pouvez uniquement envoyer des messages à des individus. Définissez ce paramètre sur individual.


Valeur par défaut : individual

status

chaîne

Statut d’un message. Vous pouvez utiliser ce champ pour marquer un message comme read. Pour plus d’informations, consultez ces guides :


sticker

objet

Obligatoire quand type=sticker.

Objet media contenant un sticker.


API Cloud : les stickers tiers statiques et animés sont pris en charge en plus de tous les types de stickers entrants. Un sticker statique doit être de 512 x 512 pixels et ne pas dépasser 100 Ko. Un sticker animé doit être de 512 x 512 pixels et ne pas dépasser 500 Ko.


API On-Premises : seuls les stickers entrants tiers statiques sont pris en charge en plus de tous les types de stickers entrants. Un sticker statique doit être de 512 x 512 pixels et ne pas dépasser 100 Ko. Les stickers animés ne sont pas pris en charge.

template

objet

Obligatoire quand type=template.

Objet template.

text

objet

Obligatoire pour les textos.

Objet text.

to

chaîne

Obligatoire.

ID WhatsApp ou numéro de téléphone du client ou de la cliente à qui vous voulez envoyer un message. Voir Formats d’affichage des numéros de téléphone.


Si nécessaire, les utilisateur·ices de l’API On-Premises peuvent obtenir ce numéro en appelant le point de terminaison contacts.

type

chaîne

Facultatif.

Type de message que vous souhaitez envoyer. Si vous ne l’avez pas défini, la valeur par défaut est text.

Les objets suivants sont imbriqués à l’intérieur de l’objet « message » :

Objet « contacts »

NameDescription

addresses

object

Optional.

Full contact address(es) formatted as an addresses object. The object can contain the following fields:

streetstringOptional. Street number and name.

citystringOptional. City name.

statestringOptional. State abbreviation.

zipstringOptional. ZIP code.

countrystringOptional. Full country name.

country_codestringOptional. Two-letter country abbreviation.

typestringOptional. Standard values are HOME and WORK.

birthday

Optional.

YYYY-MM-DD formatted string.

emails

object

Optional.

Contact email address(es) formatted as an emails object. The object can contain the following fields:

emailstringOptional. Email address.

typestringOptional. Standard values are HOME and WORK.

name

object

Required.

Full contact name formatted as a name object. The object can contain the following fields:

formatted_namestringRequired. Full name, as it normally appears.

first_namestringOptional*. First name.

last_namestringOptional*. Last name.

middle_namestringOptional*. Middle name.

suffixstringOptional*. Name suffix.

prefixstringOptional*. Name prefix.


*At least one of the optional parameters needs to be included along with the formatted_name parameter.

org

object

Optional.

Contact organization information formatted as an org object. The object can contain the following fields:

companystringOptional. Name of the contact's company.

departmentstringOptional. Name of the contact's department.

titlestringOptional. Contact's business title.

phones

object

Optional.

Contact phone number(s) formatted as a phone object. The object can contain the following fields:

phonestringOptional. Automatically populated with the `wa_id` value as a formatted phone number.

typestringOptional. Standard Values are CELL, MAIN, IPHONE, HOME, and WORK.

wa_idstringOptional. WhatsApp ID.

urls

object

Optional.

Contact URL(s) formatted as a urls object. The object can contain the following fields:

urlstringOptional. URL.

typestringOptional. Standard values are HOME and WORK.

Objet interactif

NomDescription

action

objet

Obligatoire.

Action que vous souhaitez que l’utilisateur ou l’utilisatrice réalise après avoir lu le message.

body

objet

Facultatif pour le type product. Obligatoire pour les autres types de messages.

Objet contenant le corps du message.


L’objet body contient le champ suivant :

textchaîne : obligatoire en présence de l’objet « body ». Contenu du message. Format markdown et emojis pris en charge. Longueur maximale : 1 024 caractères

footer

objet

Facultatif. Objet contenant le pied de page du message.


L’objet footer contient le champ suivant :

textchaîne : obligatoire en présence de l’objet « footer ». Contenu du pied de page. Format markdown, emojis et liens acceptés. Longueur maximale : 60 caractères.

header

objet

Obligatoire pour le type product_list. Facultatif pour les autres types.

Contenu de l’en-tête affiché en haut d’un message. Vous ne pouvez définir d’en-tête si votre objet « interactive » est de type product. Consultez l’objet header pour en savoir plus.

type

objet

Obligatoire.

Type du message interactif que vous souhaitez envoyer. Valeurs acceptées :


  • button : pour les boutons de réponse.
  • catalog_message : pour les messages de catalogue.
  • list : pour les messages contenant une liste.
  • product : pour les messages concernant un seul produit.
  • product_list : pour les messages concernant plusieurs produits.
  • flow : pour les messages Flows.

Les objets suivants sont imbriqués dans l’objet interactive :

Objet « action »

NomDescription

button

chaîne

Obligatoire pour les messages liste.

Contenu du bouton. Le champ ne doit pas être vide et la valeur doit être unique dans le message. Les emojis sont pris en charge, pas le format markdown.


Longueur maximale : 20 caractères.

buttons

tableau d’objets

Obligatoire pour les messages contenant des boutons de réponse.

Un objet « buttons » peut contenir les paramètres suivants :


  • type : le seul type accepté est reply (pour les messages contenant des boutons de réponse).
  • title : titre du bouton. Le champ ne doit pas être vide et la valeur doit être unique dans le message. Les emojis sont pris en charge, pas le format markdown. Longueur maximale : 20 caractères.
  • id : identifiant unique du bouton. L’ID est renvoyé dans le webhook quand l’utilisateur ou l’utilisatrice clique sur le bouton. Longueur maximale : 256 caractères.

Vous pouvez avoir jusqu’à 3 boutons. L’identifiant ne peut pas contenir d’espace au début ou à la fin.

catalog_id

chaîne

Obligatoire pour les messages concernant un seul produit et les messages concernant plusieurs produits.

Identifiant unique du catalogue Facebook associé à votre compte WhatsApp Business. Cet ID peut être récupéré via le Gestionnaire des ventes Meta.

product_retailer_id

chaîne

Obligatoire pour les messages concernant un seul produit et les messages concernant plusieurs produits.

Identifiant unique du produit dans un catalogue.


Pour obtenir cet ID, allez dans le Gestionnaire des ventes Meta et sélectionnez votre compte business Meta. Vous verrez une liste des boutiques connectées à votre compte. Cliquez sur la boutique de votre choix. Dans le panneau de gauche, cliquez sur Catalogue > Éléments, et recherchez l’élément que vous voulez mentionner. L’ID de l’élément est indiqué sous son nom.

sections

tableau d’objets

Obligatoire pour les messages de type liste et les messages concernant plusieurs produits.

Tableau d’objets section. Valeur comprise entre 1 et 10. Consultez l’objet section.

mode

chaîne

Facultatif pour les messages Flows.

Mode actuel du message Flows, draft ou published.


Par défaut : published

flow_message_version

chaîne

Obligatoire pour les messages Flows.

Doit être 3.

flow_token

chaîne

Obligatoire pour les messages Flows.

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

flow_id

chaîne

Obligatoire pour les messages Flows.

Identifiant unique du parcours WhatsApp Flows.

flow_cta

chaîne

Obligatoire pour les messages Flows.

Texte sur le bouton CTA, comme « S’inscrire ».


Longueur maximale : 20 caractères (emojis non pris en charge).

flow_action

chaîne

Facultatif pour les messages Flows.

navigate ou data_exchange. Utilisez navigate pour prédéfinir le premier écran du message. Utilisez data_exchange pour les cas d’utilisation avancés dans lesquels le premier écran est fourni par votre point de terminaison.


Par défaut : navigate

flow_action_payload

objet

Facultatif pour les messages Flows.

Obligatoire uniquement si flow_action est défini sur navigate. L’objet peut contenir les paramètres suivants :

screenchaîne : obligatoire.id du premier écran du parcours Flows.

dataobjet : facultatif. Données saisies pour le premier écran du parcours Flows. L’objet ne peut pas être vide.

Objet « header »

NomDescription

document

objet

Obligatoire si le type défini est document.

Contient l’objet « media » pour ce document.

image

objet

Obligatoire si le type défini est image.

Contient l’objet « media » pour cette image.

text

chaîne

Obligatoire quand le type défini est text.

Texte de l’en-tête. Emojis acceptés, format markdown refusé.


Longueur maximale : 60 caractères.

sub_text

chaîne

Facultatif.

Texte de l’en-tête. Emojis acceptés, format markdown refusé.


Longueur maximale : 60 caractères.

type

chaîne

Obligatoire.

Type d’en-tête que vous souhaitez utiliser. Valeurs acceptées :


  • text : pour les messages de type liste, les boutons de réponse et les messages concernant plusieurs produits
  • video : pour les boutons de réponse
  • image : pour les boutons de réponse
  • document : pour les boutons de réponse.

video

objet

Obligatoire si le type défini est video.

Contient l’objet « media » pour cette vidéo.

Objet « section »

NomDescription

product_items

tableau d’objets

Obligatoire pour les messages concernant plusieurs produits.

Tableau d’objets product. Vous devez saisir au moins 1 produit par section, et jusqu’à 30 produits dans toutes les sections.


Chaque objet product contient le champ suivant :


  • product_retailer_idchaîne : obligatoire pour les messages concernant plusieurs produits. Identifiant unique du produit dans un catalogue. Pour obtenir cet identifiant, allez dans le Gestionnaire des ventes Meta, sélectionnez votre compte et la boutique que vous souhaitez utiliser. Ensuite, cliquez sur Catalogue > Éléments, et recherchez l’élément que vous voulez mentionner. L’ID de l’élément est indiqué sous son nom.

rows

tableau d’objets

Obligatoire pour les messages liste.

Contient une liste de lignes. Vos sections peuvent contenir jusqu’à 10 lignes.


Chaque ligne doit comporter un titre (longueur maximale : 24 caractères) et un identifiant (longueur maximale : 200 caractères). Vous pouvez ajouter une description (longueur maximale : 72 caractères), mais elle est facultative.


Exemple :

"rows": [
  {
   "id":"unique-row-identifier-here",
   "title": "row-title-content-here",
   "description": "row-description-content-here",           
   }
]

title

chaîne

Obligatoire si le message comporte plus d’une section.

Titre de la section.


Longueur maximale : 24 caractères

Objet « location »

NameDescription

latitude

Required.

Location latitude in decimal degrees.

longitude

Required.

Location longitude in decimal degrees.

name

Required.

Name of the location.

address

Required.

Address of the location.

Objet de contenu multimédia

Consultez la section Obtenir l’ID d’un contenu multimédia pour savoir comment obtenir l’ID d’un objet « media ». Pour en savoir plus sur les types de contenus multimédias pris en charge pour l’API Cloud, consultez Types de contenus multimédias pris en charge.

NameDescription

id

string

Required when type is audio, document, image, sticker, or video and you are not using a link.


The media object ID. Do not use this field when message type is set to text.

link

string

Required when type is audio, document, image, sticker, or video and you are not using an uploaded media ID (i.e. you are hosting the media asset on your public server).

The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.


Do not use this field when message type is set to text.


Cloud API users only:


  • See Media HTTP Caching if you would like us to cache the media asset for future messages.
  • When we request the media asset from your server you must indicate the media's MIME type by including the Content-Type HTTP header. For example: Content-Type: video/mp4. See Supported Media Types for a list of supported media and their MIME types.

caption

string

Optional.


Media asset caption. Do not use with audio or sticker media.


On-Premises API users:

  • For v2.41.2 or newer, this field is is limited to 1024 characters.
  • Captions are currently not supported for document media.

filename

string

Optional.


Describes the filename for the specific document. Use only with document media.


The extension of the filename will specify what format the document is displayed as in WhatsApp.

provider

string

Optional. On-Premises API only.

This path is optionally used with a link when the HTTP/HTTPS link is not directly accessible and requires additional configurations like a bearer token. For information on configuring providers, see the Media Providers documentation.

Objet « template »

NomDescription

namespace

Obligatoire.

Espace de nom du modèle.


À partir de la v2.27.8, il doit s’agir de l’espace de nom associé au compte WhatsApp Business correspondant au numéro de téléphone associé au client actuel de l’API WhatsApp Business.

name

Obligatoire.

Nom du modèle.

language

Obligatoire.

Indique la langue dans laquelle le modèle peut s’afficher. Seule la politique en matière de langue deterministic est compatible avec les modèles de message multimédia. Consultez la section Langue pour en savoir plus.

components

Facultatif.

Tableau comportant les paramètres du message.

Les objets suivants sont imbriqués dans l’objet template :

Objet « button » et paramètres

NomDescription (Cliquez sur la flèche de la colonne de gauche pour connaître les options prises en charge.)

type

chaîne

Obligatoire.

Type de paramètre pour le bouton.

Options prises en charge

  • "payload"
  • "text"

payload

Obligatoire pour les boutons quick_reply.

Charge utile définie par le développeur ou la développeuse qui est renvoyée lorsqu’une personne clique sur le bouton, en plus du texte affiché sur le bouton.


Pour voir un exemple, consultez la section Rappel d’un clic sur un bouton de réponse rapide.

text

Obligatoire pour les boutons d’URL.

Suffixe fourni par le développeur ou la développeuse qui est ajouté à l’URL du préfixe prédéfinie dans le modèle.

Objet de composants

NomDescription

type

Obligatoire.

Décrit le type de component.
Valeurs :header, body, footer

parameters

Facultatif.

Tableau comportant le contenu du message.

Objet « currency »

NomDescription

fallback_value

Obligatoire.

Texte par défaut en cas d’échec de la localisation.

code

Obligatoire.

Code de devise conforme à la norme ISO 4217.

amount_1000

Obligatoire.

Montant multiplié par 1 000.

Objet « date_time »

NomDescription

fallback_value

Obligatoire.

Texte par défaut. Pour l’API Cloud, nous utilisons toujours cette valeur, et nous n’essayons pas de localiser la date et l’heure en utilisant d’autres champs facultatifs.

Objet « parameter »

NomDescription

type

chaîne

Obligatoire.

Décrit le type de paramètre. Valeurs acceptées :


  • currency
  • date_time
  • document
  • image
  • text
  • video

Pour les modèles basés sur du texte, les seuls types de paramètres pris en charge sont currency, date_time et text.

text

chaîne

Obligatoire quand type=text.

Texte du message. La limite de caractères varie selon le type de composant inclus, parmi les types ci-dessous.


Pour le type de composant header :

  • 60 caractères

Pour le type de composant body :

  • 1 024 caractères si d’autres types de composants sont inclus
  • 32 768 caractères si body est le seul type de composant inclus

currency

objet

Obligatoire quand type=currency.

Un objet currency.

date_time

objet

Obligatoire quand type=date_time.

Un objet date_time.

image

objet

Obligatoire quand type=image.

Un objet media de type image. Les sous-titres ne sont pas pris en charge lorsqu’ils sont utilisés dans un modèle avec un contenu multimédia.

document

objet

Obligatoire quand type=document.

Un objet media de type document. Seuls les documents PDF sont acceptés pour les modèles de message multimédia. Les sous-titres ne sont pas pris en charge lorsqu’ils sont utilisés dans un modèle avec un contenu multimédia.

video

objet

Obligatoire quand type=video.

Un objet media de type video. Les sous-titres ne sont pas pris en charge lorsqu’ils sont utilisés dans un modèle avec un contenu multimédia.

Objet de texte

NomDescription

body

chaîne

Obligatoire pour les messages de type texte.

Texte du message qui peut contenir des URL commençant par http:// ou https:// et des options de mise en page. Consultez cette page pour connaître les options de mise en page disponibles.


Si votre texte contient des URL et que vous souhaitez intégrer un aperçu de la page de destination dans vos messages (preview_url: true), assurez-vous que l’URL commence par http:// ou https:// (les URL en https:// sont recommandées). Vous devez préciser un nom d’hôte, car les adresses IP n’auront pas de correspondance.


Longueur maximale : 4 096 caractères

preview_url

opérateur booléen

Facultatif. API Cloud uniquement.

Utilisez true pour que les applications WhatsApp Messenger et WhatsApp Business tentent d’afficher un aperçu du lien de n’importe quelle URL dans la chaîne de texte body. Les URL doivent commencer par http:// ou https://. Si la chaîne de texte body contient plusieurs URL, seule la première URL aura un aperçu.


Si vous n’utilisez pas preview_url ou s’il n’est pas possible d’obtenir un aperçu, un lien cliquable sera généré à la place.


Dans l’API On-Premises, utilisez plutôt preview_url dans la charge utile du message de premier niveau. Consultez la section Paramètres.

Objet « reaction »

NomDescription

message_id

chaîne

Obligatoire.

ID WhatsApp (WAMID) du message sur lequel la réaction doit apparaître. La réaction ne sera pas envoyée dans les conditions suivantes :


  • Le message date de plus de 30 jours
  • Le message est un message de réaction
  • Le message a été supprimé

Si l’ID correspond à un message qui a été supprimé, le message ne sera pas distribué.

emoji

chaîne

Obligatoire.

Emoji à afficher sur le message.


  • Tous les emojis pris en charge par Android et iOS sont acceptés.
  • Les emojis 3D sont pris en charge.
  • Si vous utilisez des valeurs Unicode, vous devez utiliser Java ou JavaScript Escape.
  • Un message de réaction ne peut contenir qu’un seul emoji
  • Utilisez une chaîne vide pour supprimer un emoji envoyé précédemment.

Vue d’ensemble

Guides

Consultez ces guides pour connaître les autres cas d’utilisation du point de terminaison /messages pour envoyer des messages :

Exemples

Textos

curl -X  POST \
'https://graph.facebook.com/v21.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": "text",
      "text": { // the text object
        "preview_url": false,
        "body": "MESSAGE_CONTENT"
        }
    }'

Messages de réaction

curl -X  POST \
 'https://graph.facebook.com/v21.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": "reaction",
  "reaction": {
    "message_id": "wamid.HBgLM...",
    "emoji": "\uD83D\uDE00"
  }
}'

Messages multimédias

curl -X  POST \
 'https://graph.facebook.com/v21.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": "image",
  "image": {
    "id" : "MEDIA-OBJECT-ID"
  }
}'

Messages de localisation

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "location",
  "location": {
    "longitude": LONG_NUMBER,
    "latitude": LAT_NUMBER,
    "name": LOCATION_NAME,
    "address": LOCATION_ADDRESS
  }
}'

Messages de type contact

curl -X  POST \
 'https://graph.facebook.com/v21.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"
        }]
    }]
}'

Messages interactifs

Messages concernant un seul produit

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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": "product",
     "body": {
       "text": "optional body text"
     },
     "footer": {
       "text": "optional footer text"
     },
     "action": {
       "catalog_id": "CATALOG_ID",
       "product_retailer_id": "ID_TEST_ITEM_1"
     }
   }
 }'

Messages concernant plusieurs produits

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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": "product_list",
     "header":{
       "type": "text",
       "text": "header-content"
     },
     "body": {
       "text": "body-content"
     },
     "footer": {
       "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": "section-title",
           "product_items": [
             { "product_retailer_id": "product-SKU-in-catalog" },
             { "product_retailer_id": "product-SKU-in-catalog" },
             ...
           ]
         }
       ]
     }
   }
 }

Messages de catalogue

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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" : "catalog_message",
    "body" : {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "catalog_message",
      "parameters": { 
        "thumbnail_product_retailer_id": "<Product-retailer-id>"
      }
    }
  }
}'

Messages Flows

curl -X  POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/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": "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": {
            "user_name": "name",
            "user_age": 25
          }
        }
      }
    }
  }
}'
  

Messages de type liste

curl -X  POST \
 'https://graph.facebook.com/v21.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": "list",
    "header": {
      "type": "text",
      "text": "HEADER_TEXT"
    },
    "body": {
      "text": "BODY_TEXT"
    },
    "footer": {
      "text": "FOOTER_TEXT"
    },
    "action": {
      "button": "BUTTON_TEXT",
      "sections": [
        {
          "title": "SECTION_1_TITLE",
          "rows": [
            {
              "id": "SECTION_1_ROW_1_ID",
              "title": "SECTION_1_ROW_1_TITLE",
              "description": "SECTION_1_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_1_ROW_2_ID",
              "title": "SECTION_1_ROW_2_TITLE",
              "description": "SECTION_1_ROW_2_DESCRIPTION"
            }
          ]
        },
        {
          "title": "SECTION_2_TITLE",
          "rows": [
            {
              "id": "SECTION_2_ROW_1_ID",
              "title": "SECTION_2_ROW_1_TITLE",
              "description": "SECTION_2_ROW_1_DESCRIPTION"
            },
            {
              "id": "SECTION_2_ROW_2_ID",
              "title": "SECTION_2_ROW_2_TITLE",
              "description": "SECTION_2_ROW_2_DESCRIPTION"
            }
          ]
        }
      ]
    }
  }
}'

Bouton de réponse

curl -X  POST \
 'https://graph.facebook.com/v21.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": "button",
    "body": {
      "text": "BUTTON_TEXT"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_1",
            "title": "BUTTON_TITLE_1"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "UNIQUE_BUTTON_ID_2",
            "title": "BUTTON_TITLE_2"
          }
        }
      ]
    }
  }
}'

Messages basés sur des modèles

curl -X  POST \
 'https://graph.facebook.com/v21.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": "template",
  "template": {
    "name": "TEMPLATE_NAME",
    "language": {
      "code": "LANGUAGE_AND_LOCALE_CODE"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "http(s)://URL"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "TEXT_STRING"
          },
          {
            "type": "currency",
            "currency": {
              "fallback_value": "VALUE",
              "code": "USD",
              "amount_1000": NUMBER
            }
          },
          {
            "type": "date_time",
            "date_time": {
              "fallback_value": "MONTH DAY, YEAR"
            }
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "0",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "1",
        "parameters": [
          {
            "type": "payload",
            "payload": "PAYLOAD"
          }
        ]
      }
    ]
  }
}'

Répondre au message

curl -X POST \
 'https://graph.facebook.com/v21.0/FROM_PHONE_NUMBER/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "context": {
     "message_id": "MESSAGE_ID"
  },
  "to": "PHONE_NUMBER",
  "type": "text",
  "text": {
    "preview_url": false,
    "body": "your-text-message-content"
  }
}’

Réponse en cas de réussite

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

Applies to businesses in Brazil, Colombia, and Singapore, starting September 12, 2023. Applies to all businesses starting October 12, 2023.

Messages will have one of the following statuses which will be returned in each of the messages objects

  • "message_status":"accepted" : means the message was sent to the intended recipient
  • "message_status":"held_for_quality_assessment": means the message send was delayed until quality can be validated and it will either be sent or dropped at this point

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