L’API On-Premises ne sera bientôt plus disponible. Consultez notre document Abandon progressif de l’API On-Premises pour de plus amples détails, mais aussi pour connaître la procédure de migration vers notre API Cloud nouvelle génération.

Envoi de messages interactifs

Ce guide vous apprend à envoyer chaque type de message interactif. Les messages interactifs offrent aux utilisateur·ices un moyen simple de trouver et de sélectionner ce qu’ils ou elles attendent de votre entreprise dans WhatsApp. Lors de nos tests, les chatbots employant des fonctionnalités de messages interactifs réalisaient davantage de conversations et obtenaient un taux de réponse significativement plus élevé que les chatbots purement textuels.

Types de messages interactifs :

  • Messages liste : ces messages proposent un menu comportant jusqu’à 10 options. Ils permettent de simplifier et d’harmoniser les choix des utilisateur·ices au moment d’interagir avec une entreprise.
  • Messages bouton de réponse : ces messages proposent jusqu’à trois options, chacune sous forme de bouton. Ils permettent aux utilisateur·ices de choisir plus rapidement leur réponse lors d’une interaction avec une entreprise. Les boutons de réponse offrent une expérience similaire à celle des modèles interactifs contenant des boutons.
  • Messages à un seul produit : messages contenant un seul article issu de l’inventaire de l’entreprise. Pour plus d’informations, consultez la section Partager des produits avec la clientèle.
  • Messages à plusieurs produits : messages contenant une sélection de 30 articles au maximum issus de l’inventaire de l’entreprise. Pour plus d’informations, consultez la section Partager des produits avec la clientèle.
  • Messages de demande de localisation : messages qui demandent la localisation de l’utilisateur·ice.
  • Messages Flows : messages pour les interactions structurées. Voir Messages Flows pour plus d'informations.

Spécifications des messages interactifs

  • Les messages interactifs peuvent être associés dans le même flux.
  • Les utilisateur·ices ne peuvent pas sélectionner plusieurs options en même temps à partir d’un message liste ou bouton, mais ils ou elles peuvent revenir en arrière et rouvrir un message précédent.
  • Les messages liste ou bouton de réponse ne peuvent pas servir de notifications. Actuellement, ils ne peuvent être envoyés que dans les 24 heures suivant le dernier message envoyé par l’utilisateur·ice. Si vous essayez d’envoyer un message en dehors de cette fenêtre de 24 heures, vous recevez un message d’erreur.
  • Plateformes prises en charge : iOS, Android et Web (les messages Flows ne sont pas pris en charge sur le Web).

Découvrez les différences entre un texto et un message interactif :


Voici un exemple de la façon dont les messages liste et les boutons de réponse peuvent être combinés dans le même flux :

Une erreur s’est produite
Nous rencontrons des difficultés pour lire cette vidéo.

Présentation

Utilité de cette fonctionnalité

Compréhension par l’utilisateur·ice

Comparés aux listes purement textuelles, les messages interactifs offrent un format plus simple et plus cohérent qui permet de rechercher et de sélectionner ce que l’on souhaite d’une entreprise. Pendant les tests, les utilisateur·ices montraient des niveaux de compréhension plus élevés en interagissant avec ces fonctionnalités.

Des résultats pour l’entreprise

Lors de nos tests, les chatbots employant des fonctionnalités de messages interactifs réalisaient davantage de conversations et obtenaient un taux de réponse significativement plus élevé que les chatbots purement textuels.

Personnalisation

Misez sur un remplissage dynamique en temps réel pour personnaliser la solution selon la personne ou la situation. Par exemple, vous pouvez afficher un message liste des créneaux horaires disponibles pour la prise de rendez-vous, ou utiliser des boutons de réponse pour afficher les adresses de livraison précédentes.

Aucun modèle

Les messages interactifs ne nécessitent aucun modèle ni aucune approbation préalable.

Quand utiliser cette fonctionnalité ?

Les messages liste sont idéaux pour présenter plusieurs options, par exemple :

  • Un service clientèle ou un centre d’aide
  • Un menu à emporter
  • Un groupe de magasins ou de sites à proximité
  • Des créneaux de réservation disponibles
  • Une commande effectuée récemment pour pouvoir la renouveler

Les boutons de réponse sont quant à eux idéaux pour envoyer des réponses rapides à partir d’un ensemble limité d’options, par exemple :

  • Une recharge de crédit
  • La modification d’informations personnelles
  • La possibilité de recommander une commande précédente
  • Une demande de retour
  • L’ajout d’extras à une commande
  • La sélection d’un moyen de paiement

Les boutons de réponse sont particulièrement utiles dans des cas personnalisés pour lesquels une réponse générique ne convient pas.

Les messages Flows sont les plus adaptés pour la communication structurée sur un ou plusieurs écrans ; ils permettent par exemple d’effectuer les actions suivantes :

  • Prendre des rendez-vous
  • Naviguer entre les produits
  • Recueillir les avis de vos client·es
  • Obtenir de nouveaux prospects commerciaux

Les messages Flows permettent aux entreprises d'offrir une expérience d’utilisation plus riche et plus attrayante, qui peut aider les client·es à effectuer des tâches plus rapidement sur WhatsApp sans avoir nécessairement besoin de passer à une autre application ou de visiter un site Web.

Fonctionnement

Pour configurer des messages interactifs dans l’API, vous devez définir le type de message sur interactive et ajouter l’objet interactive. En général, ces messages contiennent quatre parties principales : header, body, footer et action.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive" 
  "interactive":{
    "type": "list" | "button" | ...,
    "header": {},
    "body": {},
    "footer": {},
    "action": {}
  }
}
Pour les messages liste, voici comment s’articulent ces différentes parties :

Pour les messages bouton de réponse, voici au contraire comment elles s’articulent :

Pour plus d’informations, lisez ce qui suit sur l’envoi de ces messages.

Démarrer

Avant de pouvoir envoyer chaque message, vous devez obtenir l’ID WhatsApp du ou de la destinataire avec un appel au nœud /contacts.

Nous vous recommandons de configurer vos webhooks pour recevoir le statut des messages et des notifications de messages entrants. De cette façon, vous pourrez suivre si votre message a été envoyé et les réponses des utilisateur·ices. Pour plus d’informations, consultez la documentation sur les webhooks.

Étape 1 : assembler l’objet interactive

Messages de type liste

Pour envoyer un message liste, vous devez assembler un objet interactive de type list avec les composants suivants :

ObjetDescription

header

Optionnel.

Si vous décidez de l’inclure, vous devez définir le type de l’en-tête sur texte et ajouter un champ texte avec le contenu souhaité. 60 caractères maximum.


Voir tous les champs header disponibles.

body

Obligatoire.

Corps du message. 1 024 caractères maximum.


Voir tous les champs body disponibles.

footer

Facultatif.

Pied de page du message.


Voir tous les champs footer disponibles.

action

Obligatoire.

Dans l’action, vous devez imbriquer :

  • Un champ button avec le contenu du bouton, dans la limite de 20 caractères
  • Au moins un objet section (10 au maximum) avec un maximum de 24 caractères concernant le title pour section

Dans section, vous devez ajouter au moins un objet rows. Maximum 24 caractères pour le title d’une ligne, et maximum 72 caractères pour la description d’une ligne.


Voir tous les champs action disponibles.

Voir tous les champs section disponibles.

Vers la fin du traitement, l’objet interactive doit ressembler à ce qui suit :

"interactive":{
  "type": "list",
  "header": {
    "type": "text",
    "text": "your-header-content"
  },
  "body": {
    "text": "your-text-message-content"
  },
  "footer": {
    "text": "your-footer-content"
  },
  "action": {
    "button": "cta-button-content",
    "sections":[
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      ...
    ]
  }
}

Boutons de réponse

Pour envoyer un message bouton de réponse, vous devez assembler un objet interactive de type button avec les composants suivants :

ObjetDescription

header

Facultatif.

Pour les messages interactifs button, vous pouvez utiliser les types d’en-têtes suivants : text, video, image ou document.


Une fois que vous avez sélectionné votre type, ajoutez les objets/champs correspondants avec plus d’informations :

  • Pour les types video, image et document : ajoutez un objet media.
  • Pour le type text : ajoutez un champ text avec le contenu souhaité.

Exemple :

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

Voir tous les champs header disponibles.

body

Obligatoire.

Voir tous les champs body disponibles.

footer

Facultatif.

Voir tous les champs footer disponibles.

action

Obligatoire.

Vous devez ajouter au moins un button et inclure type, title et id pour les boutons. Vous ne pouvez pas ajouter plus de trois boutons. Maximum 20 caractères pour title.

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


Exemple :

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

Voir tous les champs action disponibles.

Vers la fin du traitement, l’objet interactive doit ressembler à ce qui suit :

"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 de demande de localisation

Les messages de demande de localisation contiennent un corps de texte et un bouton Envoyer la localisation sur lequel les utilisateur·ices peuvent appuyer. Le fait d’appuyer sur ce bouton affiche un écran de partage dont la personne peut ensuite se servir pour partager sa localisation.

Pour envoyer un message de demande de localisation, commencez par assembler un objet interactive et le texte à afficher dans le message :

{
  "type": "location_request_message",
  "body": {
    "type": "text",
    "text": "<TEXT>"
  },
  "action": {
    "name": "send_location" 
  }
}
PropriétéDescription

type

Définissez-le sur location_request_message.

body.type

Définissez-le sur text.

body.text

Définissez-le sur le texte à afficher au-dessus du bouton Envoyer la localisation.

action.name

Définissez-le sur send_location.

Messages Flows

Les messages Flows comportent un bouton call-to-action sur lequel les utilisateur·ices peuvent appuyer. Ce bouton permet d’afficher son Flow personnalisé.

Pour envoyer un message Flows, vous devez assembler un objet interactive de type flow. Cliquez ici pour obtenir tous les détails.

Étape 2 : ajouter des paramètres de message communs

Maintenant que vous avez défini l’objet interactif, ajoutez les autres paramètres entrant dans la composition d’un message : recipient_type, to et type. N’oubliez pas de définir le type sur interactive.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id", // WhatsApp ID of your recipient
  "type": "interactive",
  "interactive":{
    // Your interactive object  
   }
  }

Pour voir les paramètres utilisés dans tous les types de messages, cliquez ici.

Étape 3 : envoyer un appel POST à /messages

Envoyez un appel POST au point de terminaison /messages avec l’objet JSON que vous avez assemblé aux étapes 1 et 2. Si votre message est bien envoyé, vous obtenez la réponse suivante :

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

Étape 4 : vérifier les webhooks

Si vous configurez vos webhoooks, vérifiez s’il y a des changements dans le statut de votre message ainsi que dans toute réponse provenant des utilisateur·ices.

Les webhooks des utilisateur·ices qui répondent aux messages interactifs comprennent un nouveau composant appelé interactive, qui contient des informations sur le choix de la personne. Pour plus d’informations, consultez la section Webhooks, Composants.

Par exemple, voici une demande de webhook décrivant une personne qui a partagé sa localisation.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "12345",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "12345",
              "phone_number_id": "12345"
            },
            "contacts": [
              {
                "profile": {
                  "name": "John Doe"
                },
                "wa_id": "12345"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "12345",
                  "id": "test-id"
                },
                "from": "123450",
                "id": "test-id",
                "timestamp": "16632",
                "location": {
                  "address": "1071 5th Ave, New York, NY 10128", #Optional
                  "latitude": 37.421996751527,
                  "longitude": -122.08407156636,
                  "name": "Solomon R. Guggenheim Museum" #Optional
                },
                "type": "location"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Le composant location dans la charge utile contient la latitude et la longitude de la personne. Notez que address et name sont facultatifs et peuvent ne pas être insérés.

"location": {
  "address": "1071 5th Ave, New York, NY 10128", #Optional
  "latitude": 40.782910059774,
  "longitude": -73.959075808525,
  "name": "Solomon R. Guggenheim Museum" #Optional
}