Messages

/v1/messages

Utilisez le nœud 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.

Pour plus d’informations sur les types de messages spécifiques que vous pouvez envoyer, consultez les guides suivants : Textos, Messages multimédias, Messages de contact et de lieu, Messages interactifs, Modèles de message, Modèles de message multimédia, et Modèles de message interactif.

Avant de commencer

Réalisez les actions suivantes :

À partir de la version 2.39, vous n’avez pas besoin d’appeler le nœud contacts avant d’envoyer un message.

Contraintes

  • Le nœud prend en charge les types de messages suivants : texto, modèles de message, images, documents et audio.
  • Un texto peut contenir jusqu’à 4 096 caractères.

Création

Pour envoyer un message, quel que soit le type, vous devez effectuer un appel POST au nœud /messages. Toutefois, le contenu du corps des messages JSON diffère pour chaque type de message (texte, image, etc.).

Paramètres

Les paramètres principaux suivants sont utilisés dans les requêtes POST /messages :

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.

Objet de texte

NomDescription

body

Obligatoire.

Contient le texte du message, qui peut inclure des URL et être mis en forme.

Objet de contenu multimédia

Pour l’API On-Premises, l’ID d’objet multimédia est renvoyé lorsque le contenu multimédia est correctement importé dans le client WhatsApp Business sur site/référence avec le point de terminaison media.

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 de contacts

Dans contacts, vous pouvez imbriquer les objets suivants : addresses, emails, name, org, phone et urls. Les objets au pluriel doivent être empaquetés dans un tableau comme illustré dans l’exemple ci-dessous.

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.

Exemple d’un objet contacts avec des objets au pluriel imbriqués :

"contacts": [
    {
        "addresses": [
            {
                "city": "city name",
                "country": "country name",
                "country_code": "code",
                "state": "Contact's State",
                "street": "Contact's Street",
                "type": "Contact's Address Type",
                "zip": "Contact's Zip Code"
            }
        ],
        "birthday": "birthday",
        "emails": [
            {
                "email": "email",
                "type": "HOME"
            },
            {
                "email": "email",
                "type": "WORK"
            }
        ],
        "name": {
            "first_name": "first name value",
            "formatted_name": "formatted name value",
            "last_name": "last name value",
            "suffix": "suffix value"
        },
        "org": {
            "company": "company name",
            "department": "dep name",
            "title": "title"
        },
        "phones": [
            {
                "phone": "Phone number",
                "wa-id": "WA-ID value",
                "type": "MAIN"
            },
            {
                "phone": "Phone number",
                "type": "HOME"
            },
            {
                "phone": "Phone number",
                "type": "WORK"
            }
        ],
        "urls": [{
            "url": "some url",
            "type": "WORK"
        }]
    }
]

Objet de lieu

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 modèle

Dans template, vous pouvez imbriquer les objets components et language.

Depuis la v2.27.8, le namespace d’un modèle doit être l’espace de nom associé au WABA qui possède le numéro de téléphone dans le client sur site WhatsApp Business actif. À défaut, l’envoi du message échoue.

De plus, à partir de la v2.41, namespace sera un champ facultatif.

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.

Objet de composants

Dans components, vous pouvez imbriquer l’objet parameters. Par ailleurs, vous pouvez définir type sur button.

NomDescription

type

Obligatoire.

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

parameters

Facultatif.

Tableau comportant le contenu du message.

Objet de paramètre

NomDescription

type

Obligatoire.

Décrit le type de parameter.
Valeurs :text, currency, date_time, image, document, video


Les types de médias (image, document et video) respectent le même format que ceux utilisés dans les messages multimédias standard. Reportez-vous à la Documentation sur les médias pour en savoir plus. Actuellement, seuls les documents PDF sont acceptés pour les modèles de message multimédia.


Pour en savoir plus sur les paramètres currency et date_time, consultez la section Paramètres localisables. Les paramètres currency et date_time pour les messages de template utilisent fallback_value au lieu de la valeur default. Reportez-vous à l’exemple de demande ci-dessus.

Type de bouton

Dans l’objet components, vous pouvez définir type sur button. Voici les paramètres du bouton :

NomDescription

sub_type

Obligatoire.

Type de bouton créé.
Valeurs :quick_reply, url, copy_code (available from 2.49 and onwards)

index

Obligatoire.

Indice de position du bouton. Vous pouvez avoir jusqu’à dix boutons en utilisant les valeurs d’indice 0-9.

parameters

Obligatoire.

Paramètres du bouton, qui sont définis au moment de la création dans votre Business Manager. Indiquez les paramètres suivants :

  • type (requis) : indique le type de paramètre pour le bouton. Les valeurs prises en charge sont payload, text et coupon_code.
  • payload (requis pour les boutons quick_reply) : charge utile définie par l’équipe de développement qui est renvoyée lorsque le bouton est cliqué, en plus du texte affiché sur le bouton.
  • text (requis pour les boutons url) : suffixe fourni par l’équipe de développement qui est ajouté à un bouton URL dynamique précédemment créé.
  • coupon_code (requis pour les boutons copy_code) (disponible à partir de la version 2.49) : code de coupon fourni par l’équipe de développement qui est copié lorsque le bouton Copier le code est cliqué.

Exemple du type button avec le sous-type quick_reply :

 {
    "type": "button",
    "sub_type": "quick_reply",
    "index": 0,
    "parameters": 
     [{
    	"type": "payload",
    	"payload": "Yes-Button-Payload"
     }]
 } 

Exemple du type button avec le sous-type copy_code :

    
 { 
    "type": "button", 
    "sub_type": "copy_code", 
    "index": 0, 
    "parameters": 
    [{ 
     "type": "coupon_code", 
     "coupon_code": "DISCOUNT20" 
    }] 
 }

Objet Hsm

L’objet hsm a été abandonné avec la version v2.39 de WhatsApp Business (sur site/référence). Vous pouvez utiliser l’objet template à la place.

Nom Description

namespace

Obligatoire.

Espace de nom à utiliser. À partir de la v2.2.7, si l’espace de nom ne correspond pas à element_name, le message n’est pas envoyé.

element_name

Obligatoire.

Nom de l’élément qui indique le modèle à utiliser dans l’espace de nom. À partir de la v2.2.7, si element_name ne correspond pas à l’espace de nom, le message n’est pas envoyé.

language

Obligatoire.

Permet de spécifier une langue déterminée. Consultez la section Langue pour en savoir plus.


Ce champ était utilisé pour une option de fallback, mais cette option a été abandonnée dans la v2.27.8.

localizable_params

Obligatoire.

Ensemble de valeurs à appliquer aux variables du modèle. Pour plus d’informations, consultez la section Paramètres localisables.

Objet interactif

The interactive object generally contains 4 main components: header, body, footer, and action. Additionally, some of those components can contain one or more different objects:

  • Inside header, you can nest media objects.
  • Inside action, you can nest section and button objects.
NameDescription

type

string

Required.

The type of interactive message you want to send. Supported values:

  • list: Use it for List Messages.
  • button: Use it for Reply Buttons.
  • product: Use it for Single-Product Messages.
  • product_list: Use it for Multi-Product Messages.
  • catalog_message: Use it for Catalog Messages.
  • flow: Use it for Flows Messages.

header

object

Required for type product_list. Optional for other types.

Header content displayed on top of a message. You cannot set a header if your interactive object is of product type.


The header object contains the following fields:

documentobjectRequired if type is set to document. Contains the media object with the document.

imageobjectRequired if type is set to image. Contains the media object with the image.

videoobjectRequired if type is set to video. Contains the media object with the video.

textstringRequired if type is set to text. Text for the header. Formatting allows emojis, but not markdown. Maximum length: 60 characters.

typestringRequired. The header type you would like to use. Supported values are:

text – for List Messages, Reply Buttons, and Multi-Product Messages.

video – for Reply Buttons.

image – for Reply Buttons.

document – for Reply Buttons.

body

object

Optional for type product. Required for other message types.

An object with the body of the message.


The body object contains the following field:

textstringRequired if body is present. The content of the message. Emojis and markdown are supported. Maximum length: 1024 characters.

footer

object

Optional.

An object with the footer of the message.


The footer object contains the following field:

textstringRequired if footer is present. The footer content. Emojis, markdown, and links are supported. Maximum length: 60 characters.

action

object

Required.

An action object with what you want the user to perform after reading the message. See action object for full information.

Objet d’action

NameDescription

button

string

Required for List Messages.

Button content. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters.

buttons

object

Required for Reply Button Messages.

A button object. The object can contain the following parameters:

type – The only supported option is reply for Reply Button Messages.

title – Button title. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 characters.

id – Unique identifier for your button. This ID is returned in the webhook when the button is clicked by the user. Maximum length: 256 characters.


Les espaces de début et de fin ne sont pas autorisés lors de la définition d’un ID.

sections

array of objects

Required for List Messages and Multi-Product Messages.

Array of section objects. There is a minimum of 1 and maximum of 10. See section object.

catalog_id

string

Required for Single-Product Messages and Multi-Product Messages.

Unique identifier of the Facebook catalog linked to your WhatsApp Business Account. This ID can be retrieved via Commerce Manager.

product_retailer_id

string

Required for Single-Product Messages and Multi-Product Messages.

Unique identifier of the product in a catalog. Maximum 100 characters for both Single-Product and Multi-Product messages.


To get this ID, go to Commerce Manager, select your Facebook Business account, and you will see a list of shops connected to your account. Click the shop you want to use. On the left-side panel, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name.

mode

string

Optional for Flows Messages.

The current mode of the Flow, either draft or published.


Default: published

flow_message_version

string

Required for Flows Messages.

Must be 3.

flow_token

string

Required for Flows Messages.

A token that is generated by the business to serve as an identifier.

flow_id

string

Required for Flows Messages.

Unique identifier of the Flow provided by WhatsApp.

flow_cta

string

Required for Flows Messages.

Text on the CTA button, eg. "Signup".


Maximum length: 20 characters (no emoji).

flow_action

string

Optional for Flows Messages.

navigate or data_exchange. Use navigate to predefine the first screen as part of the message. Use data_exchange for advanced use-cases where the first screen is provided by your endpoint.


Default: navigate

flow_action_payload

object

Optional for Flows Messages.

Required only if flow_action is navigate. The object can contain the following parameters:

screenstringRequired. The id of the first screen of the Flow.

dataobjectOptional. The input data for the first screen of the Flow. Must be a non-empty object.

Section Object

NameDescription

title

string

Required if the message has more than one section.

Title of the section. Maximum length: 24 characters.

rows

array of objects

Required for List Messages.

Contains a list of row objects. Limited to 10 rows across all sections.


Each row object contains the following fields:

titlestringRequired. Maximum length: 24 characters.

IDstringRequired. Maximum length: 200 characters.

descriptionstringOptional. Maximum length: 72 characters.

product_items

array of objects

Required for Multi-Product Messages.

Array of product objects. There is a minimum of 1 product per section and a maximum of 30 products across all sections.


Each product object contains the following field:

product_retailer_idstringRequired for Multi-Product Messages. Unique identifier of the product in a catalog. To get this ID, go to Commerce Manager, select your account and the shop you want to use. Then, click Catalog > Items, and find the item you want to mention. The ID for that item is displayed under the item's name.

Exemples

Messages vocaux :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "audio",
  "audio": {
      "id": "your-media-id",
  }
}

Messages incluant un document, en utilisant filename :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "document",
  "document": {
      "id": "your-media-id",
      "filename": "your-document-filename"
  }
}

Messages incluant un document, en utilisant link :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "document",
  "document": {
      "link": "http(s)://the-url"
      "provider": {
          "name" : "provider-name"
      }     
    }
}

Messages vidéo, en utilisant link :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "video",  
  "video": {
      "link": "http(s)://the-url"
      "provider": {
          "name" : "provider-name"
      }
    }
  }
}

Textos :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "text",
  "text": {
      "body": "your-message-content"
  }
}

Messages interactifs (listes) :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "interactive",
  "interactive":{
    "type": "list",
    "header": {
      "type": "text",
      "text": "your-header-content-here"
    },
    "body": {
      "text": "your-text-message-content-here"
    },
    "footer": {
      "text": "your-footer-content-here"
    },
    "action": {
      "button": "cta-button-content-here",
      "sections":[
        {
          "title":"your-section-title-content-here",
          "rows": [
            {
              "id":"unique-row-identifier-here",
              "title": "row-title-content-here",
              "description": "row-description-content-here",           
            }
          ]
        },
        {
          "title":"your-section-title-content-here",
          "rows": [
            {
              "id":"unique-row-identifier-here",
              "title": "row-title-content-here",
              "description": "row-description-content-here",           
            }
          ]
        },
        ...
      ]
    }
  }

}

Messages interactifs (boutons de réponse) :

POST /v1/messages
{
  "recipient_type": "individual",
  "to": "whatsapp-id",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": { # optional
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }, # end header
    "body": {
      "text": "your-text-body-content"
    },
    "footer": { # optional
      "text": "your-text-footer-content"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    } # end action   
  } # end interactive

}

Messages interactifs (messages concernant un seul ou plusieurs produits) :

{ 
  "recipient_type": "individual",
  "to" : "{{Recipient-WA-ID}}",
  "type": "interactive",
  "interactive": {
    "type": "product",
    "body": {
      "text": "body text"
    },
    "footer": {
      "text": "footer text"
    },
    "action": {
      "
      
      _id": "catalog-ID",
      "product_retailer_id": "product-ID"
    }
  }
}

Messages interactifs (messages concernant plusieurs produits) :

{ 
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive",
  "interactive": 
    {
    "type": "product_list",
    "Header":{
       "type": "text",
        "text": "text-header-content"
     },
     "body":{
        "text": "text-body-content"
      },
     "footer":{
        "text":"text-footer-content"
     },
     "action":{
        "catalog_id":"catalog-id",
        "sections": [
             {
             "title": "section-title",             
             "product_items": [
                  { "product_retailer_id": "product-SKU-in-catalog" },
                  { "product_retailer_id": "product-SKU-in-catalog" },
                            ...
              ]},
              {
              "title": "the-section-title",
              "product_items": [
                 { "product_retailer_id": "product-SKU-in-catalog" }
                           ...
              ]},
               ...
       ]
     },  
    }
}

Messages interactifs (messages de catalogue) :

{ 
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive",
  "interactive": 
    {
    "type": "catalog_message",
     "body":{
        "text": "text-body-content"
      },
     "footer":{
        "text":"text-footer-content"
     },
     "action":{
        "name": "catalog_message",
      	"parameters":{ 
      	  "thumbnail_product_retailer_id": "product-SKU-in-catalog"
      	}
     },  
    }
}

Messages interactifs (flux) :

{
  "recipient_type": "individual",
  "to": "{{Recipient-WA-ID}}",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Flow message header"
    },
    "body": {
      "text": "Flow message body"
    },
    "footer": {
      "text": "Flow message footer"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s",
        "flow_id": "<FLOW_ID>",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_ID>",
          "data": { # optional
            "user_name": "name",
            "user_age": 25
          }
        }
      }
    }
  }
}

Voici un exemple de payload dans une réponse. Les métadonnées et les objets d’erreur n’apparaissent pas dans un souci de concision.

{
  "messages": [{ 
    "id": "message-id" 
  }]    
}

Si la requête a bien été envoyée, vous recevrez une réponse avec un ID de message. Si la requête renvoie une section errors, vérifiez le message de départ et corrigez les erreurs avant de la renvoyer. Pour plus d’informations au sujet des erreurs, consultez les sections Codes d’erreur du client WhatsApp Business sur site/référence et Codes d’état HTTP.

S’applique aux entreprises au Brésil, en Colombie et à Singapour, à partir du 12 septembre 2023. S’applique à toutes les entreprises à partir du 12 octobre 2023.

Si la requête est retenue pour une évaluation de la qualité, la réponse contiendra une propriété message_status avec un message indiquant que le message n’a pas été envoyé immédiatement et qu’il sera envoyé ou abandonné après la validation de la qualité. Cette propriété n’existera que si le message est retenu.

    {
      "messages": [{ 
        "id": "message-id",
        "message_status": "Message has been held because quality assessment is pending",
      }]    
    }
    

Formatage dans les textos

WhatsApp permet un certain formatage dans les messages. Pour formater tout ou partie d’un message, utilisez ces symboles de formatage :

FormatageSymboleExemple

Gras

Astérisque (*)

Votre total se monte à *10,50 $*.

Italique

Tiret du bas (_)

Bienvenue sur _WhatsApp_!

Biffure

Tilde (~)

C’est pour le ~mieux~ !

Code

Trois backticks(```)

```print 'Hello World';```

Performance

Dans ce contexte, la performance représente le nombre de messages pouvant être envoyés dans une seconde donnée à l’aide du client WhatsApp Business sur site/référence. La performance maximale réalisable dépend de plusieurs facteurs, le plus important étant le choix de la configuration de votre client et si le ou la destinataire du message est un·e nouvel·le utilisateur·ice ou un·e utilisateur·ice existant·e. La configuration des sessions de chiffrement prend un peu plus de temps lorsqu’un message est envoyé à un·e nouvel·le utilisateur·ice.

Configuration du clientMessages acceptés par seconde

Partition unique

70

Plusieurs partitions (32 partitions)

250

Questions/réponses

Remarque : n’envoyez pas le même message plusieurs fois au même destinataire via l’API WhatsApp Business.

Plusieurs raisons peuvent expliquer que le taux de distribution ne soit pas de 100 %. Parmi les plus fréquentes, le fait que les utilisateur·ices accèdent au réseau de manière sporadique, ou qu’ils ou elles soient inactifs ou inactives pendant un certain temps. Autre raison : pour créer une expérience d’utilisation de qualité.

Les messages pouvant être distribués avec WhatsApp auront un taux de distribution très élevé. Cependant, un message peut ne pas être distribué pour de nombreuses raisons. Vous aurez accès au statut exact d’un message en surveillant vos rappels. Cela diffère de l’envoi de messages par texto, par exemple, car vous n’avez pas accès au statut final de distribution, et le fait de renvoyer le message peut produire un résultat différent.

Les messages peuvent ne pas être distribués parce que le téléphone ou la batterie de l’utilisateur·ice ne fonctionne pas, ou parce qu’il ou elle a désactivé sa carte SIM suite à la perte de son téléphone. Il est possible que le client professionnel ait des difficultés à se connecter au réseau. Il est également possible que les rappels (Webhooks) ne soient pas distribués. Vous pouvez surveiller ces situations en utilisant le nœud health. Vous pouvez activer les rappels d’accusé de réception du serveur pour savoir si le message a atteint le cloud du serveur WhatsApp.

Si un·e utilisateur·ice se reconnecte au réseau, tous les messages que vous avez envoyés lui seront distribués. Recevoir plusieurs fois le même message peut créer une gêne pour les utilisateur·ices. Ils ou elles seront alors davantage susceptibles de vous bloquer ou de se plaindre et vous risquez plus d’être banni.

Si vous envoyez un message et recevez un ID de message de l’API, vous avez fait le nécessaire pour envoyer ce message. Ne renvoyez pas le même contenu au même destinataire.

Si vous constatez de faibles taux de distribution sur une période prolongée, ouvrez un ticket avec l’Assistance directe.

Lorsque vous envoyez un message, dès que vous recevez un identifiant de message, cela signifie que la demande de message a été enregistrée dans la base de données. Le client de l’API WhatsApp Business continuera d’essayer d’envoyer ce message jusqu’à ce que le serveur WhatsApp en accuse réception. Ce processus n’est pas limité dans le temps. Le serveur WhatsApp tentera ensuite de distribuer ce message au téléphone de l’utilisateur. Si le téléphone de l’utilisateur n’est pas en ligne, le message sera stocké pendant 30 jours avant d’être abandonné par le serveur WhatsApp.

Absolument. WhatsApp vous permet de mettre en forme le texte sélectionné dans vos messages, avec par exemple des caractères en gras, en italique, barrés ou en chasse.

Pour le moment, il n’existe aucun moyen de savoir combien d’utilisateurs ou quels utilisateurs ont bloqué votre entreprise. Le meilleur indicateur serait d’écouter les rappels de statut et si vous ne recevez pas le statut delivered, soit l’utilisateur a bloqué votre entreprise soit il n’est pas connecté au réseau. Consultez la documentation Webhook pour plus d’informations.

Si un utilisateur a bloqué votre entreprise, l’API Contacts continuera d’indiquer que ce numéro de téléphone est un utilisateur WhatsApp valide. Cependant, lorsque vous enverrez le message, il ne sera pas distribué. S’il s’agit d’un message payant, vous ne serez pas facturé.

Non, l’ordre dans lequel les messages arrivent n’est pas nécessairement le même que lors de l’envoi. Si l’ordre est essentiel à votre cas d’utilisation, l’approche suggérée est d’écouter le rappel distribué du premier message avant d’envoyer le deuxième message.

Lorsque vous utilisez le nœud messages, vous devez définir l’en-tête Content-Type sur application/json pour le client de l’API WhatsApp Business afin d’analyser correctement le corps du message. Un en-tête Authorization doit également être défini et doit contenir un token d’accès non expiré. Consultez la documentation Connexion et authentification pour plus d’informations sur la façon d’obtenir votre token et savoir quand il expire.

Dans certains cas, il se peut que vous ayez besoin de plus de temps pour répondre à une demande client et que vous ayez besoin de plus de 24 heures. Nous vous recommandons de créer des modèles de message pour :

  • fournir une réponse à l’utilisateur ;
  • inciter l’utilisateur à répondre afin d’activer la fenêtre du service client.

Dans les deux cas, veuillez vous assurer de fournir autant de contexte que possible dans le modèle de message. Par exemple :

  • « Bonjour {{1}}, concernant le problème que vous nous avez signalé précédemment, nous avons le regret de vous informer que {{2}}. Nous nous excusons pour la gêne occasionnée. »
  • « Nous disposons de nouvelles informations concernant votre demande. Veuillez répondre à ce message si votre problème persiste.