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.
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 :
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 :
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.
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.
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.
Les messages interactifs ne nécessitent aucun modèle ni aucune approbation préalable.
Les messages liste sont idéaux pour présenter plusieurs options, par exemple :
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 :
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 :
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.
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 plus d’informations, lisez ce qui suit sur l’envoi de ces messages.
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.
interactive
Pour envoyer un message liste, vous devez assembler un objet interactive
de type list
avec les composants suivants :
Objet | Description |
---|---|
| 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. |
| Obligatoire. Corps du message. 1 024 caractères maximum. |
| Facultatif. Pied de page du message. |
| Obligatoire. Dans l’action, vous devez imbriquer :
Dans |
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", } ] }, ... ] } }
Pour envoyer un message bouton de réponse, vous devez assembler un objet interactive
de type button
avec les composants suivants :
Objet | Description |
---|---|
| Facultatif. Pour les messages interactifs Une fois que vous avez sélectionné votre
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" } } } |
| Obligatoire. |
| Facultatif. |
| Obligatoire. Vous devez ajouter au moins un 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" } } ] } |
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
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 |
---|---|
| Définissez-le sur |
| Définissez-le sur |
| Définissez-le sur le texte à afficher au-dessus du bouton Envoyer la localisation. |
| Définissez-le sur |
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.
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.
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}" }] }
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 }